使用auto从基类与派生类的返回类型冲突

我有以下代码:

struct A{};

struct Base {
    virtual A& internal() = 0;
};

struct Derives : public Base {    
    auto& internal() override { // <-- conflicting return type
        return internal_;
    }

private:
    A internal_;
};

int main() {
    Derives d;
    auto& internal = d.internal();
}

这无法使用冲突的返回类型进行编译(在coliru上进行了测试-使用gcc)-我的问题是,为什么编译器不能推论两者internal_(以及返回类型)都是Aauto例如在与编译虚拟替代项不同的阶段,是否推导了该类型当然,如果替换auto为正确的类型,则可以编译-但这不是重点。

(这是clang错误,gcc有点类似)

main.cpp:8:11:错误:虚拟函数“内部”的返回类型与其所覆盖的函数的返回类型不协变(“自动&”不是从“ A&”派生的)

auto& internal() override { // <-- conflicting return type
~~~~~ ^

main.cpp:4:16:注意:此处覆盖了虚函数

virtual A& internal() = 0;
        ~~ ^

产生1个错误。

巴里

来自[dcl.spec.auto]

使用占位符类型声明为返回类型的函数不能是虚函数([class.virtual])。

internal()是一个虚函数,因此您不能使用auto

原来的建议表示此推理:

可能允许对虚函数进行返回类型推导,但是这会使覆盖检查和vtable布局复杂化,因此似乎最好禁止这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用派生类的auto_ptr返回基类的auto_ptr?

来自分类Dev

如何使用派生类的auto_ptr返回基类的auto_ptr?

来自分类Dev

返回派生类类型的基类中的方法?

来自分类Dev

从基类和派生类之外的方法返回任何派生类类型

来自分类Dev

在基类和派生类上进行操作时,如何返回派生类型?

来自分类Dev

返回派生类型的基类中的C#方法

来自分类Dev

在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

来自分类Dev

从工厂类返回派生类型

来自分类Dev

如何设计具有不同返回类型的基类和派生类?

来自分类Dev

对派生类中的成员变量使用派生类型

来自分类Dev

在每个循环中使用基类类型或派生类类型

来自分类Dev

从派生类访问基类中的类型别名

来自分类Dev

从基类中识别派生类的类型

来自分类Dev

从类型为基类的向量访问派生类方法

来自分类Dev

如何从基类获取派生类类型

来自分类Dev

从基类成员函数返回派生类的实例

来自分类Dev

从派生类到基类的返回值

来自分类Dev

C#基类方法返回派生类

来自分类Dev

返回派生类实例而不是基类实例

来自分类Dev

使用派生类类型作为基类的通用操作的参数

来自分类Dev

python 2.7:类型错误:元类冲突:派生类的元类必须是其所有基类元类的(非严格)子类

来自分类Dev

如何仅使用基类中的代码返回派生类?

来自分类Dev

如何使用协变返回从基类检索派生类?

来自分类Dev

如何使用派生类序列化基类

来自分类Dev

继承:使用基类或派生类进行处理

来自分类Dev

在基类中使用派生类中的常量

来自分类Dev

Java继承基类使用派生类方法

来自分类Dev

对基类和派生类使用静态容器

来自分类Dev

使用派生类创建基类对象

Related 相关文章

  1. 1

    如何使用派生类的auto_ptr返回基类的auto_ptr?

  2. 2

    如何使用派生类的auto_ptr返回基类的auto_ptr?

  3. 3

    返回派生类类型的基类中的方法?

  4. 4

    从基类和派生类之外的方法返回任何派生类类型

  5. 5

    在基类和派生类上进行操作时,如何返回派生类型?

  6. 6

    返回派生类型的基类中的C#方法

  7. 7

    在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

  8. 8

    从工厂类返回派生类型

  9. 9

    如何设计具有不同返回类型的基类和派生类?

  10. 10

    对派生类中的成员变量使用派生类型

  11. 11

    在每个循环中使用基类类型或派生类类型

  12. 12

    从派生类访问基类中的类型别名

  13. 13

    从基类中识别派生类的类型

  14. 14

    从类型为基类的向量访问派生类方法

  15. 15

    如何从基类获取派生类类型

  16. 16

    从基类成员函数返回派生类的实例

  17. 17

    从派生类到基类的返回值

  18. 18

    C#基类方法返回派生类

  19. 19

    返回派生类实例而不是基类实例

  20. 20

    使用派生类类型作为基类的通用操作的参数

  21. 21

    python 2.7:类型错误:元类冲突:派生类的元类必须是其所有基类元类的(非严格)子类

  22. 22

    如何仅使用基类中的代码返回派生类?

  23. 23

    如何使用协变返回从基类检索派生类?

  24. 24

    如何使用派生类序列化基类

  25. 25

    继承:使用基类或派生类进行处理

  26. 26

    在基类中使用派生类中的常量

  27. 27

    Java继承基类使用派生类方法

  28. 28

    对基类和派生类使用静态容器

  29. 29

    使用派生类创建基类对象

热门标签

归档