Fed*_*dor 7 c++ language-lawyer overload-resolution
在下面的程序中,从其基类struct B继承已删除的构造函数,并且还定义了附加构造函数。然后创建一个对象:B(int)AB(int&&)BB b(1)
struct A {
A() {}
A(int) = delete;
};
struct B : A {
using A::A;
B(int&&) {}
};
int main() {
B b(1);
}
Run Code Online (Sandbox Code Playgroud)
如果构造函数B(int)和B(int&&)都直接在结果中定义,B则构造函数选择会产生歧义。在这个例子中,GCC 打印了一个
重载“B(int)”的调用不明确`
错误也是如此。
但 Clang 更喜欢在 中声明的构造函数B而不是从 继承的构造函数A。演示: https: //gcc.godbolt.org/z/dnErEenE5
这里是哪个编译器?
GCC在这里是正确的:有一个决胜局,它更喜欢直接而不是继承的构造函数([over.match.best.general]/2.7),但它仅适用于它们具有相同的参数类型(忽略那些正在使用默认参数的参数类型) 。
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |