如何正确实例化静态字段 tat 是另一个类对象

How properly instantiate static field tat is another class object

本文关键字:另一个 对象 tat 字段 何正确 实例化 静态      更新时间:2023-10-16

如果我在我的 .h 文件中有

class A
{
...
protected:
static std::mutex someMutex;
}

在 cpp 文件中实例化它的正确方法是什么? 只是为了写

std::mutex A::someMutex;

?它有效,但是我基本上两次声明字段的语法感觉有点混乱,所以我决定在这里仔细检查询问,也许还有其他一些(更好的?

你做的是正确的,但这两个符号写了两次并不完全相同。

在类的大括号内(在 .h 文件中(,这是一个声明
这是一种承诺,说"我发誓这存在于某个地方"。
这可以在许多翻译单元(即包含此.h的.cpp文件中看到。 文件(。

另一方面,您在.cpp文件中编写的内容是此变量;它必须在程序中只存在一次。

自 C++17 以来存在另一种选择:内联变量。
它提供了跳过静态变量定义的能力 在.cpp文件中(对于仅标头解决方案很有用(。

相关文章: