为什么这是一种未定义的行为?

Why is this one an undefined behaviour?

在我的 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 char * 的变量中,以防止意外更改它们。 const_cast 删除了这层保护,然后 b[0] = 'b'; 正在对其执行写入。由于它仍然是指向的字符串文字,因此此写入是未定义的行为。