我有這樣的代碼示例:鑄造運營商 - 常量VS非const
class Number
{
int i;
public:
Number(int i1): i(i1) {}
operator int() const {return i;}
};
什麼是從鑄造運營商移除const
改性劑的影響? 它會影響自動投射,爲什麼?
我有這樣的代碼示例:鑄造運營商 - 常量VS非const
class Number
{
int i;
public:
Number(int i1): i(i1) {}
operator int() const {return i;}
};
什麼是從鑄造運營商移除const
改性劑的影響? 它會影響自動投射,爲什麼?
如果轉換操作符是不是常量,你不能轉換const對象:
const Number n(5);
int x = n; // error: cannot call non-const conversion operator
無論class Number
實例是否爲const,都可以調用const
版本。如果運算符被聲明爲非const,那麼它只能在非常量實體上調用 - 當你試圖在不能被調用的地方隱式地使用它時,你會得到一個編譯錯誤。
你的意思是「只在*非const *實體上調用?」? – legends2k 2010-02-24 11:00:51
@ legends2k:是的,已修復。謝謝。 – sharptooth 2010-02-24 11:24:56
如果你有這樣的功能:
void f(const Number& n)
{
int n1 = n;
}
它會開始,如果你給編譯錯誤在cast操作符中刪除const。
+1 - 很好賺。嗯 - 我想轉換從const對象中取得的值,但我不能,因爲轉換(即不修改源值)不是常量。停下來,看看,思考,推理是顯而易見的 - 這與任何其他方法沒有什麼不同。但我仍然聽到那個暮光之城的主題。源的(至少邏輯的)恆定性是該方法的預期行爲的一部分 - 「轉換」意味着什麼。但是再一次,一致的規則至少是一致的。 – Steve314 2010-02-24 10:46:47