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