现代C++的功能在多大程度上如下:
用于游戏工作室?我很想知道库的名称和它们使用的C++特性.例如,Orge3D使用所有现代C++功能,包括异常和智能指针.换句话说,如果我要使用现代C++寻找游戏库的示例,我会去Orge3D.但我不知道这些功能是否会阻止游戏工作室使用Orge3D.
此外,我不知道是否还有其他例子.例如,我在一段时间之前使用过Box2D,但它只使用了placement new和class关键字作为C++特性.由于所有成员都是公开的,因此即使封装也在这些类中被打破.
理想情况下,如果C++功能最适合所有情况,那么最常使用这些功能.但似乎没有.阻抗是什么?显而易见的是必须阅读一摞书,但这只是半个原因.这个问题是对" 游戏编程的C++ - 爱还是不信任? " 的后续跟进(从回答中我得到的印象是许多C++特性仍未在游戏中使用;这不一定是应该的方式).
Dan*_*son 26
我曾在2家游戏公司工作过,看过很多代码库,并在游戏开发者中观察过一些关于这些问题的争论,所以我或许可以提供一些观察.每个要点的简短答案是,它在不同的工作室之间,甚至在同一个工作室内的团队之间变化很大.下面列举的长答案:
一些工作室使用但不是其他工作室.许多团队仍然宁愿避免它.虚拟功能调用确实需要付出代价,即使在现代游戏机上,这种成本也很明显.在那些使用多态性的人中,我的愤世嫉俗的假设是,只有一小部分人使用它.
由于与多态性相同的许多原因,在中间分开.STL很容易错误使用,因此许多工作室选择在这些基础上避免它.在那些大量使用它的人中,许多人将它与自定义分配器配对.EA创建了EASTL,它解决了游戏开发中STL的许多问题.
很少有工作室使用异常处理.现代控制台的首要建议之一是关闭RTTI和异常.PC游戏可能会使用异常来获得更大的效果,但在控制台工作室中,异常情况经常被避开.它们增加了代码大小,这可能是非常宝贵的,并且在某些相关平台上并不支持.
基于政策的设计......我没有遇到任何问题.模板经常用于内省/反射和代码重用等事情.当我阅读Alexandrescu的书时,基于政策的设计对我来说似乎是一个有缺陷的承诺.我怀疑它在游戏行业中的使用非常多,但是从一个工作室到另一个工作室它会有很大差异.
许多工作室也使用智能指针,这些工作室也使用多态和STL.控制台游戏中的内存管理非常重要,因此很多人不喜欢引用计数智能指针,因为他们没有明确他们何时自由...但这些肯定不是唯一的智能指针.一般来说智能指针的想法仍在增加.我认为这将在2 - 3年内更加普遍.
这些经常使用.它们经常被覆盖以使用下面的自定义分配器,因此可以轻松跟踪内存并找到泄漏.
我想我同意你的结论.游戏工作室中没有尽可能多地使用C++.这有很好的和不好的理由.好的是因为性能影响或记忆问题,坏的是因为人们陷入了困境.在很多方面,按照他们一直以来的方式做事是有意义的,如果这意味着有限C++的C,那么它意味着C有限的C++.但是有许多反C++偏见浮出水面......有些是合理的,有些则没有.
小智 11