const常量优化可能引发的问题
const int a = 10;
int &b = const_cast<int&>(a);
b = 20
cout << a << " " << b << endl;
输出为10 20
原因如下:
C++常量优化策略
a为const在编译阶段由于编译器优化策略,会直接将上下文中出现a的地方替换掉。因而编译结束时实际
语句相当于这样:
cout << 10 << " " << b << endl;
如此一来,运行期间修虽然通过a的引用b修改了a的值,实际上只会影响b的值。而a在编译阶段其在上下文中已经被替换,等同于 宏 。
如果要强制a可以修改,则需要告诉编译器不做优化,即添加volatile关键字
volatile const int a = 10;
则编译器不做优化。
输出为20 20