修改字串文字

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';