当前位置: 首页 > 知识库问答 >
问题:

“仿佛”规则到底是什么?

满自明
2023-03-14

正如标题所说:

“仿佛”规则到底是什么?

注意:将其标记为C和C++,因为它与两种语言都相关。

共有1个答案

司马飞
2023-03-14

“as-if”规则基本上定义了允许一个实现在合法的C++程序上执行哪些转换。简而言之,所有不影响程序“可观察的行为”(见下面的精确定义)的转换都是允许的。

目标是给实现执行优化的自由,只要程序的行为保持与C++标准以抽象机器的形式指定的语义兼容。

C++11标准在第1.9/1段中引入了“仿佛”规则:

执行一个格式良好的程序的符合的实现应该产生与抽象机器的相应实例的可能执行中的一个相同程序和相同输入相同的可观察的行为。但是,如果任何这样的执行包含一个未定义的操作,本国际标准对执行该输入的程序的实现没有要求(即使是第一个未定义操作之前的操作也没有要求)。

值得强调的是,这个约束只适用于“执行格式良好的程序”,而执行包含未定义行为的程序的可能结果是不受约束的。第1.9/4段也明确说明了这一点:

某些其他操作在这个国际标准中被描述为未定义的(例如,试图修改常量对象的效果)。[注:本国际标准对包含未定义行为的程序的行为没有任何要求。-结束注]

-在程序终止时,写入文件的所有数据应与根据抽象语义执行程序可能产生的结果之一相同。

-交互设备的输入和输出动态应以这样一种方式发生,即在程序等待输入之前实际交付提示输出。构成交互式设备的是实现定义的。

这些统称为程序的可观察行为。[注:抽象语义和实际语义之间更严格的对应关系可能由每个实现定义。-结束注]

当满足某些条件时,允许实现省略类对象的复制/移动构造,即使为复制/移动操作选择的构造函数和/或对象的析构函数有副作用。[...]

 类似资料:
  • 问题内容: Python范围规则到底是什么? 如果我有一些代码: 在哪里找到?一些可能的选择包括以下列表: 在随附的源文件中 在类名称空间中 在函数定义中 在for循环中,索引变量 在for循环内 当函数传递到其他地方时,执行期间还会有上下文。也许lambda函数传递的方式有所不同? 某个地方必须有一个简单的参考或算法。对于中级Python程序员而言,这是一个令人困惑的。 问题答案: 实际上,这是

  • 问题内容: 我可以阅读 MySQL 文档,这很清楚。但是,如何决定要使用哪个字符集?整理对哪些数据有影响? 我要求对两者以及如何选择它们进行解释。 问题答案: 从MySQL 文档: 甲 字符集 是一组符号和编码。甲 归类 为在一个字符集的字符进行比较的一组规则。让我们通过一个假想字符集的例子来清楚地区分。 假设我们有一个包含四个字母的字母:“ A”,“ B”,“ a”,“ b”。我们给每个字母一个

  • 使用指南 - 统计设置 - 统计规则设置 - 什么是统计规则 统计规则指对网站流量数据的分类或者过滤方法。如果您对获取的流量数据有特殊需求,一般可以通过设置统计规则的方式来实现。 例如,如果您希望获取的流量数据中不包含公司内部访问的流量,那么您可以通过排除IP的方式实现;如果您希望按照实际业务内容划分流量数据,那么您可以通过新增子目录的方式实现。

  • 主要内容:JSP的由来,Servlet与JSP异同点,JSP相对于Servlet的优点JSP(Java Server Pages)是一种动态网页开发技术。JSP 文件就是在传统的 HTML 文件中插入 Java 代码和 JSP 标签,后缀名为 。 JSP 与 PHP、ASP、ASP.NET 等语言类似,都运行在服务端。通常返回给客户端的就是一个 HTML 文件,因此只要有浏览器就能查看 JSP 页面。 JSP 使用 JSP 标签在 HTML 网页中插入 Java 代码,标签通常以

  • 直到我在旧存储库中随机检查 ,我才听说过这个文件,它就是一个我自己没有编辑过也从未见过的文件。我不知道它是如何到达那里的。 似乎很常见 - 主要是如何删除它(例如这里和这里)。 这个文件是什么,是什么创建了它?

  • 基本上,为什么有这个术语? 还有,接口是什么意思?