修改字符串文字

Version < C++ 11

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

hello world 是一个字符串文字,因此修改它会产生未定义的行为。

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

Version >= C++ 11

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

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