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

问题描述 投票:0回答:1

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

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

在cpp文件中,正确的实例化方式是什么?

std::mutex A::someMutex;

? 它是可行的,但就是这样的语法,我基本上是把一个字段声明了两次,感觉有点混乱,所以我决定在这里仔细检查一下,也许还有其他(更好的)方法?

c++ static
1个回答
1
投票

你的做法是正确的,但是这两个符号写了两次并不是完全一样的东西。

在类的括号里面(在.h文件中)这是一个 声明. 这是一种承诺,说 "我发誓这东西存在于某个地方"。这可以从 众多 翻译单元(即.cpp文件包括这个.hfile)。

另一方面,你在你的.cpp文件中写下的是 定义 的变量,它必须在你的程序中只存在一次。

从C++17开始,有一种替代方法:内联变量。它提供了在.cpp文件中跳过静态变量定义的能力(对于只用头的解决方案很有用)。

© www.soinside.com 2019 - 2024. All rights reserved.