C ++:静态成员变量

时间:2012-03-24 15:51:46

标签: c++ variables static member non-static

声明:“静态成员变量只能通过静态方法更改。”

此语句是否正确,还是非静态方法也可以更改静态成员变量?

谢谢!

4 个答案:

答案 0 :(得分:7)

这是错的。任何成员函数都可以更改static个数据成员。 static方法也可以被任何成员函数调用。

反过来说这是不可能的:static方法无法调用非static方法,也无法访问非static成员。

那是因为static成员(方法和数据)绑定到一个类,而非静态绑定到类实例。

答案 1 :(得分:7)

这不正确。静态成员可以通过非静态成员函数进行访问和修改。

答案 2 :(得分:1)

声明不正确。您可以从任何类成员函数和静态成员可见的任何其他函数修改静态成员(即可以从任何地方修改公共静态)。

答案 3 :(得分:0)

可以从程序中的任何位置访问

static数据成员(和静态成员函数),并授予访问说明符允许它:

struct test {
   void foo() {
      x = 1;
      bar();
   }
   static bar() {
      x = 2;
   }
   static int x;
};
int test::x = 0;
int main() {
   test::bar();
   test::x = 3;
}