c++函数参数为对象和为对象的引用类型时,作用一样吗
发布网友
发布时间:2022-04-24 08:10
我来回答
共3个回答
热心网友
时间:2022-04-24 09:40
不一样,一个是复制传递,一个是引用传递。
复制传递时将对象复制一遍,在函数中的对象和原对象值相同,但是地址不同,函数中若修改对象的值,原对象不会受到影响,当函数执行完时,复制的对象会被销毁。
而引用传递不会复制,只是将原对象的地址传过去,类似指针。此时函数中的对象和原对象是一个东西,相同的地址,可能名字不一样而已。
一般传递对象时使用的是引用传递,效率更高。对象一般比较大,复制的话销毁的时间较多。如要防止函数修改参数,可以使用const
引用。
附个演示代码,你就知道了。
#include
<iostream>
#include
<conio.h>
using
namespace
std;
class
A
{
public:
void
set(int
data)
{
this->data
=
data;
}
void
show()
{
cout
<<
data
<<
endl;
}
private:
int
data;
};
void
change(A
a,A
&b)
{
a.set(3);
b.set(3);
}
int
main()
{
A
a,b;
a.set(1);
b.set(1);
cout
<<
"befor
change"
<<
endl;
a.show();
b.show();
change(a,b);
cout
<<
"after
change"
<<
endl;
a.show();
b.show();
getch();
return
0;
}
热心网友
时间:2022-04-24 10:58
不同。 无论c还是c++,null都是一个implementation-defined的宏,是实现相关的。null并不就是0,也不就是(void*)0。只不过,大多数编译器把null定义为0或者(void*)0而已,但并非所有编译器都这样做的。
热心网友
时间:2022-04-24 12:32
这么讲吧
void
fun(int
x,int
y)
{
int
tempt;
tempt=x;
x=y;
y=tempt;
}
与
void
fun(int
&x,int
&y)
{
int
tempt;
tempt=x;
x=y;
y=tempt;
}
不同,上一个没有交换成功,下一个交换成功了的,引用就是用别名,还是对那个数操作,不知听懂了吗。