copy-ctor的开参为什么不能是按传值方式来定义呢?
#include <iostream>
using namespace std;
struct A {
A() {i=0; }
A(const A rhs) //我故意不用const A &rhs的。
{
i = rhs.i;
cout << "Copy - Ctor" << endl;
}
int i;
};
int main()
{
A a;
A b(a);
}
我为什么故意用const A :
因为pass-by-value时都调用copy-ctor。像传给函数参数,函数返回值等情况下都是这样。所以我想如何我定义一个copy-ctor也按pass-by-value的话,那不就成了一个递归调用了吗?因为copy-ctor本身的实参到形参的初始化就是调用这个copy-ctor的。
A(const A rhs) { };
相当于
A()
{ const A rhs(传过来的实参); } //我理解成递归了。
但当我把开参声明成by-value时,编译时一大堆错误。
像说i没定义之类的错误也有。为什么会这样呢?
难道copy-ctor就是不能声明形参为const A的吗?只能传引用?或指针?
问题点数:20、回复次数:2Top
1 楼THEBEST(你厉害!)回复于 2004-05-02 19:40:49 得分 0
BTW:系统默认生成的copy-ctor就是pass-by-reference的吧。Top
2 楼freefalcon(心宇—消失中...)回复于 2004-05-02 19:46:27 得分 20
定义一个copy-ctor也按pass-by-value的话,那不就成了一个递归调用了吗?
正是如是原因
只能传引用?或指针?
是的,但通常用引用,指针的话,你还得判断它是否有效Top




