我知道复制构造函数是一个构造函数,它将一个新对象作为现有对象的副本,但是,是否每个构造函数都将另一个对象作为一个称为复制构造函数的参数?
示例:如果我必须将课程X
和Y
X(const Y& y)
作为复制构造函数?
如果没有这样的构造函数的名称?
答案 0 :(得分:5)
没有。复制构造函数是一个与ctor相同的类的单个实例。因此
X(const X& x)
是一个复制构造函数,如下所示:
X(const X& x, int z = 0)
因为只用单个x
对象就可以调用它。
采用其他对象的构造函数通常称为“转换构造函数”,但该名称与“复制构造函数”一样固定。
答案 1 :(得分:2)
没有这个
X(const Y& y);
不是复制构造函数。复制构造函数应定义具有相同类型(带/不带限定符)的第一个参数作为创建的对象
根据C ++标准
2类X的非模板构造函数是一个复制构造函数(如果是) 第一个参数是X&类型,const X&,volatile X&或const volatile X&,并且没有其他参数或其他所有参数 参数有默认参数
构造
X(const Y& y);
是一个转换构造函数,它将类型为Y的对象转换为类型为X的对象。
答案 2 :(得分:1)
如果X
和Y
是不同的类型,那么
X(const Y& y)
将是转换构造函数。
请注意, copy 构造函数被视为转换构造函数的特例(对于X==Y
)。