2011-11-12 26 views
7

このコードフラグメントはOKですか、それとも未定義の動作ですか?空文字列のc_strを呼び出す

std::string s; 
assert(strlen(s.c_str())==0); 

未定義の動作でない場合、上記のアサーションは合格しますか?

答えて

5

はい(あなたはそれが実際に関数を呼び出す作るためにc_str()を追加した場合)、それは動作しますし、アサーションが通過します。

1

それはconst char *(std::string::*)()以来、暗黙のうちにconst char *に変換することはできません、コンパイルエラー(あなたが有効にアサーションを持っている場合)です。

(舌だけ中途半端頬インチ)

7

これは完全に定義されており、アサーションは成功しています。 c_str()関数は、常に有効なゼロ終了C文字列を返します。

通常、空の文字列をテストするためにempty()を使用します。

関連する問題