2012-03-24 160 views
3

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

该声明是否正确,或者静态成员变量是否也可以通过非静态方法更改?

谢谢!

回答

7

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

+0

感谢您的帮助! – dudade 2012-03-25 13:47:51

7

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

这是另一种方式,这是不可能的:static方法不能调用非static方法,并且不能访问非static成员。

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

+0

非常感谢您为您详细的解答! – dudade 2012-03-24 16:02:08

1

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

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; 
}