2014-04-26 34 views
0
void main() { 

const int a = 10; 
const int *b = &a; 
int *c = const_cast <int*>(b); 
*c = 5; 
cout<<a<<" "<<*b<<" "<<*c<<endl; //10 5 5 
cout<<&a<<" "<<b<<" "<<c<<endl; //same address 
cout<<*(int*)&a<<" "<<*&a<<endl; //5 10 
} 

什麼使得類型轉換影響了這個? 存儲的值在哪裏?2個值在一個變量(const和const_cast)中C++

+7

它是'int main',而不是'void main'。修改常量數據是未定義的行爲。別指望什麼。 – chris

+0

當你知道引用數據不是const時,'const_cast'應該只用於(從不,heh)。即如果'a'不是**'const',那麼''''''''''''''指針的const_cast具有優點。正如你寫的,你違反了。 [看到它](http://ideone.com/cutUWq) – WhozCraig

+0

你的問題並不清楚,所以很難確切地知道你要找什麼信息。 –

回答

1

該程序具有未定義的行爲:使用const_cast<int*>(b)可以從對象中刪除const限定符,該對象實際上是const,並且該對象的賦值可能具有任意效果。

觀察到的效果表明,該實現取代a的使用及其不可變值,而取消引用b以確定該值。不過,它也可以具有任意的其他效果。例如,嘗試寫入寫保護位置時出現分段錯誤可能是一種可能的結果。那麼,什麼都可能發生。

相關問題