- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在许多关于未定义行为 (UB) 的讨论中,已经提出了这样一种观点,即仅在程序中存在的任何结构中,如果在程序中具有 UB,则要求一个符合要求的实现做任何事(包括什么都不做)。我的问题是,即使在 UB 与代码的执行相关联的情况下,是否应该从这个意义上理解这一点,而标准中指定的行为(否则)规定有问题的代码应该不被执行(这可能是针对程序的特定输入;它可能在编译时无法确定)。
用更通俗的说法,UB 的味道是否要求一个符合要求的实现来决定整个程序很糟糕,并且拒绝正确执行,即使是行为已完全明确定义的程序部分。一个示例程序是
#include <iostream>
int main()
{
int n = 0;
if (false)
n=n++; // Undefined behaviour if it gets executed, which it doesn't
std::cout << "Hi there.\n";
}
为清楚起见,我假设程序格式正确(因此特别是 UB 与预处理无关)。事实上,我愿意限制与“评估”相关的 UB,这显然不是编译时实体。我认为与给出的示例相关的定义是(重点是我的):
Sequenced before is an asymmetric, transitive, pair-wise relation between evaluations executed by a single thread (1.10), which induces a partial order among those evaluations
The value computations of the operands of anoperator are sequenced before the value computation of the result of the operator. If a side effect on a scalar object is unsequenced relative to either ... or a value computation using the value of the same scalar object, the behavior is undefined.
很明显,最后一句中的主语“副作用”和“值(value)计算”是“评估”的实例,因为这就是“先排序”关系的定义。
我认为在上述程序中,标准规定不会发生满足最后一句中的条件的评估(相对于彼此和所描述的类型无序),因此该程序没有 UB;没有错。
换句话说,我确信我的标题问题的答案是否定的。不过,我会很感激其他人在这个问题上的(积极的)意见。
对于那些主张肯定回答的人来说,也许还有一个问题,即当编译错误的程序时,是否会强制要求重新格式化硬盘?
本站的一些相关指点:
最佳答案
If a side effect on a scalar object is unsequenced relative to etc
副作用是执行环境状态的变化 (1.9/12)。更改是一种更改,而不是如果评估后可能会产生更改的表达式。如果没有变化,就没有副作用。如果没有副作用,那么没有副作用相对于其他任何事情都是无序的。
这并不意味着永远不会执行的 any 代码是 UB-free 的(尽管我很确定其中大部分是)。标准中每次出现的 UB 都需要单独检查。(删除的文本可能过于谨慎;见下文)。
标准也这样说
A conforming implementation executing a well-formed program shall produce the same observable behavior as one of the possible executions of the corresponding instance of the abstract machine with the same program and the same input. However, if any such execution contains an undefined operation, this International Standard places no requirement on the implementation executing that program with that input (not even with regard to operations preceding the first undefined operation).
(强调我的)
据我所知,这是唯一说明“未定义行为”一词含义的规范性引用:程序执行中的未定义操作。没有执行,没有 UB。
关于c++ - 具有未定义行为但从未实际执行过的表达式是否会使程序出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24186681/
注意:根据 ECMAScript5.1, section 15.1.1.3 , window.undefined 是只读的。 现代浏览器正确地实现了这一点。例如:Safari 5.1、Firefox
我用谷歌搜索,检查了所有常见的响应。这些脚本似乎顺序正确(它们在 the demo 中以相同的顺序工作)但由于某种原因,当我尝试实现它时,我得到了错误。 我有一个 paste bin用我完整的页面代码
我有以下代码: simpleExample.html: Simple example Open the Console. js/simpleExampleJS.
所以我对 typescript 很陌生。 这是我的 tsconfig.json 文件的样子, 我什至不知道那些“例子”是从哪里来的 这是我在浏览器中遇到的错误 这是我的 package.json 最佳
我被 TypeScript 错误困住了: Failed to compile. undefined TypeScript error in undefined(undefined,undefined)
我已将 onlcick 事件附加到表单的提交按钮以覆盖默认的 POST 请求,但在使其正常工作时遇到了一些问题。 我想要的是点击添加到购物车的商品,但只显示模式确认而不刷新页面。 这段代码在我的静态示
我已经完成了这个link .但是给定的解决方案并没有解决我的问题。所有经验丰富的人都建议使用 getActivty().getApplicationContext()。但我使用的是普通类(class)
我有一个应用程序,其中 webpack 配置为模块 bundler ,babel 作为我的 js 编译器。全部都在 Node 引擎上。我设置当我运行 npm run dev 时,将会发生以下流程: w
我正在尝试在浏览器中呈现网址的 JSON 数据,但它在 div 中显示为 undefined, undefined .当我将其响应放入console.log时对象及其数据出现,因此它出现在控制台和浏览
为什么我会收到 Cannot invoke an object which is possibly 'undefined'即使在我检查了 func 之后,Typescript 也会出错引用不是未定义的
我想使用airbnb的eslint修改我的代码结构。我已遵循 eslint-config-airbnb 中给出的说明。启动命令后npm run lint,结果由 'fetch' is not Defi
这个问题在这里已经有了答案: What is the consequence of this bit of javascript? (4 个答案) 关闭 9 年前。 我看到一些 jQuery 脚本嵌
我一直收到这个 pouchDB 错误,我不知道这是怎么回事。 Error: connect ENFILE 127.0.0.1:5984 - Local (undefined:undefined)
import os from os.path import abspath, dirname import sys # Set up django project_dir = abspath(dirn
在 javascript 中,要检查变量是否从未创建过,我们只需执行 if (typeof MyVariable !== "undefined"){ ... } 我想知道如何在 CoffeeScrip
我正在尝试编译 FreeLing,它使用 CMake 来检测 Boost。这是负责它的代码: find_package(Boost COMPONENTS regex filesystem thre
我收到“JQUERY 未定义”错误。你有什么想法吗(代码如下)。 $(document).ready(function() { window.print();
无论我是否将 jQuery $.ajax 调用放入 $(document).ready(function() { 中,我都会收到此错误。这是在 ASP.NET MVC .cshtml 文件上.
我正在构建的网站上遇到问题,但数据表不存在加载(在服务器上)但在本地主机(xamp)上工作正常。 Firefox 会抛出错误“$ 未定义”。 我用谷歌搜索了这些错误,我发现一个 friend 的解决方
当我在 $(document).ready 之前明确包含 jQuery 库时,我无法弄清楚为什么它仍然无法识别 jQuery 语法
我是一名优秀的程序员,十分优秀!