一个C++关于拷贝构造函数得题目

来源:百度知道 编辑:UC知道 时间:2024/05/13 17:28:12
#include<iostream>
#include<string>

using namespace std;
class A{public:
A() { cout<<"调用构造函数"<<endl; }
A(const A& a) {cout<<"调用拷贝构造函数"<<endl; }
};

A fun1(A a);
A &fun2(A &a);
void main()
{
A a, b;
cout<<"传值调用"<<endl;
b=fun1(a);
cout<<"引用调用"<<endl;
b=fun2(a);
}
A fun1(A a) { cout<<"返回对象"<<endl; return a;}
A &fun2(A &a) { cout<<"返回引用"<<endl; return a;}

它执行结果为

调用构造函数
调用构造函数
传值调用
调用拷贝构造函数
返回对象
调用拷贝构造函数
引用调用
返回引用

我想问下 结果为什么会是这样得 难道fun1(a)实参赋给形参也需要拷贝构造函数吗 还有将b=fun2(a) 将引用赋给一个B对象 为什么没有调用拷贝构造函数啊 哪个大牛给解释下子哈 万分感谢

在调用 fun1(a) 的时候, 传递的参数是 a 的一个复本, 而不是 a 的引用 (或者指针), 所以, 这就相当于在传递参数时, 先用 a 创建一个 A 的新实例 (就叫 b 吧), 这个时候就会调用拷贝构造函数! 关键是 "创建了一个新实例"!
fun2 传递的是对象的引用, 引用指向的已经构造好的对象, 所以没有调用任何构造函数!

希望说明白了, 呵呵!

你传递给函数的参数,是做了一个拷贝的。