当我尝试在初始化列表中调用std :: atomic :: store时,出现以下编译器错误:g++ -std=c++11 test_function_call_in_ctor.cc
test_function_call_in_ctor.cc: In constructor ‘TestA::TestA()’:test_function_call_in_ctor.cc:7:17: error: expected ‘(’ before ‘.’ token TestA() : run_.store(true) { ^test_function_call_in_ctor.cc:7:17: error: expected ‘{’ before ‘.’ token
源代码如下:
class TestA {
public:
TestA() : run_.store(true) {
cout << "TestA()";
if (run_.load()) {
cout << "Run == TRUE" << endl;
}
}
~TestA() {}
private:
std::atomic<bool> run_;
};
int main() {
TestA a;
return 0;
}
对这个问题有什么想法吗?非常感谢。
最佳答案
初始化程序列表指定成员的构造函数参数。您不能像尝试那样使用成员函数。但是,std::atomic<T>
的构造函数采用一个T
值作为争辩子:
TestA(): run_(true) { ... }
由于该对象正在构建中,因此当时该线程不可能被另一个线程使用,即,无论如何都无需使用
store()
。关于c++ - 无法在ctor初始化列表中调用std::atomic::store,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39695146/