私のコードでは、を使用する代わりにstd::string
オブジェクトを初期化する代わりに、私は(これはbool
です)とタイプしました。これでコンパイルエラーは報告されませんでした。しかし、後で私のコードでは、この文字列オブジェクトが使用されているとき、私はstd::logic_error
を実行時に取得します。誰も説明してください、なぜこのコンストラクションが許可されたのですか(そうでなければ、私はコンパイルエラーを受け取り、問題を見つけましたか?これを実行している間、私が得る文字列オブジェクトを作成するためにブール値を使用するときに、どのような型変換が行われていますか?
#include <iostream>
int main()
{
std::string str = false;
std::cout << str << "\n";
}
O/P - - ここで
は小さなスニペットです
[email protected]~/MYBACKUP=>g++ -o test_string -g test_string.cxx
[email protected]~/MYBACKUP=>./test_string
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_S_construct NULL not valid
Aborted
okです。しかし、これはコンパイル時のエラーに終わってはいけませんか? (実行時にエラーを後でキャッチする代わりに) – anindita
@anindita:いいえ 'false'はヌルポインタ定数として使用できます(' #include 'の場合は' 0'または 'NULL'と同じです)とヌルポインタ定数は 'const char *'として使うことができるので、 'const char *'をとる 'std :: string'コンストラクタを使うことができます。 –
ok ...説明をありがとう。 – anindita