Mutable
mutable关键字用于修饰类的非静态数据成员。当数据成员被声明为mutable时,它将允许在const成员函数中修改该数据成员的值,即使该函数本身被声明为不修改对象的状态。默认情况下,const成员函数是不允许修改对象的状态的,因为它们被认为是只读函数。然而,有时候在一个const成员函数中,可能需要修改某个数据成员的值,这时可以使用mutable关键字来解决这个问题。
Case :

这是在“等待事件”一节中“创建线程安全的队列”的部分代码。在这里,互斥量成员之所以要被修饰为“mutable”,是因为在拷贝构造函数中传入的形参是一个const引用,并且empty是一个const成员函数,而锁住互斥量是个可变操作。
mutable的另一种不太常见的用法在lambda函数中。一般来说,要想在lambda函数中修改被捕获的值,就应该通过引用传递被捕获的值。但如果想让这个修改只在lambda作用域内生效,即在值传递的情况下修改变量,比较麻烦但很容易想到的做法就是在lambda中创建一个临时变量:

但使用mutable关键字就可以轻松地解决这个问题:
