编译器警告(等级 4)C4373
“function”:虚函数替代“base_function”,当参数只在 const/volatile 限定符上有差异时,早期版本的编译器不会替代
注解
你的应用程序在一个派生类中包含一个方法,该方法替代基类中的虚拟方法。 替代方法中的参数与虚拟方法的参数的不同之处在于 const
或 volatile
限定符。
在 Visual Studio 2008 之前,编译器会将函数绑定到基类中的方法。 后续版本的编译器忽略 const
或 volatile
限定符,将函数绑定到派生类中的方法,然后发出警告 C4373。 后一种行为符合 C++ 标准。
示例
下面的代码示例将生成警告 C4373。 若要解决此问题,请使替代项使用与基成员函数相同的 CV 限定符。 如果你没有打算创建替代项,请重命名派生类中的函数。
// c4373.cpp
// compile with: /c /W3
#include <stdio.h>
struct Base
{
virtual void f(int i) {
printf("base\n");
}
};
struct Derived : Base
{
void f(const int i) { // C4373
printf("derived\n");
}
};
int main()
{
Derived d;
Base* p = &d;
p->f(1);
}
derived
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈