计算流体力学代码，C++比Fortran的优越性在哪？
如果是写规模比较大的通用代码（数万行，奔着cfl3d、openfoam、fluent去）的话，c++几乎是唯一的选择。因为fortran的变量作用域太大了，你不能指望每一个读、写这套代码的人都能够对于所有部件有全面的、细节的认识，冗长的变量列表只会催生无尽的重复劳动和疏忽出错（以垃圾的cfl3d为代表...）。而c++（面向对象）里面，合理的设计可以将各种数据有层次结构、有逻辑联系地组织起来，这无疑会大大提高程序地可读性、可扩展性。 如果是处理数据结构相对比较复杂的问题，c++（面向对象）的高度灵活性也会体现一些的优势。举个简单的小例子，写eno、weno解toy problem验证数值方法时，在理论推到中经常会有网格半点（ f_{i\pm1/2} ）这种东西，写代码时需要声明不同的数组来存储位于cell center和cell interface上的各种变量，一般来说需要人脑捋一遍不同位置上变量数组索引间的关系。如果定义个类/结构体，自定义operator或者函数实现浮点数指标的索引，那么就可以直接按论文里面的公式来写代码（且不容易出错），比如 对于不想额外费脑子的人来说是个有点用的trick。 要说社区支持的话，fortran可以说是毫无社区，虽然由于历史原因各种hpc sdk还是会支持fortran（比如intel one api、cuda fortran），但有啥问题基本就只能翻文档了。对比一下vscode里面fortran和c++插件数量/质量也可以感觉到两者在社区生态上的巨大鸿沟。  但是，怪就怪在fortran有些特性又好得不得了，比如原生数组、module（在你需要提前定义一大堆全局变量时，例如gpu计算）、namelist。而且，在写c++的时候，很可能大部分精力都会放在流体和计算之外的问题上（比如数据结构设计、计算效率等等），这时就得怀疑怀疑自己的初衷了：“我究竟是要写套cfd代码模拟分析流体问题，还是要当一个写cfd代码的程序员”。所以说归根结底还是取决于需求，个人体验在中小规模的cfd代码上，fortran与c++各有优劣，其选择更多是种审美偏好的问题。 