好的,将在构造函数/函数中声明的静态变量(我认为哪个无关紧要)分配给编译时定义的值,就好像变量只被分配了一次,参见示例:
#include <iostream>
#define y 4
#define z 3
using namespace std;
class Foo
{
public:
Foo(int x)
{
static int i = x;
cout << i << endl;
}
};
int main()
{
Foo p(y);
Foo o(z);
return 0;
}
预期输出:
4
3
实际输出:
4
4
我在搜索时找不到任何东西,但如果这是一个骗局,请告诉我,我会关闭这个问题。
最佳答案
static
局部变量只在它所在的函数第一次进入时被初始化一次。所以只有第一个初始化发生,所有其他的都被忽略。
这是您的程序,经过修改以说明它。
#include <iostream>
#define y 4
#define z 3
using namespace std;
struct Bar {
int i;
Bar(int i) : i{i}
{
cout << "Bar::Bar with " << i << '\n';
}
};
class Foo
{
public:
Foo(int x)
{
static Bar b = x;
cout << b.i << '\n';
}
};
int main()
{
Foo p(y);
Foo o(z);
return 0;
}
如果您希望每个后续调用都修改i
,则需要赋值给它:
static int i; // default initialize i.
i = x; // assign a new value into i
关于c++ - 函数范围内的静态声明和定义不会改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40992501/