2011-12-28 142 views
9
class TConst 
{ 
    const int i; 
    int& ref; 
    public: 
    TConst(int n):i(n),ref(n){} 
    static void p1(){prn(i);}//error here 
}; 

當我嘗試在static成員函數中使用const類成員時,編譯器生成錯誤。爲什麼我們不能在靜態成員函數中使用const成員?

爲什麼不允許?

+1

請始終發佈您獲得的完整錯誤。 – orlp 2011-12-28 18:05:49

+1

const int仍然綁定到一個對象,而不是類。 – nullpotent 2011-12-28 18:07:09

+1

在一個靜態方法中沒有類實例,所以沒有類成員...只要你想這樣使用這個'static const int i = 42;'。 – AJG85 2011-12-28 18:12:50

回答

6

const成員在對象構造期間被初始化。 static成員不依賴於對象創建,並且無權訪問this指針,因此他們不知道const成員變量所在的位置。

7

即使它不是const這是行不通的:

error: a nonstatic member reference must be relative to a specific object 

靜態函數不能訪問非靜態成員變量。這是因爲非靜態成員變量必須屬於一個類對象,並且靜態成員函數沒有類對象來處理。

13

const意味着不同的事情。在這種情況下,這意味着i在初始化後是不可變的。它意味着它是一個字面常量(就像我相信你認爲它的意思)。 i對於TConst的不同實例可以是不同的,所以static方法不能使用它是合乎邏輯的。

+0

它總是這麼簡單)謝謝 – Alexander 2011-12-28 18:12:01

相關問題