gpt4 book ai didi

c++ - 静态全局变量的奇怪行为

转载 作者:IT老高 更新时间:2023-10-28 12:46:22 25 4
gpt4 key购买 nike

我知道这个程序没有以适当的方式使用静态变量,但它显示了如何重现我看到的行为:

Main.cpp:

int main(){
MyObject* p = new MyObject();
Header::i = 5;

printf("i %i\n", Header::i);
p->update();

return 0;
}

MyObject.cpp:

MyObject::MyObject(){
}

void MyObject::update(){
printf("i %i\n", Header::i);
}

Extern.h:

namespace Header {
static int i;
};

我得到的输出是:

i : 5
i : 0

为什么两个输出都没有得到 5 ?这个 0 是从哪里来的?你能解释一下静态变量是如何工作的吗?

最佳答案

静态变量具有内部链接,这实际上意味着它们是编译单元的本地变量。由于您在 2 个源文件的头文件中声明了静态变量,因此您基本上有 2 个不同的变量:一个 i 本地到 MyObject.cpp 和另一个不同的 i,本地到 main.cpp

关于c++ - 静态全局变量的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31045735/

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