【发布时间】:2011-12-08 19:57:59
【问题描述】:
考虑这段代码:
class complex{
private:
double re, im;
public:
complex(double _re, double _im):re(_re),im(_im){}
complex(complex c):re(c.re),im(c.im){}
};
我已经知道复制构造函数complex(complex c)会导致无限递归。
但是,它应该只选择 const 引用复制构造函数 complex(const complex &c) 作为复制函数,因为如果没有明确指定,这是默认行为。排除其他所有内容,例如 complex(complex c)。
这里为什么要应用传值的函数呢?或者两者都是拷贝构造函数,只是传值不能修改,用于传递给其他函数而不是其构造函数?
我认为在 Java 中是允许这样做的,因为它只会将对象复制到构造函数中。
【问题讨论】:
-
您可能想添加我在上一个问题中给出的示例:
complex(complex c)和complex(const complex &c) -
"这里为什么应用传值函数?"这个问题有什么遗漏吗?
-
@pmr 指的是我之前不久关闭的问题,因为有很多重复:stackoverflow.com/questions/8436467/…
-
@pmr 我认为 OP 正在询问重载是否有效:
complex(complex c)和complex(const complex &c)如果有效,会发生什么。
标签: c++ copy-constructor