当用 C++ 编码时,我“最喜欢”的烦恼之一是在我的类中声明一些静态变量,然后查看有关未解析的静态变量的编译错误(在早期,我总是害怕它意味着什么)。
我的意思是经典的例子,比如:
Test.h
class Test
{
private:
static int m_staticVar;
int m_var;
}
Test.cpp
int Test::m_staticVar;
在我看来更令人困惑的是这个定义的语法,你不能在这里使用“静态”这个词(因为静态在cpp中使用时有不同的含义,叹息)所以你不知道(除了静态成员的知识) vars 像这样工作)为什么 Test 类中有一些 int 以这种方式定义,而为什么 m_var 不是。
据您所知/认为,这是为什么?我只能想到一个原因,那就是使链接器的生活更容易——即出于同样的原因不能使用非整数常量(SomeClass m_var = some)。但我不喜欢仅仅因为编译链的某些部分很难吃掉它而改变语言功能的想法......
嗯,这就是它的工作原理。您仅在 .h 文件中声明了静态成员。链接器需要能够准确地找到一个定义它链接在一起的目标文件中该静态成员的名称。您不能将定义放在 .h 文件中,这会生成多个定义。
更新:C++17 可以通过以下方法解决这个问题内联变量.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)