我在其他cpp文件中使用了全局std::mutex
。
可以在头文件中将其声明为inline
吗?
inline std::mutex mtx;
mtx
是否以此方式构造?
是否应该显式初始化?如:
inline std::mutex mtx = {};
答案 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.
我从这些句子中了解到,互斥锁实际上将是唯一的且已正确初始化(如果使用了建议的唯一标头)