为什么先调用bool_function?

时间:2012-11-25 18:37:50

标签: c++

我对以下代码感到好奇,有人可以解释为什么它首先调用bool func? isn`t“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; 
    }

2 个答案:

答案 0 :(得分:3)

"str"属于const char[4]类型,会立即衰减到const char *,而任何指针类型转换为bool都会被视为之前自定义类型的非显式构造函数。

所以,我会说答案是“因为标准是这样说的”。

相关段落应为13.3.3.2¶2:

  

比较隐式转换序列的基本形式(如13.3.3.1中所定义)

     
      
  • 标准转换序列(13.3.3.1.1)是比用户定义的转换序列或省略号转换序列更好的转换序列[...]
  •   

答案 1 :(得分:1)

我猜这是因为当你调用(“str”)时,你试图用参数const char *调用一个函数。它会在任何其他隐式转换(:: std :: string etc)之前将任何类型的指针转​​换为bool。