这不是对您的示例的直接回答,而是对您的评论的地址,这显示了错误的观点恕我直言
我只是想知道那个特定的问题,如果有一种更有效的方法可以避免虚拟方法的性能开销,我最感兴趣
这里有一些东西要理解。一切都有权衡。设计模式和 OO 具有我们喜爱的所有已知优点,但也有缺点,例如太多的类、内存开销、由于许多方法调用导致的性能开销等。
另一方面,旧的“程序”方式也有一些优点,即客观性;代码“简单”(无需考虑如何设计系统,只需将所有内容放在 main 中)并且在许多方面具有更少的开销(更少的内存开销,因为需要更少的类和更紧凑的对象 - 不需要虚拟表等等-和更少的方法调用,因此可能有更好的性能,没有动态绑定的性能开销——不管现在的开销是什么......-)。
但这不是特定问题实例的权衡取舍,而是经验表明什么是构建软件的正确方法。模块化代码的重用和有助于单独测试(质量保证)、可读性、可维护性、灵活扩展的代码是已被充分理解的属性,应该是软件开发的主要驱动力。
所以在某些情况下,一个真正优秀的 C/C++ 程序员可以按照你所说的那样做“旧方式”,但是它为这个特定程序带来的性能优势值得没有人能够维护或以后能坚持吗?
再举一个类似的例子:你可以用同样的方式问吗?
为什么在 Web 开发中使用多层架构?只需将所有内容都放入一台服务器,它会快很多,因为查询后端和 UI 数据的所有层或查询远程数据库的网络延迟等不会有延迟。
当然,你有一定道理。但是然后问问你自己,这可以随着负载的增加而扩展吗?答案是不。那么可扩展性对您来说很重要,还是您想保持“将所有东西放在一个服务器中”的想法?如果您的收入来自电子网站,那么您无法为更多客户提供服务这一事实不会仅仅因为您服务前 100 名客户真的很快就让您的客户满意......无论如何这是我的看法