声明:“静态成员变量只能通过静态方法更改。”
此语句是否正确,还是非静态方法也可以更改静态成员变量?
谢谢!
答案 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;
}