当我尝试在初始化列表中调用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/

10-10 04:23