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

Why is this one an undefined behaviour?

本文关键字:未定义 一个 为什么      更新时间:2023-10-16

在我的 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';对其执行写入操作。由于它仍然是它指向的字符串文本,因此此写入是未定义的行为。

相关文章: