Выходная информация о перегрузке функции не соответствует ожидаемой - PullRequest
0 голосов
/ 25 ноября 2018

Я изучаю перегрузку функций в C ++, и у меня возникли сомнения по поводу соответствия функций.Запустив код ниже я получаю error C2668: 'function' : ambiguous call to overloaded function.Ответ о том, почему я получил ошибку, был четко дан в этой ссылке .Числа 1.2 и 2.2 - это тип double. Хотя есть еще одно сомнение, на которое у меня нет ответа.Когда я пытаюсь вызвать функцию (1.2,2) или , функцию (1,2.2) , она печатает как "int function" .Почему он не выдает ошибку, как указано выше.

КОД:

  void function(int y,int w)
    {
      printf("int function");

    }


 void function(float y,float w)
  {
    printf("float function");
  }


int main()
 {
   function(1.2,2.2);
   return 0;
 }

1 Ответ

0 голосов
/ 25 ноября 2018

Когда я пытаюсь вызвать function(1.2,2) или function(1,2.2), он печатает как "int function".Почему он не выдает ошибку, как описано выше.

Поскольку согласно правилам разрешение перегрузки void function(int y,int w) лучше, чем void function(float y,float w), и, следовательно, нет никакой двусмысленности,

Вызовы function(1.2,2) и function(1,2.2) оба имеют один аргумент, который является int и является точным совпадением с одним из аргументов void function(int y,int w), поэтому требуется только одно преобразование типа, double до int.void function(float y,float w), с другой стороны, требует двух преобразований int в float и double в float, и именно поэтому используется перегрузка int.

...