为什么c++引用传递不产生副本

如题所述

引用可以理解为与变量同生命周期的指针常量,指针就是地址,传递指针就是传递地址,就像告诉你门牌号一样,不会产生整栋楼的拷贝追问

传递指针不是值传递吗,值传递就会产生副本啊

追答

传递指针不是值传递,是值所在的地址进行床底,类似告诉你门牌号,值传递则是将指针所指向的内存拷贝一份传递。

追问

void swap(int *a,int *b)
{
int *p;*p=*a;*a=*b;*b=*p:
}

指针传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值我这里指的就是指针,一个地址值,从而成为了实参的一个副本
我主要问引用

追答

如果你的函数参数是引用,那么编译器会做一个隐式转换,把实参转换实参类型对应的引用,随后赋予形参。这个相比指针就少了&运算符。
void swap(int &a,int &b)
{
int p;p=a;a=b;b=p:
}

// 调用例子
int m = 10, n =100;
swap(m, n);

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-16
传递引用类似于传递指针 唯一的区别是一个加星号一个不用加~~
第2个回答  2012-09-17
引用就是起的一个别名而已

为什么c++引用传递不产生副本
引用可以理解为与变量同生命周期的指针常量,指针就是地址,传递指针就是传递地址,就像告诉你门牌号一样,不会产生整栋楼的拷贝

C++中的引用由什么好处。、
副本就是当你使用按值传递时,编译器会自动把要传递的值存进栈,当函数结束后,栈被释放,栈里存的数据就是副本,使用引用就不会产生副本也避免了指针的危险。

C++ 引用作为函数参数能提高程序运行效率吗
如果是指针方式传参数的话,在函数那里会为指针再创建一个副本。如果引用方式传的话,就不会创建副本。性能的差别就在这里吧。可能是因为你的形参是内置的数据类型对象或者比较简单的类对象。对于大部分类类型或者大型数组,这个差别会比较大的。本段取自C++ PRIMER ...

C++ 中元素和引用的区别是什么
\/\/引用传递的用意主要就是减少副本的产生,因为传递一个类或者一个结构体复制需要花费时间 cout<<n<<endl;f2(n);\/\/调用f2,传给f2的参数是引用,是n的本身,f2对参数的改变会影响这个n cout<<n<<endl;return 0;} 同理 Complex operator+(Complex &c1, Complex &c2)\/\/不调用赋值操作符(函数...

引用类型的内容比较使用什么?
由类型的实际值引用(类似于指针)表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(或“指向”)原始值。不创建任何副本。引用类型包括类、接口、委托和装箱值类型。有了变量名,为什么还需要一个别名呢?C++之所以增加“引用”,主要是把它作为函数参数,以扩充函数传递数据的功能。我们...

C++返回临时变量的问题深圳
那么可以return a,不会有副本产生。注意必须是a为全局的情况下,否则会引起警告,禁止传递局部变量的引用,因为a的声明周期会马上结束掉。到此,已经解答了楼主的问题。我想多说一句:为什么不写成int& fun();这种形式呢?答案是没必须。int是内部自定义类型。对于自定义变量而言,引用与否引起的副本拷贝...

按引用传递传的是什么
通常使用的“按指传递”,函数内的操作的实际上是输入参数的一个副本(即函数创建了一个临时变量,其值与输入参数完全相同),对该副本的操作不会影响输入参数的值。而“按引用传递”,可以理解为副本是一个引用变量,该副本与输入参数共享存储区。因此函数内对副本的修改相当于对输入参数进行修改。当...

C++ 中什么是引用 申请和使用引用要注意哪些问题
调用该函数的c++方法为:swapint(x,y); c++自动把x,y的地址作为参数传递给swapint函数。2、给函数传递大型对象 当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的 副本,也就是参数传递时,对象无须复制。下面的例子定义了一个有限整数集合的类:const maxCard...

...的这两种不同写法中&S与*S,S.base与S->base有什么区别?
这个形参&S中&是C++中引用,这里的作用是传递的参数就是已有结构体的本身,不再复制副本,具体网上有关C++引用的内容很多,自行查看吧;S.base,是通过结构体类型变量引用成员。S->base,是通过结构体类型指针引用成员,也就是说,S应该是一个指针变量。

数据结构中何时用引用参数,何时用赋值参数
在形参表中以符号“&”开始的参数即为引用参数。如果一个形参是引用参数,调用部位将把实参的地址传递给子程序。子程序可以改变传递给引用参数的任何实参,因为子程序操作的是真正的变量,而不是它的副本。一般情况下,对于任意一个类A,如果程序员不显示的声明和定义上述函数,C++编译器将会自动的为A...

相似回答