2009-08-25 186 views

回答

13

如果您有一個實例變量,您可以使用點運算符訪問靜態成員(如果可訪問)。

#include <iostream> 
using namespace std; 

class Test{ 
    public: 
     static int no; 
}; 

int Test::no; 
int main(){ 
    cout << "\n" << Test::no; 
    Test::no=100; 
    Test a; 
    cout << "\n" << a.no; 
return 0; 
} 
+0

非常感謝。因爲我用我的編譯代碼VC表達與訪問諸如Test.no但沒有錯誤一類的靜態成員變量點符號。 – domlao 2009-08-25 03:36:25

+4

'Test.no'不是引用靜態成員的有效方法。成員訪問操作符的左側必須是一個對象。所以,'Test :: no'或'a.no'。當然,對於靜態,更喜歡'Test :: no'。 – 2009-08-25 03:48:51

2

您必須使用雙冒號訪問運算符。這是從類名訪問靜態成員的唯一有效方法。

+0

請注意,OP沒有說出點的左側是否有類型或對象。 – sbi 2009-08-25 03:44:58

+0

@sbi,這就是爲什麼我在我的答案中限定它:) – JaredPar 2009-08-25 03:47:24

+0

@JaredPar:是的,但只是在倒數第二個字。那時我的不同意模塊早已被踢開了。 ':)' – sbi 2009-08-25 08:53:00

2

這並不一定是「你能不能」的問題(因爲編譯器會經常讓你過有警告),但「你應該」的問題。

靜態數據成員不是對象的一部分,因此不應該這樣對待。

訪問靜態數據成員爲「正常」的數據成員可以使代碼少readible太,因爲它可能暗示不同的語義(儘管這通常是不太可能)。

+0

它仍然很有用,特別是在編寫模板代碼時。它使您能夠同時僅具有類型,而不是一個類型名稱的值調用給定類型的靜態函數/訪問靜態成員(在按模板函數,這些函數的返回類型不能的typedef版返回如)。可能很難想象。 – 2014-01-15 16:30:22