由using declaration指定的构造函数

Constructor nominated by using declaration

本文关键字:构造函数 using declaration      更新时间:2023-10-16

我想声明一个成员名,它是基类的构造函数,如下所示:

#include <iostream>
class A{ };
class B: public A
{
    using A::A; //error: ‘A::A’ names constructor
};
int main()
{
}

在哪里指定了不能使用声明接受构造函数?

在哪里指定了不能使用声明接受构造函数?

无处可去,因为它可以。参见12特殊成员函数:

12.9继承构造函数[class。inhctor]

为构造函数命名的using声明(7.3.3)隐式声明了一组继承的构造函数。从using声明中指定的类X继承的候选构造函数集由实际构造函数和由默认参数转换产生的概念构造函数组成,如下所示:

- X的所有非模板构造函数,和

-对于至少有一个带默认实参形参的X的每个非模板构造函数,省略任何省略形参说明并从形参类型列表末尾连续省略带默认实参形参的构造函数集,以及

- X的所有构造函数模板,和

-对于X的每个至少有一个带默认实参形参的构造函数模板,省略任何省略形参说明并从形参类型列表末尾连续省略带默认实参形参的构造函数模板集。

下面是一个例子:

struct A
{ 
  explicit A(int) {}    
};
struct B: A
{
    using A::A;
};
int main()
{
    B b{42};
}