问题标签 [implementation-defined-behavior]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
71107 浏览

c++ - 未定义、未指定和实现定义的行为

什么是C 和 C++ 中的未定义行为(UB)?未指定的行为实现定义的行为呢?它们之间有什么区别?

0 投票
4 回答
92931 浏览

c++ - sizeof(bool) 是否在 C++ 语言标准中定义?

我在标准文档中找不到答案。C++ 语言标准是否要求sizeof(bool)始终为 1(对于 1 个字节),或者这个大小是实现定义的?

0 投票
4 回答
7401 浏览

c++ - 有符号右移:哪个编译器使用逻辑移位

我用 Visual Studio、Ubuntu 的 GCC、Intel 编译器、MinGW 测试了右移。全部移位符号位。我猜 Xcode 的 GCC 也是如此。

我知道行为是特定于实现的,但看起来所有主要的桌面/服务器编译器都实现了算术移位。是否有任何广泛使用的编译器不会改变符号位?

谢谢你。

0 投票
5 回答
59881 浏览

c++ - 为什么我不应该#include?

我用我的代码发布了一个问题,其唯一#include指令如下:

我的老师告诉我这样做,但在评论部分我被告知我不应该这样做。

为什么?

0 投票
3 回答
620 浏览

c++ - 如何在不调用未定义或实现定义的行为的情况下从 uint8_t 缓冲区读取有符号整数?

这是一个简单的函数,它试图从大端缓冲区中读取一个通用的二进制补码整数,我们假设std::is_signed_v<INT_T>

不幸的是,这是未定义的行为,因为最后一个<<=转移到符号位。


所以现在我们尝试以下方法:

但是我们现在在 中调用实现定义的行为static_cast,从无符号转换为有符号。


在“定义明确”的领域中如何做到这一点?

0 投票
1 回答
964 浏览

c - 一个字节中的位数 - C 标准

为什么像字节中的位数这样基本的东西被 C 标准保持为实现定义?有没有可能有用的例子?

从 C99 , 3.6 (在此处可用链接

3.6 字节

可寻址的数据存储单元,大到足以容纳执行环境的基本字符集的任何成员

注 1 可以唯一地表示对象的每个单独字节的地址。

注2 :一个字节由一个连续的比特序列组成,其数量由实现定义。最低有效位称为低位;最高有效位称为高位。

编辑:我在问一些基本的问题,为什么 C 标准在字节大小的位数方面提供了灵活性。没有更具体地询问 sizeof(char) 有什么好处 CHAR_BIT != 8。如果问题仍然看起来重复,请投反对票,我将关闭问题。

0 投票
3 回答
162 浏览

c++ - 为什么 boost::hana::tuple_c 实现的类型是定义的?

状态的Boost.Hana 文档tuple_c

另请注意,返回的对象类型tuple_c和等效调用make<tuple_tag>可能不同。

后跟以下代码段:

然而,实际的实现只是tuple_c

to_tuple而且,事实上,代码片段在没有包装器的情况下工作得很好:

问题:为什么要tuple_c定义实际的实现类型?包装不是to_tuple多余的吗?

0 投票
1 回答
58 浏览

c++ - 是否实现定义了哪些算法可以接受可变 lambda?

我在这里发现 lambdas 是按值捕获的。这意味着如果一个算法在内部使用第二个算法,它按值接受 lambda,则不会保留 lambda 的任何可变状态。我将在这里重新发布我的链接问题示例:

因此,在撰写本文时,我最初的问题已经定义了lambdaremove_if的实现行为。mutable是否有实现定义的其他功能的列表?

0 投票
1 回答
77 浏览

c - “未定义的行为”和“实现定义的行为”之间有什么区别,或者为什么要区分它们?

C 标准 (AFAIK) 使用这两个术语。我很难理解两者之间的区别在哪里。

如果我有任何给定的、语法正确的 C 语句,编译器不可能不发出一些机器指令。当然,它可以选择根本不发布任何声明,但即使这样也会“依赖于实现”。

一个更具体的例子:整数值溢出。现在我们有两种类型的溢出:算术溢出和内存溢出。如果有符号整数的溢出按照标准是UB,那是什么意思呢?实现是否可以简单地将溢出位溢出到 MSB 的相邻字节中?(从未见过,但可以吗?)

在我看来,“未定义的行为”总是依赖于实现。或者,换句话说,编译器似乎无法在不引入“实现定义”行为的情况下处理任何“未定义行为”。

那么为什么还要区分两者呢?

0 投票
6 回答
6957 浏览

c++ - 为什么为位字段分配值不返回相同的值?

我在这篇 Quora 帖子中看到了以下代码:

在 C 和 C++ 中,代码的输出都是出乎意料的,

被禁用 !!

尽管在那篇文章中给出了与“符号位”相关的解释,但我无法理解,我们怎么可能设置了一些东西,然后它就不能按原样反映。

有人可以给出更详细的解释吗?


注意:标签都是必需的,因为它们的描述位域的标准略有不同。请参阅C 规范C++ 规范的答案。