c++ - C4250 VC++ 警告是什么意思?

标签 c++ visual-studio visual-c++

C4250 是什么意思? Visual C+ 警告实际上意味着什么?我已经阅读了链接的 MSDN 页面,但我仍然不明白问题所在。

编译器会警告我什么,如果我忽略警告会出现什么问题?

最佳答案

警告指出,如果任何 weak 类操作依赖于在 dominant 中实现的 vbc 虚拟操作,那么这些操作可能由于它们捆绑在菱形继承层次结构中,因此可以更改行为。

struct base {
   virtual int number() { return 0; } 
};
struct weak : public virtual base {
   void print() { // seems to only depend on base, but depends on dominant
      std::cout << number() << std::endl;
   }
};
struct dominant : public virtual base {
   int number() { return 5; }
};
struct derived : public weak, public dominant {}

int main() {
   weak w; w.print();    // 0
   derived d; d.print(); // 5
}

这是标准规定的行为,但有时程序员可能会感到惊讶,weak::print 操作行为的改变并不是因为在层次结构,但在从 derived 调用时,由继承层次结构中的同级类调用。请注意,从 derived 的角度来看,它非常有意义,它调用的操作依赖于在 dominant 中实现的虚拟方法。

关于c++ - C4250 VC++ 警告是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2190416/

相关文章:

C++ 链接器 - 缺少重复符号

c++ - shared_ptr 和 shared_array 为引用计数器分配内存

c++ - 处理 vector 迭代中的访问冲突异常

c - 释放二维数组 - 检测到堆损坏

c++ - 如何在 c++ 中的 vector<Object*> 中搜索特定变量?

c++ - Visual C++ 似乎对类的 POD 成员进行了零初始化,但它不应该这样做

c++ - 如何在 mysql c++ 连接器中设置超时

visual-studio - TFS - 如何克隆项目以便回滚原始项目?

c# - 如何在 Visual Studio 2008/2010 中捕获并保存解决方案项目的编译时和运行时错误

c++ - MSBuild BeforeBuild 步骤