如何在C ++中进行隐式转换?

时间:2014-11-07 13:36:18

标签: c++ pass-by-reference implicit-conversion

我是C ++的新手。当我阅读时,我遇到了这个片段。

#include "iostream"
using namespace std;
void swap(int& num1,int& num2)
{
    cout<<&num1<<"\n";
    int temp=num1;
    num1=num2;
    num2=temp;
}

int main()
{ 
    int num1=1,num2=4;
    swap(num1, num2);
    cout<<num1<<"\n"<<num2<<"\n";
    return 0;
}

我怀疑的是,我们只传递了价值观。地址如何通过?请清楚我这个基本的疑问。

3 个答案:

答案 0 :(得分:4)

没有发生隐式转换。您只是通过引用而不是按值传递int

浏览this tutorial。它相对较短,并且可以了解这个想法。

答案 1 :(得分:1)

您基本上是通过引用传递,而引用只是该int的别名(您可以说为该内存分配了另一个名称)。因此,使用该别名执行的任何操作都会反映到它所属的内存中(在本例中为原始int)

答案 2 :(得分:1)

RE

  

地址如何通过?

它不是必然的。

例如,很可能您的编译器会在机器代码中内联函数调用,并将每个引用视为别名,无论其引用的是什么。

但是在许多情况下,这样的优化是不可能的,并且 ad hoc 方案(例如编号可能的绑定等)并不真实,所以一般实现引用,在机器代码级别,是一个内存地址。

相关问题