2017-08-03 121 views
-2

看此程序:更改常量變量的指針C++

int main(){ 
    const int a_const=10; 
    int * const a=const_cast<int * const>(&a_const); 
    *a=5; 
} 

所以的a_const地址和指針a具有相同的值。 但改變a指向的值,不是a_const

回答

5

程序的行爲是undefined。它出現可能是未定義行爲的表現。

通過使用作爲const_cast的結果獲得的非const指針(或引用),您不得試圖更改聲明爲const的變量的值。

(如果它出現在這種情況下工作,嘗試用只讀字符串字面的等價物 - 這將導致很多平臺的崩潰)

+1

雞蛋裏挑骨頭:如果行爲是*不確定*,你可以不說*它不可能*。根據定義,未定義的行爲不能排除任何行爲;) –

+0

@ el.pescado:是的,精度很重要。我修改了。 – Bathsheba