首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么const/non函数重载的继承是不明确的?

为什么const/non函数重载的继承是不明确的?
EN

Stack Overflow用户
提问于 2019-01-18 17:06:13
回答 2查看 845关注 0票数 20

我试图创建两个类,第一个类具有函数的非const实现,第二个类具有const实现。下面是一个小例子:

代码语言:javascript
复制
class Base {
protected:
  int some;
};

class A : public virtual Base {
  const int& get() const {
    return some;
  }
};

class B : public virtual Base {
  int& get() {
    return some;
  }
};

class C : public A, B {};

C test;
test.get(); // ambiguous 

get函数的调用是不明确的。无论const版本需要匹配更多的需求。(在const C上调用C也是不明确的,但是有一个可能调用的函数。)这种行为在标准中有何原因?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-18 17:09:54

当编译器试图在重载解析之前找出名称get引用的实体时,就会出现歧义。它可以是A类的函数名,也可以是B类的函数名,为了构建重载编译器的列表,编译器只需要选择一个要从中提取函数的类。为了修复它,您可以将两个基类的名称引入派生类(并使它们公开):

代码语言:javascript
复制
class C : public A, public B { public: using A::get; public: using B::get; };
票数 19
EN

Stack Overflow用户

发布于 2019-01-18 17:13:52

问题是,实际上没有一个统一的重载集,其中可变的变体无疑是最好的,但是AB中有两个不同的重载集,编译器不会自动合并它们。

代码语言:javascript
复制
using A::get;
using B::get;

C中合并重载集,从而解决歧义.

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54258524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档