char *str = "hello world"; str[0] = 'H';
"hello world" 是字符串文字,因此对其进行修改会产生未定义的行为。
str上面示例中的初始化在C ++ 03中已正式弃用(计划从该标准的将来版本中删除)。2003年之前,许多编译器可能对此发出警告(例如,可疑转换)。2003年之后,编译器通常会警告不要使用转换。
上面的示例是非法的,并在C ++ 11和更高版本中导致编译器诊断。通过显式允许类型转换,可以构造类似的示例以显示未定义的行为,例如:
char *str = const_cast<char *>("hello world"); str[0] = 'H';