c++ - 标准中override和noexcept的顺序

标签 c++ c++11 language-lawyer

override和noexcept的顺序是标准要求的吗?

class Base
{
public:
  virtual void foo() {}
};

class Derived : public Base
{
public:
  // virtual void foo() override {} // Ok
  // virtual void foo() noexcept {} // Ok
  // virtual void foo() noexcept override {} // Ok
  virtual void foo() override noexcept {} // Error
};

int main() {}

我正在使用 gcc 4.7.2。

最佳答案

在 8.3.5 [dcl.fct] 中我们看到:

D1 ( parameter-declaration-clause ) cv-qualifier-seq opt ref-qualifier opt exception-specification opt attribute-specifier-seq opt

...在 9.2 [class.mem] 中我们看到:

declarator virt-specifier-seq opt pure-specifier opt

这说明 overridefinal 必须在 noexcept 之后。

关于c++ - 标准中override和noexcept的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21577466/

相关文章:

c++ - 如何在输出中添加额外的零,同时仍使其与表格对齐?

c++ - std::atomic 内存屏障可以用于在线程之间传输非原子数据吗?

c++ - 在 c++0x 中删除 nullptr 是否仍然安全?

c++ - 获取 QGuiApplication 的小部件列表

c++ - "&"c++ 模板函数定义中的运算符

c++ - boost::variant 对象的 getter

c++ - 将 unique_ptr 的 unordered_map move 到另一个

c++ - 如何从单独的线程控制SFML窗口?

c++ - 如何使用 CMake 生成链接到静态库的 DLL

c++ - 我应该修复这个晦涩但优雅的 C++ 代码片段吗?