我正在尝试理解 as-if 规则。根据cppreference :
The as-if rule
Allows any and all code transformations that do not change the observable behavior of the programExplanation
The C++ compiler is permitted to perform any changes to the program as long as the following remains true: [...]
解释部分的第二个技巧我很难理解:
2) At program termination, data written to files is exactly as if the program was executed as written.
我只是不明白“程序按书面执行”是什么意思。
最佳答案
周一,您的老板走进您的办公室,说“我需要在周四之前将 A 文件放在我的办公 table 上,并在周五将 B 放在我的办公 table 上”。他首先在文件 A 中描述了他想要的东西以及他认为您应该如何做这些事情,然后在文件 B 中描述了他想要的东西。
在你老板的心目中,你首先要为文件 A 做事,在星期四将该文件放在他的办公 table 上,然后开始处理文件 B,并在星期五完成。但是您意识到,更早开始处理文件 B 会更有意义——甚至在文件 A 之前。没有理由你的老板必须知道——他关心的只是周四收到 A 和周五收到 B。您还意识到他建议的方式可以改进,因此您采用稍微不同的方法来生成所需的信息。
在这个类比中,老板是一些 C++ 代码,而你是编译器。只要可观察的行为(将文件放在老板的 table 上)相同,编译器重新排列操作(以另一种顺序处理文件)是合法的。同样,编译器可以自由地对保留可观察行为的代码进行任何转换(使用与老板描述的方法不同的方法)。
特别是,“就好像程序按照书面执行一样”意味着“就好像您完全按照老板的指示完成了工作”(即使您做了不同的事情)。
关于c++ - 理解 as-if 规则, "the program was executed as written",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56802645/