构造函数使用声明提名

时间:2014-06-11 14:26:53

标签: c++ class constructor using language-lawyer

我正在尝试声明一个成员名称,它是基类的构造函数,如下所示:

#include <iostream>

class A{ };

class B: public A
{
    using A::A; //error: ‘A::A’ names constructor
};

int main()
{
}

在哪里指定使用声明不能接受构造函数?我正在寻找标准的相应引用。

1 个答案:

答案 0 :(得分:4)

  

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

无处,因为它可以。请参阅 12个特殊会员功能

  

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

     

命名构造函数的using声明(7.3.3)隐式声明了一组   继承构造函数。来自使用声明中命名的类X的候选继承构造函数组由实际构造函数和由默认参数转换产生的名义构造函数组成,如下所示:

     

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

     

- 对于X的每个非模板构造函数,其至少有一个带有默认参数的参数,构造函数的集合,省略任何省略号参数规范,并从参数末尾的默认参数中连续省略参数 - type-list和

     

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

     

- 对于X的每个构造函数模板,其至少有一个带有默认参数的参数,构造函数模板集合,省略任何省略号参数规范,并从参数类型末尾的默认参数中连续省略参数-list。

     

...

以下是一个例子:

struct A
{ 
  explicit A(int) {}    
};

struct B: A
{
    using A::A;
};

int main()
{
    B b{42};
}