c++ - 函数调用顺序。它是编译器还是取决于情况?

标签 c++ c

引起我注意的是 following fact : 函数评估的顺序,例如求和,在标准中未指定,因此可以按任何顺序执行。

这就提出了一个问题:它是依赖于编译器,依赖于优化,还是潜在地依赖于执行(我对此表示怀疑,它可能涉及代码的重新洗牌,但在今天的多核环境中,我猜某些编译器可能会看到优化的机会在这种缺乏规范的情况下,通过隐式地并行执行两个调用)?

编辑:我想澄清一下。标准中未指定顺序的事实并不意味着它未指定特定编译器(我假设它可能选择在文档中指定它)。未指定的行为可能使您不可移植,但编译器可能会根据给定规则一致地运行。我很想知道,纯粹出于学术好奇,这个规范是否真的是由编译器制定的(例如在手册中),如果是,这个选择是否一致或者可能被编译器选项或其他因素改变。以 gcc 为例。它的行为如何?是否一致?

最佳答案

未指定 - 我们还能说什么?由于您永远不应该编写依赖于顺序的代码(因为编译器当然可以更改它),所以这个问题仅供学术引用。如果您真的对特定编译器的功能感兴趣,请在您感兴趣的场景中检查发出的机器代码。

关于c++ - 函数调用顺序。它是编译器还是取决于情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6169801/

相关文章:

C++ 递归到迭代

c++ - 在 C++ 中处理来自基类的重写方法的异常

c - 如何在服务器客户端程序上为 gcc 创建 makefile?

c - 在C中的linux中输出随机数到文件

android - 如何使用 JNI 从 Android native C++ 调用 PackageManager.hasSystemFeature?

c++ - 比较 double

php - 通过 HTTP 上传大文件

c - 从C中的最后一个元素递减数组

c - 运行时检查失败#2 - C 编程中变量周围的堆栈

c - 无重复创建二维数组的最佳方法