使用声明不提供基础的构造函数

时间:2016-07-31 14:56:16

标签: c++ inheritance constructor copy-constructor

以下代码编译:

struct A {
    A(int xx) : x(xx) {}
    int x;
};

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

int main() {
    B b(5); // OK. The constructor taking an int is available
    return 0;
}

以下代码不会:

struct A {
    A() {}
    A(const A &) {}
};

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

int main() {
    A a;
    B b; // No complaint about this line
    B c(a); // No constructor taking const A & is available.
    return 0;
}

为什么A的构造函数在第一种情况下可用,而在第二种情况下不可用?

编辑(在标记为重复后):

怀疑这个问题是重复的问题的答案(评论建议使用粗体):

  

对于继承的构造函数[...]的候选集中的每个非模板构造函数,构造函数是使用相同的构造函数特性隐式声明的,除非在完整的类中有一个用户声明的构造函数具有相同的签名-declaration出现或构造函数将是该类的默认,复制或移动构造函数

这似乎没有回答我的问题,因为采用const A &参数的构造函数不是B的复制构造函数。

0 个答案:

没有答案