一下代码输出什么?优化
const int i = 1; int *j =(int*) &i; *j = 22; cout << &i << " " << j << endl; cout << i << " " << *j << endl;
const变量的地址取值后 发现结果居然不同 既然是同一个地址 为何会是不一样的结果,初步认为是数据存储区不同的问题,而后进一步发现非也。
设计
既然最初设计为const 那么开发者确定不想对这个变量修改 那么编译器能够优化为 当即数 替 换原来引用 的地方 从而提升效率,以后上面代码为code
const int i = 1; int *j =(int*) &i; *j = 22; cout << &i << " " << j << endl; cout << 1 << " " << *j << endl;
volatile 告诉编译器该变量是随时可能发生变化的,每次使用它的时候必须从内存中读取,于是编译器生成的可执行码会从新从i的地址读取数据 内存
volatile 关键字能够 禁止编译器这种优化行为开发
可是对于new 这种const 值是没法肯定的 因此编译器没法优化 ,以下例编译器
int * const i = new int; int *j = (int*)i; *j = 22; cout << i << " " << j << endl; cout << *i << " " << *j;
限制的i的值 运行期才能决定 因此编译期 编译器没法优化,也就不存在那个”疑惑“了
编译