3

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

这种说法是否正确,或者静态成员变量也可以通过非静态方法进行更改?

谢谢!

4

4 回答 4

7

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

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

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

于 2012-03-24T15:53:53.540 回答
7

这是不正确的。静态成员可以被非静态成员函数访问和修改。

于 2012-03-24T15:54:23.847 回答
1

该说法不正确。您可以从任何类成员函数以及从静态成员可见的任何其他函数修改静态成员(即,可以从任何地方修改公共静态)。

于 2012-03-24T15:58:07.653 回答
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;
}
于 2012-03-24T16:01:32.487 回答