C++ 修改字符串文字

示例

C ++ 11
char *str = "hello world";
str[0] = 'H';

"hello world" 是字符串文字,因此对其进行修改会产生未定义的行为。

str上面示例中的初始化在C ++ 03中已正式弃用(计划从该标准的将来版本中删除)。2003年之前,许多编译器可能对此发出警告(例如,可疑转换)。2003年之后,编译器通常会警告不要使用转换。

C ++ 11

上面的示例是非法的,并在C ++ 11和更高版本中导致编译器诊断。通过显式允许类型转换,可以构造类似的示例以显示未定义的行为,例如:

char *str = const_cast<char *>("hello world");
str[0] = 'H';