2012-03-24 316 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; 
}