gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:18:40 26 4
gpt4 key购买 nike

用 C++ 编码时,我“最喜欢”的烦恼之一是在我的类中声明一些静态变量,然后查看有关未解析静态变量的编译错误(在早期,我总是害怕它到底是什么意思)。

我的意思是像这样的经典例子:

测试.h

class Test
{
private:
static int m_staticVar;
int m_var;
}

测试.cpp

int Test::m_staticVar;

在我看来更令人困惑的是这个定义的语法,你不能在这里使用“static”这个词(因为 static 在 cpp 中使用时有不同的含义,叹气)所以你不知道(除了knowledge static member vars work like that)为什么到底有一些来自 Test 类的 int 以这种方式定义,为什么 m_var 不是。

据您所知/意见,这是为什么?我只能想到一个原因,那就是让链接器的生活更轻松——也就是说,出于同样的原因,你不能使用非整数常量(SomeClass m_var = something)。但是我不喜欢仅仅因为编译链的某些部分很难吃掉它而改变语言特性的想法......

最佳答案

好吧,这就是它的工作方式。您只在 .h 文件中声明了静态成员。链接器需要能够在它链接在一起的对象文件中准确找到该静态成员的一个定义。您不能将定义放在 .h 文件中,那样会生成多个定义。

更新:C++17 可以用 inline variable 解决这个问题.

关于c++ - 将类静态成员定义放入 cpp 文件——技术限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3409428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com