它是编译器错误(我使用VS2013的Visual C ++ 12)还是我不明白? 但我收到警告C4101:'a':此代码上未引用的局部变量
class A
{
public:
static int i;
};
int A::i;
int main()
{
A a;
a.i = 9;
}
答案 0 :(得分:5)
i
是静态的,这意味着它属于类,而不是实例。你应该写A::i = 9
。当您考虑到这一点时,您应该看到变量a
实际上从未被使用过。
答案 1 :(得分:2)
你已经i
静态,这意味着只有一个全局副本。尝试使用A::i
访问它。请注意,上面的代码(OP)与gcc一起使用。
i
实际上并非由实例化a
“拥有”,而是属于A
类。
答案 2 :(得分:1)
因为i
是static
,所以代码
int main()
{
A a;
a.i = 9;
}
会自动替换为
int main()
{
A a;
A::i = 9;
}
现在很明显为什么a
未被引用。
答案 3 :(得分:0)
编译器看到在定义变量a之后,它没有赋值,并且它本身没有分配给其他对象。