私が行った場合:
const char* const_str = "Some string";
char* str = const_cast<char*>(const_str); // (1)
str[0] = "P"; // (2)
未定義動作はどこ(どの行)に正確にありますか?
私はSOでこれをたくさん探してきましたが、明確で正確な答えは見つかりませんでした(または、少なくとも、私が理解できるものはありませんでした)。
また、関連:この種の関数を提供する外部ライブラリを使用する場合:
// The documentation states that str will never be modified, just read.
void read_string(char* str);
次のようなものを書いて大丈夫ですか?
std::string str = "My string";
read_string(const_cast<char*>(str.c_str()));
私は確かにそれread_string()
が書き込もうとしないstr
ことを知っているので?
ありがとうございました。