gpt4 book ai didi

c++ - 在实例之间共享方法的局部静态变量有任何风险吗?

转载 作者:行者123 更新时间:2023-11-27 22:51:13 24 4
gpt4 key购买 nike

假设我创建了:

class Hello {
public:
int World(int in)
{
static int var = 0; // <<<< This thing here.
if (in >= 0) {
var = in;
} else {
cout << var << endl;
}
}
};

现在,如果我这样做:

Hello A;
Hello B;

A.World(10);
A.World(-1);
B.World(-1);

我得到的输出是“10”,后面跟着另一个“10”。一个方法的局部变量的值刚刚从类的一个实例转移到另一个实例。

这并不奇怪 - 从技术上讲,方法只是带有隐藏 this 参数的函数,因此静态局部变量的行为应该与普通函数一样。但它有保证吗?它是标准强制执行的行为,还是仅仅是编译器处理方法的副产品?换句话说 - 这种行为可以安全使用吗? (...超出了让不习惯的人感到困惑的标准风险...)

最佳答案

是的。函数是否是类的 [非静态] 成员并不重要,它保证只有一个静态变量实例。

对此类变量的正确技术解释是,这些是具有static durationinternal linkage 的对象 - 因此这些名称一直存在到程序退出,并且该名称的所有实例引用同一实体。

关于c++ - 在实例之间共享方法的局部静态变量有任何风险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37075298/

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