c++ - 复制带有参数的构造函数作为对派生类的引用

标签 c++ constructor

复制构造函数定义如下:

A non-template constructor for class X is a copy constructor if its first parameter is of type X&, const X&, volatile X& or const 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(){ }

DEMO

它产生输出

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/

相关文章:

c++ - clang-format 将模板转换为位移位

javascript - new vs object create给出不同的结果OO javascript

java - 在运行时检查类是否具有使用泛型的特定构造函数

Java 多重构造函数设置问题

c++ - C代码意外成功

c++ - 实现后期多态性的最佳方式

c++ - 指示 Qi 转换属性失败的正确方法是什么?

c++ - 如何从 C++ 数组中删除重复项?

c# - 一个属性返回另一个类的成员而不是在构造函数中设置属性有什么好处吗?

c# - 在构造函数中初始化列表