头文件中的内联std :: mutex

时间:2019-07-03 19:12:36

标签: c++ c++17 inline-variable

我在其他cpp文件中使用了全局std::mutex

可以在头文件中将其声明为inline吗?

inline std::mutex mtx;

mtx是否以此方式构造?

是否应该显式初始化?如:

inline std::mutex mtx = {};

2 个答案:

答案 0 :(得分:2)

在C ++ 17和更高版本中,可以将mtx声明为inline是适当的。这样一来,您就可以在所有翻译单元中定义相同的变量。

  

是否应该显式初始化?如:

inline std::mutex mtx = {};

不需要。 std::mutex是默认可构造的,因此inline std::mutex mtx;就是您所需要的。


在拥有内联变量之前,您需要做的是头文件

extern std::mutex mtx;

在其中,然后在单个cpp文件中具有

std::mutex mtx;

其中实际上提供了一个定义。

答案 1 :(得分:2)

inline关键字的文档中,该关键字应用于变量(C ++ 17) (https://en.cppreference.com/w/cpp/language/inline) 据说

2) It has the same address in every translation unit.

If an inline function or variable (since C++17) with external linkage is defined differently in different translation units, the behavior is undefined. 

我从这些句子中了解到,互斥锁实际上将是唯一的且已正确初始化(如果使用了建议的唯一标头)