c++ - 使用声明冲突的重载
问题描述
#include <iostream>
struct A {
void test() { std::cout << "A\n"; }
};
struct B : A {
void test() { std::cout << "B\n"; }
};
struct C : B {
using A::test;
using B::test;
};
int main() {
C().test(); // Is this ambiguous?
return 0;
}
在本例中,g++ 8.1.0 编译成功,并test()
从B
.
clang++ 3.8.0 报告:error: call to member function 'test' is ambiguous
.
哪个是对的?如果是 g++,选择的规则是B::test
什么A::test
?
解决方案
我相信 Clang 是正确的。根据[namespace.udecl]/13:
由于using-declaration是一个声明,因此对同一声明区域([basic.scope])中同名声明的限制也适用于using-declarations。
由于您不能声明两个相同的成员函数,因此同样适用于using
声明。
推荐阅读
- javascript - CSS/ 减少屏幕/窗口宽度时减少 img 的宽度
- ios - 如何将多个 HTML 文件添加到 WebKit 视图?
- c# - 使用 .NET 客户端库为 VSTS/TFS 检索构建定义的任务列表
- javascript - 通过模型传递自定义按钮功能
- javascript - “any[]”类型的参数不能分配给“A”类型的参数。类型“any[]”中缺少属性“a”
- android - 使用 Android 分页库处理错误
- python - 将 Python 短形式 for 循环转换为长形式
- office365 - 有没有办法使用图形 API / sharepoint API 检测 office online 何时完成保存在 sharepoint 中?
- python - 使用 pandas 将连接的字符串拆分为单独的列
- javascript - 如何使用图像预览多次显示文件输入按钮?