c++ - 如何强制执行 'override' 关键字?

标签 c++ visual-c++ c++11 visual-studio-2012 overriding

有没有办法强制在 Visual C++ 2012 中使用 C++11 override 关键字?

(即,如果我忘记说 override,那么我想得到一个警告/错误。)

最佳答案

C++11 几乎拥有你想要的。

最初,override 关键字是一个更大的提案 (N2928) 的一部分,其中还包括强制使用它的能力:

class A
{
  virtual void f();
};

class B [[base_check]] : public A
{
    void f();  // error!
};

class C [[base_check]] : public A
{
  void f [[override]] ();  // OK
};

base_check 属性会导致在不使用 override 关键字的情况下覆盖虚函数。

还有一个 hiding 属性表示函数隐藏基类中的函数。如果使用了 base_check 并且一个函数在没有使用 hiding 的情况下从基类中隐藏了一个函数,这是一个错误。

但是大部分提案都被放弃了,只保留了 finaloverride 功能,作为“具有特殊含义的标识符”而不是属性。

关于c++ - 如何强制执行 'override' 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13223277/

相关文章:

c++ - 对象具有阻止匹配的类型限定符(未找到函数重载)

c++ - std::chrono 纳秒计时器适用于 MSVC,但不适用于 GCC

c++ - 哪个头文件包含 DirectX 12 中的 ThrowIfFailed()

c++ - 在启用基于它的构造函数时是否总是需要复制类模板参数?

c++ - 程序入口点 sqlite3_db_filname 无法位于 dll 中

c++ - 字符计数问题

c++ - 将整个文件读入字符串流

c++ - 可变参数模板和宏

只能隐式构造的C++11类?

具有线程安全队列的 C++11 事件循环