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

C++ 为什么我会得到未引用的局部变量,c++,visual-c++,c++11,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; } i是静态的,这意味着它属于类,而不是实例。实际上,您应该编写一个::i=9。当你考虑这一点时,你应该看到变量A实际上从来没有被使用过。 < p>你已经使我静态了,这意味着只有一个

我使用的是VS2013中的Visual C++12,这是一个编译器错误还是我不懂什么? 但我得到了警告C4101:“a”:代码中未引用的局部变量

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

int main()
{
    A a;
    a.i = 9;
}
i是静态的,这意味着它属于类,而不是实例。实际上,您应该编写一个::i=9。当你考虑这一点时,你应该看到变量A实际上从来没有被使用过。

< p>你已经使我静态了,这意味着只有一个全局副本。尝试使用::i访问它。注意,上面的代码OP与gcc一起工作


实际上,我不是实例化a“拥有”的,而是类a。

编译器发现,定义变量a后,它没有赋值,而且它本身也没有赋值给其他对象。

因为我是静态的,所以代码

int main()
{
    A a;
    a.i = 9;
}
将自动替换为

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

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

可能是因为a并不是任何东西都需要的。事实上,你也可以很容易地做a::i=9;。你可以做:A=A;这肯定会消除它。使用g++和-Wall时没有警告。使用std::cout a时仍然是警告,而不是静态的。是的,我一碰到柱子就注意到了。修正了。但是像这样的东西呢;a、 i=9;int y=兰德;而y-a.i++;'这没有区别,因为我仍然是静态的。每次使用实例(变量a)编写a.i时,编译器都会使用该类将其转换为a::i。听起来你不想让i成为一个静态变量。