声明:“静态成员变量只能由静态方法更改。”
这种说法是否正确,或者静态成员变量也可以通过非静态方法进行更改?
谢谢!
这是错的。static
任何成员函数都可以更改数据成员。static
方法也可以被任何成员函数调用。
反过来,这是不可能的:static
方法不能调用非static
方法,也不能访问非static
成员。
这是因为static
成员(方法和数据)绑定到类,而非静态绑定到类实例。
这是不正确的。静态成员可以被非静态成员函数访问和修改。
该说法不正确。您可以从任何类成员函数以及从静态成员可见的任何其他函数修改静态成员(即,可以从任何地方修改公共静态)。
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;
}