c++ - 对于 { A=a;乙=乙; }, "A=a"会在 "B=b"之前严格执行吗?

标签 c++ c optimization compiler-construction standards

假设 A , B , a , 和 b都是变量,A 的地址, B , a , 和 b都是不同的。然后,对于以下代码:

A = a;
B = b;

C 和 C++ 标准是否明确要求 A=aB=b之前严格执行?鉴于 A 的地址, B , a , 和 b都是不同的,编译器是否允许为了优化等目的交换两条语句的执行顺序?

如果我的问题在 C 和 C++ 中的答案不同,我都想知道。

编辑:问题的背景如下。在棋盘游戏 AI 设计中,人们使用 lock-less shared-hash table 进行优化,如果我们不添加 volatile,其正确性很大程度上取决于执行顺序限制。

最佳答案

这两个标准都允许这些指令乱序执行,只要这不会改变可观察到的行为。这被称为 as-if 规则:

请注意,正如评论中所指出的,“可观察行为”是指具有已定义行为的程序的可观察行为。如果你的程序有未定义的行为,那么编译器就不会对此进行推理。

关于c++ - 对于 { A=a;乙=乙; }, "A=a"会在 "B=b"之前严格执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25847349/

相关文章:

c++ - vector .erase 错误 c2664

c - 字符串C上的getopt()

c - 涉及 char 数组的 C 语句的含义

c++ - Boost.Spirit.Qi : dynamically create "difference" parser at parse time

c++ - 简单的 openGL 程序无法在 ubuntu 中链接

C++模板题

正确使用fgets?

mysql - 选择前100行后如何停止或限制选择?

c++ - 创建多少个线程?

c++ - vector 中的 Intrinsics Neon Swap 元素