【发布时间】:2019-12-26 00:30:40
【问题描述】:
在我的 c++ 书中,我刚刚找到了一个代码,书中说存在未定义的行为。
# include <iostream>
using namespace std;
int main( )
{
const char * a = "aaa";
char * b = const_cast<char *>(a);
cout << a << '\n' << b << '\n';
b[0] = 'b'; // here undef. behaviour
cout << a << '\n' << b << '\n';
}
我不明白为什么。有人知道吗?
【问题讨论】:
-
你了解
const_cast的本质以及它在这里的作用吗? -
无法更改字符串文字。此代码尝试修改字符串文字。因此这是未定义的行为。
-
同
const int i = 42; int& j = const_cast<int&>(i); j = 0; -
简答——因为你修改了常量数据,所以只有当原始数据不是 const 时才允许修改 const cast 后的数据。
-
如果这本书没有告诉你原因,那它就不是一本很好的书。 Here 是一本不错的书籍。