5

经过一点谷歌搜索(例如,site:eel.is "as if rule")后,我找不到在 C++ 标准中明确说明所谓“好像”规则的适当位置。我所能找到的只是在标准中调用它的那些地方,intro.execution给出了参考。

intro.execution似乎没有明确引用此规则的任何一般形式。我可能在这里遗漏了一些微妙的东西,但是你能指出我对规则的精确规范理解的地方吗?也许整体intro.execution确实是为了传达我们所说的野外“好像”规则?我承认我只是略过它。

我正在使用这个网站浏览标准的工作草案。

例如,可以在cppreference 站点中找到“好像”规则的定义,即只要满足某些约束条件,例如出于优化原因,编译器就可以对程序执行转换。

4

2 回答 2

4

“好像”规则的定义在 4.1.1/1 的脚注中给出。见http://eel.is/c++draft/intro.abstract#footnote-4

这个规定有时被称为“好像”规则,因为只要结果是好像该要求已被遵守,只要可以从可观察到的行为中确定,实施就可以自由地忽略本文档的任何要求。该程序。例如,如果一个实际的实现可以推断出它的值没有被使用并且没有产生影响程序可观察行为的副作用,则它不需要评估表达式的一部分。

于 2020-05-06T16:02:51.820 回答
4

从不同的Draft Standard看来,您在链接中引用的部分实际上是“as-if”规则(参见脚注 #5):

1.9 程序执行 [intro.execution]

本国际标准中的语义描述定义了一个参数化的非确定性抽象机。本国际标准对一致性实现的结构没有要求。特别是,它们不需要复制或模仿抽象机器的结构。相反,需要符合要求的实现来模拟(仅)抽象机的可观察行为,如下所述。5 .
...
5) 该条款有时被称为“好像”规则,因为只要结果是好像已经遵守了该要求,实施可以随意忽略本国际标准的任何要求,只要可以从程序的可观察行为。例如,如果一个实际的实现可以推断出它的值没有被使用并且没有产生影响程序可观察行为的副作用,则它不需要评估表达式的一部分。

PS:我在引用的文档中发现“有趣”的一件事是“as-if rule”的索引条目:

program execution, 8–11
    abstract machine, 8
    as-if rule, see as-if rule
于 2020-05-06T16:06:51.143 回答