なぜstd::string str(nullptr)
そしてstd::string str=nullptr
間違っているのですか?誰かが理由を詳細に説明できますか?
このような例std::string(const char*)
は、Cで文字列を格納する標準バージョンであるnullで終了する文字列を受け入れるコンストラクタが存在するためにコンパイルされます。また、配列はstd::string("Ahoj")
、コンパイルなどのコードを許可するために、熱心にポインタに減衰します。
コンストラクターは有効なnullで終了する文字列を予期しているため、これは誤りです。例はコンパイルされますが、その動作は定義されていません。
同様std::string str(0);
に機能し、文字通りのゼロはC ++ 11より前のバージョンのnullptr
-として使用されていたため、暗黙的にポインタに変換できるため、未定義NULL
です。
編集:私はもともとstd::logic_error
投げられると主張しました、@FrançoisAndrieuxは私を訂正しました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加