在以下代码中:
#include<iostream>
using namespace std;
int main()
{
const int i = 8;
int j = 90;
const_cast<int &>(i) = 10;
static_cast<const int&> (j);
j = 200;
cout << " i = " << i << endl;
cout << " j = " << j << endl;
}
我认为输出将是
i = 10
j = 90
但是实际输出是
i = 8
j = 200
因此,投射不起作用?
答案 0 :(得分:7)
const_cast<int &>(i) = 10;
的行为是未定义。这是因为i
最初是const
,而您正在丢弃const
-ness 和尝试写入该对象。这样就可以观察到任何输出。
static_cast<const int&> (j);
是无操作的:它不会以某种方式将j
转换为const
类型。后续j = 200;
是一个琐碎的任务