警告 C26434

函数“derived::function”隐藏非虚函数“base::function”(c.128)。

C++ Core Guidelines

C.128: 虚函数应从 virtual、override 或 final 中明确指定一个

备注

在基类中引入与非虚函数同名的函数时,可能会出现意外行为。 这就像引入一个与外部范围的名称冲突的变量名称。 例如,你可能打算重写基类函数。 如果函数的签名不匹配,则预期的重写可能会改为变成重载。 通常,名称隐藏是危险的且容易出错。

在核心准则中检查:

  • 仅检查当前类中的非重写函数。
  • 仅考虑基类的非虚拟函数。
  • 不执行签名匹配。 如果匹配的名称不符合资格,则会发出警告。

示例

此示例演示派生类如何隐藏非虚拟函数,以及虚拟函数如何允许重载和重写:

// C26434.cpp
struct Base
{
    virtual ~Base() = default;
    virtual void is_virtual() noexcept {}
    void not_virtual() noexcept {}
};

struct Derived : Base
{
    void is_virtual() noexcept override {}      // Okay, override existing function
    virtual void is_virtual(int i) noexcept {}  // Add a virtual overload for function
    void not_virtual() noexcept {}              // C26434, hides a non-virtual function
    virtual void not_virtual(int i) noexcept {} // C26434, and parameters ignored
};