w12*_*128 9 c++ multithreading constants
在一个子类中,我有一个私有std::mutex m字段,我在基类纯虚方法的实现中使用它以线程安全的方式返回一个值(该值可以由另一个线程更新):
int SubClass::get() const // implements 'virtual int get() = 0 const' of the base class
{
std::lock_guard<std::mutex> lck(m);
return value;
}
Run Code Online (Sandbox Code Playgroud)
编译器通过产生错误告诉我这违反了const正确性:
错误:将'const std :: mutex'绑定到类型'std :: lock_guard :: mutex_type&{aka std :: mutex&}'的引用将丢弃限定符
有没有办法使这种兼容并std::lock_guard以const正确的方式使用?只需改变它就不会const std::lock_guard改变任何东西 我真的不明白哪个部分有问题,然后我再次对C++很新...
Rak*_*111 23
该this指针是隐式const(它实际上是类型的右值const SubClass *),所以您要访问的任何成员都const含蓄.
如果你可以修改一个const函数中的成员对象,那会是什么意思const呢?:)
锁定防护装置想要修改互斥锁,锁定和解锁它,但因为它是const,它不能,这就是问题所在.锁定防护装置是否const合适并不重要,因为这与锁定防护装置修改互斥锁的能力无关.
为了有效地解决此问题,可以使用一个关键字来标记可在const限定函数中修改的成员对象.显然,你不应该滥用这个功能并用它来标记你班级的每个对象:
class SubClass {
/*...*/
private:
mutable std::mutex m;
//^^^^^^^
/*...*/
};
Run Code Online (Sandbox Code Playgroud)