值传递OR引用传递
摘要
本文通过实验验证了C++中值传递和引用传递的区别。值传递会调用拷贝构造函数,因此需要类支持拷贝操作,而引用传递则不会调用拷贝函数,适用于禁止拷贝的类。文章通过代码示例展示了不同情况下的编译结果和运行行为,得出结论:值传递需要拷贝函数且会调用拷贝构造函数,而引用传递更高效且推荐使用,特别是在处理复杂对象时。
目的
验证值传递和引用传递的区别。
- 值传递会拷贝,引用传递不会拷贝;
- 如果类是禁止拷贝的,就不能使用值传递;
- C++推荐使用引用传递;
实验
禁止拷贝使用引用传递
| |
以上,类A的拷贝函数是private的,所以认为是禁止拷贝,此时tA函数参数是引用传递的,编译通过。
禁止拷贝使用值传递
修改代码:
| |
编译是不通过的,以下报错,这个可以说明值传递是需要拷贝函数的。
| |
允许拷贝使用引用传递
修改代码:
| |
编译通过,运行程序没有输出,则说明引用传递没有调用拷贝函数。
允许拷贝使用值传递
修改代码:
| |
编译通过,输出
| |
这样说明值传递是会做拷贝的,看这个例子,值传递是调用的拷贝构造函数
结论
- 值传递是需要拷贝函数的
- 值传递是调用的拷贝构造函数
- 引用传递没有调用拷贝函数