snk*_*kid 62
您可以使用关键字标记数据成员,mutable
以允许在常量成员函数中修改它们,例如:
struct foo
{
mutable mutex foo_mutex;
// ....
void bar() const
{
auto_locker lock(foo_mutex);
// ...
}
};
Run Code Online (Sandbox Code Playgroud)
尝试尽可能少地这样做,因为滥用mutable
是邪恶的.
Adr*_*thy 14
mutable
对于概念上的方法,我通常可以使用锁和缓存const
.
特别是在缓存性能计算结果的情况下.这严格来说是一个实现细节,不应该被调用者关注,因此删除const
指定将等同于抽象中的小泄漏.
有了锁,我会问自己锁是否只是一个私有的实现细节.如果锁与其他对象共享,那么它实际上是接口的一部分.
在某些平台上,通过句柄访问锁,因此您可以使用const
该方法而无需担心mutable
.