C++ std::atomic::store can';不能在ctor初始化列表中调用

C++ std::atomic::store can';不能在ctor初始化列表中调用,c++,c++11,C++,C++11,当我试图在初始化列表中调用std::atomic::store时,出现以下编译器错误: g++-std=c++11测试函数调用函数调用函数调用函数.cc test\u function\u call\u in\u ctor.cc:在构造函数“TestA::TestA()”中: test_function_call_in_ctor.cc:7:17:错误:应为“(“.”之前的“.”标记 TestA():运行存储(true){ ^ test_function_call_in_ctor.cc:7:17:

当我试图在初始化列表中调用std::atomic::store时,出现以下编译器错误:
g++-std=c++11测试函数调用函数调用函数调用函数.cc

test\u function\u call\u in\u ctor.cc:在构造函数“TestA::TestA()”中:
test_function_call_in_ctor.cc:7:17:错误:应为“(“.”之前的“.”标记
TestA():运行存储(true){
^
test_function_call_in_ctor.cc:7:17:错误:应为“{”before.”标记

源代码如下:

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;
}
类测试{
公众:
TestA():运行存储(true){

无法,因为尚未构造
运行
。应在初始值设定项列表中调用其构造函数:

TestA() : run_(true) {}

因为尚未构造
run.
。应在初始值设定项列表中调用其构造函数:

TestA() : run_(true) {}

初始值设定项列表指定成员的构造函数参数。您不能在尝试时使用成员函数。但是,
std::atomic
有一个构造函数将
T
值作为arguemnt:

TestA(): run_(true) { ... }

由于对象正在构造中,因此当时其他线程不可能使用它,也就是说,不需要使用
store()
无论如何。

初始值设定项列表指定成员的构造函数参数。您不能像尝试那样使用成员函数。但是,
std::atomic
有一个构造函数将
T
值作为arguemnt:

TestA(): run_(true) { ... }

由于该对象正在构造中,因此当时不可能被其他线程使用,也就是说,无论如何都不需要使用
store()

谢谢,迪特玛。也许我对我的问题描述得不够清楚。正如你提到的,我尝试的第一个版本在线程数据竞争检查中失败,但是如果我将run.store(true)在ctor中,它将通过数据竞争检查,并且发现初始化列表不能直接使用“:run_u.store(true)”。我认为您的回答有意义。谢谢,迪特玛。也许我没有足够清楚地描述我的问题。正如您所提到的,我尝试的第一个版本在线程数据竞争检查中失败,但是如果我将run_u.store放在(true)在ctor中,它将通过数据竞争检查,并且发现初始化列表不能直接使用“:run_z.store(true)”。我认为您的答案是有意义的。