复制构造函数定义如下:
A non-template constructor for class
X
is a copy constructor if its first parameter is of typeX&
,const X&
,volatile X&
orconst volatile X&,
and either there are no other parameters or else all other parameters have default arguments (8.3.6).
请注意,定义与转换
无关,但以下程序运行良好:
#include <iostream>
struct B{ };
struct A : B
{
A(){ }
A(const B&){ }
};
B b;
A a = b;
int main(){ }
它产生输出
B()
B()
A(const B&)
我不清楚,我预计程序不会打印 A(const B&)
,因为根据定义 A(const B&)
不是拷贝构造函数,因此一个隐式定义为 A::A(const A&)
具有默认初始化,不会产生任何副作用。
你不能澄清一下这个原因有什么问题吗?
最佳答案
这称为转换构造函数(§12.3.1)。 b
被复制初始化为 a
并且选择 A::A(const B&)
来执行转换。转换的结果用于直接初始化a
。
关于c++ - 复制带有参数的构造函数作为对派生类的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27086214/