作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
假设 A
, B
, a
, 和 b
都是变量,A
的地址, B
, a
, 和 b
都是不同的。然后,对于以下代码:
A = a;
B = b;
C 和 C++ 标准是否明确要求 A=a
在B=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/
我是一名优秀的程序员,十分优秀!