const が変更されたときに何が起こるかは、一部の C 標準 (おそらく 99 ?) では未定義です。しかし、ある学生がコードを提示してくれたので、それを修正しました。
定数変数のアドレスについて特別なことは何もわかりませんa
。&a
とが同じであることを確認したb
ので、コンパイラは微妙に他の場所を指していません。しかし、代入*b
してもconst値は変わりません。
私は最適化を実行していません。-g
デバッグするフラグを指定してコンパイルし、コードにステップインすると、期待どおりの結果が得られます (変数のメモリ位置がa
変更されます)。ただし、以下に示すコードは の更新された値を反映していませんa
。
これは、最適化なしで、デバッグモードでも一時がレジスタに配置されているということですか?
#include <iostream>
using namespace std;
int main(){
const int a = 15;
cout << a << '\n';
int * b= (int*)&a;
cout << &a << "\n";
cout << b << "\n";
*b = 20;
cout << *b << '\n';
cout << a << '\n';
int x = a;
cout << x << '\n';
x = *b;
cout << x << '\n';
return 1;
}