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

I'd guess it is because when you call a("str"), you're trying to call a function with parameters const char *. It will convert any type of pointer to bool before any other implicit conversion (::std::string etc).

于 2012-11-25T18:41:32.967 回答