为什么我得到未引用的局部变量

时间:2014-03-02 22:30:16

标签: c++ visual-c++ c++11

它是编译器错误(我使用VS2013的Visual C ++ 12)还是我不明白? 但我收到警告C4101:'a':此代码上未引用的局部变量

class A
{
public:
    static int i;
};
int A::i;

int main()
{
    A a;
    a.i = 9;
}

4 个答案:

答案 0 :(得分:5)

i是静态的,这意味着它属于类,而不是实例。你应该写A::i = 9。当您考虑到这一点时,您应该看到变量a实际上从未被使用过。

答案 1 :(得分:2)

你已经i静态,这意味着只有一个全局副本。尝试使用A::i访问它。请注意,上面的代码(OP)与gcc一起使用。

i实际上并非由实例化a“拥有”,而是属于A类。

答案 2 :(得分:1)

因为istatic,所以代码

int main()
{
    A a;
    a.i = 9;
}

会自动替换为

int main()
{
    A a;
    A::i = 9;
}

现在很明显为什么a未被引用。

答案 3 :(得分:0)

编译器看到在定义变量a之后,它没有赋值,并且它本身没有分配给其他对象。