c++ - 变量会自动转换为函数所需的类型作为适当的参数吗?

标签 c++ type-conversion implicit-conversion

变量会自动转换为函数所需的类型作为适当的参数吗?

#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;
}

最佳答案

类型转换规则通常解释起来相当复杂。

但对于您的示例,两个参数都是 int& ,意思是“对 int 的引用”。由于您传递了两个有效的 int变量,它正是预期的类型,变量的引用作为参数传递。

你会尝试使用不同的类型吗,它会失败,例如:

  • long a=10,b=20;将无法编译,因为无法获得 int reference 引用非int 原始变量。
  • swap(10,20);会失败,因为参数是文字 int值而不是变量。无法获得对此类值的引用。
  • const int a=10;也会失败。这次是因为变量的const是一个额外的约束,参数传递不允许丢失。

不相关:您应该包括 <iostream>输出应该是这样的:

std::cout << "A is "<< a << " and B is " << b << std::endl;;

关于c++ - 变量会自动转换为函数所需的类型作为适当的参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58721739/

相关文章:

c++ - 如何将后台运行的子进程调到前台

c++ - 为什么我应该使用引用变量?

c++ - c++ 类实例成员是如何在机器级别传递的?

c++ - For循环不执行

C++ 模板继承

string - 如何将 String^ 转换为 char 数组

C++运算符==和隐式转换解析

C++ 隐式转换不起作用

c++ - 引用 void* 的隐式类型转换

c++ - 使用模板进行隐式类型转换