【发布时间】:2021-01-10 07:52:03
【问题描述】:
... 需要符合要求的实现来模拟(仅)抽象机的可观察行为,如下所述。
这个解释是as-ifrule,其中包含如下例子:
...如果一个实际的实现可以推断出它的值没有被使用并且没有产生影响程序可观察行为的副作用,则它不需要评估表达式的一部分。
副作用的定义在intro.execution#7:
读取由 volatile glvalue ([basic.lval]) 指定的对象、修改对象、调用库 I/O 函数或调用执行任何这些操作的函数都是副作用,它们是执行环境的状态。 ...
在我看来,在以下程序中:
int main()
{
throw 42;
}
没有使用表达式throw 42; 的值,它不满足任何作为副作用的标准。
这是否意味着允许实现不对这个表达式求值?上面的程序是否相当于:
int main() {}
就抽象机而言?我找不到任何说明抽象机器知道或关心异常的文本。
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: c++ exception language-lawyer semantics throw