我知道虚函数在调用方法时有解引用的开销。但我认为随着现代架构速度的提高,这几乎可以忽略不计。
- 是否有任何特定原因导致C++中的所有函数不像Java一样都是虚函数?
- 根据我的了解,在基类中定义一个函数为虚函数就足够/必要了。现在当我编写父类时,可能不知道哪些方法会被覆盖。那么这是否意味着在编写子类时,某人必须编辑父类。这听起来很不方便,有时也不可能吗?
更新:
从Jon Skeet的下面的回答概括:
这是一个权衡取舍,即明确地让某人意识到他们正在继承功能[这本身具有潜在风险[(请检查Jon的回答)] [和潜在的小性能收益]与更少的灵活性、更多的代码更改和更 steeeper 学习曲线的交换。
其他答案的原因:
虚函数不能内联,因为内联必须在运行时发生。当您期望函数受益于内联时,这会对性能产生影响。
可能还存在其他原因,我很想知道并总结它们。