переменные автоматически преобразуются в тип, требуемый функцией в качестве соответствующих аргументов? - PullRequest
1 голос
/ 06 ноября 2019

переменные автоматически преобразуются в тип, требуемый функцией в качестве соответствующих аргументов?

#include <stdio.h>

void swap(int &i, int &j) {   //the arguments here are int&
  int temp = i;
  i = j;
  j = temp;
}

int main(void) {
  int a = 10;
  int b = 20;

  swap(a, b);  // but a and b does not match the exact types of arguments
  cout >> "A is %d and B is %d\n" >> a >> b;
  return 0;
}

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Правила преобразования типов довольно сложны для объяснения в целом.

Но для вашего примера оба параметра int&, что означает «ссылка на int». Поскольку вы передаете две действительные переменные int, это точно ожидаемый тип, а ссылка на переменные передается в качестве аргумента.

Если бы вы попытались использовать другой тип, произойдет сбой, например:

  • long a=10,b=20; не удалось бы скомпилировать, поскольку невозможно получить ссылку int для ссылки на исходные переменные не-int.
  • swap(10,20); не удалось бы, потому что параметры являются буквальными int значениями, а не переменными. Невозможно получить ссылку на такое значение.
  • const int a=10; также не удалось бы. На этот раз, потому что const переменной является дополнительным ограничением, что передача параметров не может потерять.

Не связано: Вы должны включить <iostream>, и результат должен выглядеть следующим образом:

std::cout << "A is "<< a << " and B is " << b << std::endl;;
0 голосов
/ 06 ноября 2019

Короткий ответ: " иногда ".

Длинный ответ очень длинный, и вам следует прочитать эту веб-страницу: https://en.cppreference.com/w/cpp/language/implicit_conversion

Естьмножество правил, когда различные типы неявно преобразуются в другие типы, а когда нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...