4
int add(int a,int b)
{
     cout<<"1"<<endl;
     return a+b;
 }
 int add(int a,char c)
 {
       cout<<"2"<<endl;
      return a+c;
 }
int main()
{
          cout<<add(10,20)<<endl;    //1
          cout<<add(10,'a')<<endl;   //2 
          cout<<add('a','b')<<endl;  //3 
 }

上記のコードでは、最初の関数が関数 add(int,int) を呼び出し、2 番目の関数が関数 add(int,char) を呼び出します。3 番目の関数呼び出しはエラーになるはずですが、関数 add(int,char) を呼び出します。誰でも理由を説明できますか。

4

3 に答える 3

5

char から int への暗黙的な変換があります。詳細はこちら:

http://www.petebecker.com/js/js200004.html

暗黙の変換は次のとおりです。

http://en.cppreference.com/w/cpp/language/implicit_cast

于 2012-09-20T17:42:53.443 に答える
1

ある関数のすべてのパラメーターが別の関数のパラメーターと少なくとも同じように変換され、一部のパラメーターがより適切に変換される場合、その関数が使用されます。

すべてのパラメーターが少なくとも別の関数のパラメーターと同じように変換されるわけではなく、後者の関数のすべてのパラメーターが少なくとも前の関数のパラメーターと同じように変換されるとは限らない場合、単純な関数の通常のケースであいまいさが生じます。

于 2012-09-20T17:48:42.510 に答える
0

最も近い一致は、intとcharの一致です。charは暗黙的にintに変換できるため、引き続き機能します。

int a = 'a'; // Returns the ascii value for 'a'.
于 2012-09-20T17:45:37.887 に答える