`std :: string str(nullptr)`と `std :: string str = nullptr`が間違っているのはなぜですか?誰かが理由を詳細に説明できますか?

ジョン

なぜ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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ