以下代码编译:
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
的复制构造函数。