VC++ 2010的問題:const_cast會與布爾:如果條件忽視
const bool bNew = true;
const_cast<bool&>(bNew) = false;
if(bNew)//bNew is false here, but
{
int i = 0;//this line will be executed
}
爲什麼?
謝謝。
VC++ 2010的問題:const_cast會與布爾:如果條件忽視
const bool bNew = true;
const_cast<bool&>(bNew) = false;
if(bNew)//bNew is false here, but
{
int i = 0;//this line will be executed
}
爲什麼?
謝謝。
從C++ 03標準的部分7.1.5.1/4:
除了任何類成員聲明
mutable
(7.1.1)可以被修改,任何嘗試期間修改const
對象其壽命(3.8)導致未定義的行爲。
你宣佈bNew
是一個const
對象,然後通過顯式地鑄造它拿走修改它破壞了類型系統。因此,您調用未定義的行爲,這意味着任何東西都可能發生。
那麼,const_cast的目的是什麼? –
當你100%確定該對象沒有創建const。躲開它。 – Ven
@AcaMiln:主要處理本身不是常量不正確的不良或古老API。例如,假設你需要調用一個接受'MyClass&obj'參數的函數,但你知道這個函數不會修改'obj';它只是缺少參考中的'const'。現在你已經有了一個'MyClass const arg',你需要傳遞給這個函數。這是'const_cast'適合的地方。 –
你可以爲VC++ 2010添加一個標籤嗎? –
@ C-Otto:完成,謝謝。 – bernie
聽起來好像編譯器已經將'bNew'的評估優化爲'true',而不管你在第二行做什麼。 –