值传递OR引用传递
摘要: 本文通过实验验证了值传递与引用传递的区别,指出值传递会进行对象拷贝,调用拷贝构造函数,而引用传递不拷贝对象,避免调用拷贝函数。若类禁止拷贝(拷贝构造函数私有),则只能使用引用传递。作者建议在C++中优先采用引用传递以避免不必要的拷贝。 (评价: A)
目的
验证值传递和引用传递的区别。
- 值传递会拷贝,引用传递不会拷贝;
- 如果类是禁止拷贝的,就不能使用值传递;
- C++推荐使用引用传递;
实验
禁止拷贝使用引用传递
|
|
以上,类A的拷贝函数是private的,所以认为是禁止拷贝,此时tA函数参数是引用传递的,编译通过。
禁止拷贝使用值传递
修改代码:
|
|
编译是不通过的,以下报错,这个可以说明值传递是需要拷贝函数的。
|
|
允许拷贝使用引用传递
修改代码:
|
|
编译通过,运行程序没有输出,则说明引用传递没有调用拷贝函数。
允许拷贝使用值传递
修改代码:
|
|
编译通过,输出
|
|
这样说明值传递是会做拷贝的,看这个例子,值传递是调用的拷贝构造函数
结论
- 值传递是需要拷贝函数的
- 值传递是调用的拷贝构造函数
- 引用传递没有调用拷贝函数