void test() { const int a = 7; int* b = (int*)&a; *b = 21; cout << a << endl << *b << endl; }
有谁能解释一下吗?
const volatile int a = 7;
要是换成这样就正常了 这是bug?
之所以会出现该问题是因为高速缓存一致性引起的,请参看这篇文章:http://hi.baidu.com/ximufengsky/item/9a2bdb311b6dfc8ec3cf2952
下列测试代码可以供你参考下:
const int a = 7;
int* b = (int*)&a;
*b = 21;
const int* p = &a;
cout << *p << endl << *b << endl;
const是一个关键字,它限定一个变量不允许被改变
http://baike.baidu.com/view/1065598.htm
你要明白 const是什么意思,他是静态的,在编译器就已经固定了,不允许修改
据说这是编译器优化的。
也就是说, 理论上说你不这么“hack”的话, 那么a永远不会变
因此编译器碰到a的时候, 直接替换成7, 不去取a的值。