将类静态成员定义放入cpp文件 - 技术限制?

Mir*_*cek 3 c++ static declaration

我在C++中编写代码时在我的类中声明一些静态变量,然后查看有关未解析的静态变量的编译错误(在以前的时间里,我总是被吓到了,这是什么意思),这是我最喜欢的烦恼之一.

我的意思是经典的例子:

Test.h

class Test
{
private:
  static int m_staticVar;
  int m_var;
}
Run Code Online (Sandbox Code Playgroud)

TEST.CPP

int Test::m_staticVar;
Run Code Online (Sandbox Code Playgroud)

这个定义的语法让我觉得更令人困惑的是,你不能在这里使用'static'这个词(因为静态在cpp中使用时有不同的含义,叹息)所以你不知道(除了知识静态成员) vars就是这样工作)为什么在地球上有一些来自Test类的int以这种方式定义,为什么m_var不是.

根据您的知识/意见,为什么?我只能想到一个原因,那就是让链接器的生命更容易 - 也就是说,为什么你不能使用非整数常量(SomeClass m_var = something).但是我不喜欢弯曲语言功能的想法只是因为编译链的某些部分会很难吃它...

Han*_*ant 6

嗯,这就是它的工作方式.您只在.h文件中声明了静态成员.链接器需要能够在它链接在一起的目标文件中找到该静态成员的一个定义.您不能将定义放在.h文件中,这将生成多个定义.

更新:C++ 17可以使用内联变量解决这个问题.

  • @UncleBens:C++永远不会一致.这是它魅力的一部分. (2认同)