我對面的來與具有相同的名稱作爲參數來初始化成員數據:這個關鍵字在initilizer歧義分辨率
class T {
int x;
public:
T(int x) : x(x) {} // assign parameter x to T::x
};
它工作得很好。但是當我嘗試使用明確初始化這個關鍵字時,發生了 錯誤。
T(int x) : this->x (x) {} // error
可能有人解釋錯誤的原因是什麼?
我對面的來與具有相同的名稱作爲參數來初始化成員數據:這個關鍵字在initilizer歧義分辨率
class T {
int x;
public:
T(int x) : x(x) {} // assign parameter x to T::x
};
它工作得很好。但是當我嘗試使用明確初始化這個關鍵字時,發生了 錯誤。
T(int x) : this->x (x) {} // error
可能有人解釋錯誤的原因是什麼?
根據member initializer list的語法,這裏預期的是標識符,而this->x
則不是。
類或標識符(表達式列表(可選))
類或標識符 - 的任何標識符,類名,或decltype表達名稱非靜態數據成員,直接或虛擬基,或(委派構造函數)的類本身
由於可能標識符上面顯示,x(x)
細而沒有歧義,沒有必要使用this->
可言。
你不能以這種方式使用初始化列表。如果你想要等價的行爲,你必須把這個任務放在定義中。
class T {
int x;
public:
T(int x) {
this->x = x;
}
};
被初始化的成員已經被置於初始化列表中,使其已被消除。試圖使用this
來引用該成員是一個錯誤。構成成員的價值同樣不含糊,因爲你不能從自身構造成員。這就是爲什麼你可以爲成員和構造函數參數使用相同的名稱。
可以將'this-> x'作爲'T :: x'的_identifier_嗎? – NERDYLIZARD
@NERDYLIZARD不,它的語法不允許。 – songyuanyao
你的意思是說'this-> something'根本不被認爲是標識符? – NERDYLIZARD