使用参数复制构造函数作为对派生类的引用
Copy constructor with a parameter as a reference to a derived class
复制构造函数有以下定义:
类
X
的非模板构造函数是复制构造函数,如果其 第一个参数的类型为X&
、const X&
、volatile X&
或const volatile X&,
要么没有其他参数,要么全部 其他参数具有默认参数 (8.3.6)。
请注意,定义与convertions
无关,但以下程序工作正常:
#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
。
A a = b;
这将调用类 A 的转换构造函数。
A(const B&){ } << This is conversion constructor for class A which defines conversion from B to A
就像我们声明一样
A(int i) {} << Convert int to class A object.
即使删除类 A 和 B 之间的关系,也会导致该构造函数调用。
相关文章:
- 如何使用基类指针引用派生类成员
- 如何引用基类的派生类?
- 通过基类接受方法转发派生 UniquePtr 的右值会移动引用而不是复制
- 如何复制只引用基类的派生类
- 从 Base 引用对象调用派生类的成员
- C++ 为什么要将对基类的引用传递给派生类的构造函数
- 通过基类引用派生类后打印的错误值
- 如何在 c++ 中通过基类引用访问派生类的对象?
- 从基类的共享指针向下转换到派生类的引用
- 基类需要引用尚未构造的派生类成员
- 通过基类指针获取派生类对象的引用
- 为什么不能在实例化对基类的引用的同时实例化指向派生类的指针?
- 如何在模板成员中引用派生类?
- C++通过 const 引用传递时不调用派生类函数
- C++ 类型转换基础 PTR 到派生 PTR 保存在引用类中
- 是否可以在引用另一个派生类的派生类中声明复制构造函数?
- 如何从派生类访问引用成员变量?
- 无法通过引用 std::exception 来捕获从 std::exception 派生的类
- 从派生引用到基引用的static_cast编译器错误
- C++是否保证基引用和派生引用的地址相等