このコードフラグメントはOKですか、それとも未定義の動作ですか?空文字列のc_strを呼び出す
std::string s;
assert(strlen(s.c_str())==0);
未定義の動作でない場合、上記のアサーションは合格しますか?
このコードフラグメントはOKですか、それとも未定義の動作ですか?空文字列のc_strを呼び出す
std::string s;
assert(strlen(s.c_str())==0);
未定義の動作でない場合、上記のアサーションは合格しますか?
はい(あなたはそれが実際に関数を呼び出す作るためにc_str
に()
を追加した場合)、それは動作しますし、アサーションが通過します。
それはconst char *(std::string::*)()
以来、暗黙のうちにconst char *
に変換することはできません、コンパイルエラー(あなたが有効にアサーションを持っている場合)です。
(舌だけ中途半端頬インチ)
これは完全に定義されており、アサーションは成功しています。 c_str()関数は、常に有効なゼロ終了C文字列を返します。
通常、空の文字列をテストするためにempty()を使用します。