gpt4 book ai didi

c++ 带有静态变量的静态函数的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 00:37:37 25 4
gpt4 key购买 nike

我正在尝试创建一堆 void 方法并稍后在程序中调用它们。我将演示前面的代码以帮助更好地理解我的问题。

.h file
static float sfloat;
namespace someNamespace
{
static void foo();
}
.cpp file
void someNamespace::foo(){cout<<sfloat<<endl}
  • 上面的代码是我正在处理的类的简单版本。

我在其他 .cpp 文件中初始化 sfloat

otherFile.cpp
void initializeAndUseFoo(){sfloat = 5; someNamespace::foo();}

就我的理解而言,我希望 foo 打印出 5 但它却打印出 0。这种行为发生在我拥有的所有其他静态变量(包括指针)中。似乎以某种方式,函数内的变量从未被初始化为我分配的值。

但是,如果我不通过该函数调用“sfloat”,那么我可以正确调用它。(如果我只是用

在控制台上打印出来
cout<<"just print it not through the function : " <<sfloat<<endl;

那么确实是5

感谢阅读。

最佳答案

全局静态变量在一个编译单元内是静态的。如果您制作另一个编译单元,它将拥有该静态变量的单独拷贝。

This SO question解释什么是 C++ 中的编译单元。

因为你的变量同时是staticglobal,所以在它的编译单元中会有它的一个实例。如果你想从另一个文件访问那个确切的变量,你将不得不使用 extern 关键字。没有它,将在每个编译单元中创建该变量的新拷贝。可以找些资料here ,例如。

关于c++ 带有静态变量的静态函数的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12949195/

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