那么,有没有一种“神奇”的方法可以让C++编译器创建一个可执行文件,在Linux(服务器)、Windows和Mac之间完全确定?我认为两个主要的开源C++编译器是GCC和Clang,所以我想知道其中一个在这方面表现更好。
我还对任何可用于验证C++确定性的测试套件感兴趣。
[编辑] 通过确定性,我指的是编译后的程序,在相同的初始状态和相同顺序的输入下,将始终在任何平台上产生相同的输出,包括网络上的输出。对我来说,“一致”听起来是这种行为的适当定义,但我不是母语为英语的人,所以我可能会误解确切的含义。
[编辑#2] 虽然关于确定性/一致性是否重要,我是否应该在游戏引擎中追求它,以及在C++中它通常有多大问题的讨论非常有趣,但它实际上并没有回答问题。到目前为止,没有人告诉我是否应该使用Clang或GCC来获得最可靠/确定性/一致性的结果。
[编辑#3] 我突然想到有一种方法可以在C++中获得与Java完全相同的结果。必须获取JVM的开源实现,并提取实现运算符和数学函数的代码。然后将其转换为一个独立的库,并调用其中的内联函数,而不是直接使用运算符。手动完成这项工作会很麻烦,但如果代码是生成的,则是一个完美的解决方案。甚至可能可以使用类和运算符重载来完成,使其看起来自然。