使用新的函数声明语法进行重写
override with new function declaration syntax
鉴于 C++11 中引入的新函数声明语法,很容易从以下位置转换成员函数:
std::unique_ptr<...> operator()() const;
自
auto operator()() const -> std::unique_ptr<...>;
我相信要添加覆盖到第一个,您需要写:
std::uniqe_ptr<...> operator()() const override;
当我写:
auto operator()() const -> std::unique_ptr<...> override;
Clang给出了错误:
error: type-id cannot have a name
auto operator()() const -> std::unique_ptr<...> override
^~~~~~~~
当我写:
auto operator()() const override -> std::unique_ptr<...>;
Clang给出了错误:
error: 'auto' return without trailing return type
auto operator()() const override -> std::unique_ptr<...>;
^
你会在新语法中在哪里放置覆盖?
根据语法,override
关键字应该在尾随返回类型之后,即使用
auto operator()() -> std::unique_ptr<int> override;
使用最近的 gcc 快照尝试它有效,而即使是最新版本的 clang 也会失败。我会说这是 clang 实现中的一个错误。
该标准的相关引用是 8.4.1 [dcl.fct.def.general] 第 1 段:
函数定义具有以下形式
function-definition:
attribute-specifier-seqopt decl-specifier-seqopt declarator virt-specifier-seqopt function-body
function-body:
ctor-initializeropt compound-statement
function-try-block
= default ;
= delete ;
virt-specifier-seqopt
由final
和/或override
组成。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 在 C++ 中用派生类型重写成员函数
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 方法重写线程C++中的概念
- 为重写std::exception的库生成swig接口时出错
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么旧的空抛规范被用新的语法"noexcept"重写?
- 使用新的函数声明语法进行重写
- 重写虚函数时语法怪异
- 使用OO语法将Matlab转换为c / c ++,而无需重写其功能