警告 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
};