繁体   English   中英

隐式虚拟constexpr功能

[英]Implicitly virtual constexpr function

虚函数不能是constexpr但是当一个函数通过继承隐式虚拟时,我试过的编译器不会抱怨它。

这是一个示例代码:

class A
{
    virtual void doSomething() {}
};

class B : public A
{
    constexpr void doSomething() override {} // implicitly virtual constexpr
                                             // but no compilation error
};

class C : public A
{
    virtual constexpr void doSomething() override {} // explicitly virtual constexpr
                                                     // compilation error
};

我用gcc 7.2.0clang 5.0.0试了一下。

这些编译器是否在这方面不符合标准,或者是否允许隐式虚拟constexpr功能?

编译器有一个bug。 请注意,已经在clang 3.5中修复了这个问题,不确定为什么你没有收到错误,因为我这样做了。

该标准在[dcl.constexpr] p3中非常清楚:

constexpr函数的定义应满足以下要求:

  • 它不应该是虚拟的;
  • [...]

doSomething是否隐式virtual无关紧要。 在这两种情况下,它都被认为是virtual ,因此它违反了上述要点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM