好的,在将构造函数/函数中声明的静态变量(我认为不重要)分配给编译时定义的值时,就好像变量只分配了一次,参见示例:
#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
我找不到任何关于搜索的内容,但如果这是一个骗局,请告诉我,我会关闭这个问题。
答案 0 :(得分:2)
当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