可能性の重複:
const_casting question
const_cast <int*> does not work。どうして?
次のコードがintのconstの値を変更しようとします。しかしそれはaとbの両方が同じメモリアドレスを指すが、異なる値を表示するように思える。なぜ誰かが説明できますか?
const int a = 5;
int *b = const_cast<int*>(&a);
*b = 7; //not working why??
cout<<"\nConst Cast: "<<a<<" "<<&a;
cout<<"\nConst Cast: "<<*b<<" "<<b;
cout<<"\nConst Cast: "<<a<<" "<<&a;
/* Output
Const Cast: 5 0027F7FC
Const Cast: 7 0027F7FC
Const Cast: 5 0027F7FC
*/
あなたは 'a'の値を変更しないことを約束したことをコンパイラに伝えました。その後、2行後に約束を破って変更します。これは未定義の動作を呼び起こしています。これは、すべての目的と目的で「** DO NOT DO IT ** **」を意味します。 –
'const int a = 4;'を実行したときには、コンパイル時に評価できる定数式を 'a'に代入しています。実際には 'a'の値が変わりました。非const式で 'a'を設定しようとすると、期待した結果が得られます。 – AlexDan