C ++如何初始化包含互斥锁的class的静态变量

C++ How to initialize static variable of an class which contains a mutex

我有一个带互斥量的模板化 class:

template <typename T> class A {
 public:
  std::mutex classMutex;
  T value;
  A(T initValue) : value(initValue){}
};   

和第二个 class 与第一个 class:

的静态成员
class B{
  static A<double> test;
}; 
A<double> B::test = 0.0;

我一直收到错误消息: "copying variable of type 'A' invokes deleted constructor"

感谢@rafix07:

解决方法是:

A<double> B::test{0.0};

"mutex 既不可复制也不可移动,这意味着默认删除所有复制和移动操作(对于包含 mutex 作为数据变量的 class)

 A(const A&) = delete,
 A(A&&) = delete 

等当你打电话给

A<double> B::test = 0.0 

double 值 0.0 转换为

A<double>(0.0) 

所以你有

A<double> B::test = A<double>(0.0) 

因为复制构造被删除编译器拒绝这一行。使用 {},您只需调用 A(0.0) 构造函数,而无需任何复制语法。”@rafix07