我正在尝试理解“as-if”规则。根据cppreference:
“as-if”规则
允许进行任何不改变程序可观察行为的代码转换解释
C++编译器可以对程序进行任何更改,只要以下条件仍然成立:[...]
对我来说,很难理解“解释”部分的第二个提示:
2) 在程序终止时,写入文件的数据与按原样执行程序时完全相同。
我不理解“按原样执行程序”是什么意思。
我正在尝试理解“as-if”规则。根据cppreference:
“as-if”规则
允许进行任何不改变程序可观察行为的代码转换解释
C++编译器可以对程序进行任何更改,只要以下条件仍然成立:[...]
对我来说,很难理解“解释”部分的第二个提示:
2) 在程序终止时,写入文件的数据与按原样执行程序时完全相同。
我不理解“按原样执行程序”是什么意思。
该规则的一个重要特点是它指定了实现符合的最小要求,但并不意味着这些要求足以满足任何特定应用程序的需求,也不意味着某些应用程序不需要提供更强的保证。假设执行和记录单个测试结果的过程如下:
如果需要进行三个测试,可以按顺序对每个测试执行以上五个步骤,但以下任何一种步骤顺序也可能是可接受的:
或者--为了避免同时跟踪三张纸:
如果一切顺利的话,这三种方法都是等效的。然而,如果第二个实验出了问题并破坏了桌子上摆放的任何文件,使用第二种方法会冒失将第一个实验的结果丢失 - 如果按照完全详细的程序操作,则不会发生这种情况。更糟糕的是,如果第三个实验出大问题并破坏了除了 锁好的 以外的所有东西,第三种方法就会有可能丢失保险柜中的所有内容,甚至是与实验无关的内容。
在某些情况下,第二或第三种方法可能是合适的。在其他情况下,则不是。判断这些方法是否合适需要了解实验所带来的风险、保险柜的内容和许多其他因素。
标准的作者无法知道判断哪些应用程序需要什么样的保证所必需的一切信息。相反,他们依赖于各种实现的生产者和用户来认识到什么样的保证将需要安全有效地完成需要完成的任务。