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成員?
爲什麼不允許?
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成員?
爲什麼不允許?
const
成員在對象構造期間被初始化。 static
成員不依賴於對象創建,並且無權訪問this
指針,因此他們不知道const
成員變量所在的位置。
即使它不是const
這是行不通的:
error: a nonstatic member reference must be relative to a specific object
靜態函數不能訪問非靜態成員變量。這是因爲非靜態成員變量必須屬於一個類對象,並且靜態成員函數沒有類對象來處理。
const
意味着不同的事情。在這種情況下,這意味着i
在初始化後是不可變的。它不意味着它是一個字面常量(就像我相信你認爲它的意思)。 i
對於TConst
的不同實例可以是不同的,所以static
方法不能使用它是合乎邏輯的。
它總是這麼簡單)謝謝 – Alexander 2011-12-28 18:12:01
請始終發佈您獲得的完整錯誤。 – orlp 2011-12-28 18:05:49
const int仍然綁定到一個對象,而不是類。 – nullpotent 2011-12-28 18:07:09
在一個靜態方法中沒有類實例,所以沒有類成員...只要你想這樣使用這個'static const int i = 42;'。 – AJG85 2011-12-28 18:12:50