0

私は次のコードに興味があります、なぜそれが最初にbool funcを呼び出すのか誰かが説明できますか?「str」はargタイプの文字列に適していませんか?

 void a(bool input)
    {
        cout<<"I amd first"<<endl;
        cout<<input<<endl;
    }

    void a(const string &input)
    {
        cout<<"I amd second"<<endl;
        cout<<input<<endl;
    }

    int main( )
    {
        a("str");  //  call  void a(bool input)

        a(string("str"));   //call  void a(const string &input)

        return 0; 
    }
4

2 に答える 2

3

"str"は型const char[4]であり、すぐにに減衰します。const char *任意のポインタ型からへの変換は、非明示的なコンストラクタからカスタム型への変換の前にbool考慮されます。

ですから、答えは「規格がそう言っているから」だと思います。

関連するパッセージは13.3.3.2¶2である必要があります。

暗黙の変換シーケンスの基本形式を比較する場合(13.3.3.1で定義)

  • 標準の変換シーケンス(13.3.3.1.1)は、ユーザー定義の変換シーケンスや省略記号の変換シーケンスよりも優れた変換シーケンスです[...]
于 2012-11-25T18:40:37.147 に答える
1

これは、a( "str")を呼び出すときに、パラメーターconstchar*を使用して関数を呼び出そうとしているためだと思います。他の暗黙的な変換(:: std :: stringなど)の前に、任意のタイプのポインターをboolに変換します。

于 2012-11-25T18:41:32.967 に答える