修改字符串文字
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';