问题标签 [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.
c++ - 未定义、未指定和实现定义的行为
什么是C 和 C++ 中的未定义行为(UB)?未指定的行为和实现定义的行为呢?它们之间有什么区别?
c++ - sizeof(bool) 是否在 C++ 语言标准中定义?
我在标准文档中找不到答案。C++ 语言标准是否要求sizeof(bool)
始终为 1(对于 1 个字节),或者这个大小是实现定义的?
c++ - 有符号右移:哪个编译器使用逻辑移位
我用 Visual Studio、Ubuntu 的 GCC、Intel 编译器、MinGW 测试了右移。全部移位符号位。我猜 Xcode 的 GCC 也是如此。
我知道行为是特定于实现的,但看起来所有主要的桌面/服务器编译器都实现了算术移位。是否有任何广泛使用的编译器不会改变符号位?
谢谢你。
c++ - 为什么我不应该#include?
我用我的代码发布了一个问题,其唯一#include
指令如下:
我的老师告诉我这样做,但在评论部分我被告知我不应该这样做。
为什么?
c++ - 如何在不调用未定义或实现定义的行为的情况下从 uint8_t 缓冲区读取有符号整数?
这是一个简单的函数,它试图从大端缓冲区中读取一个通用的二进制补码整数,我们假设std::is_signed_v<INT_T>
:
不幸的是,这是未定义的行为,因为最后一个<<=
转移到符号位。
所以现在我们尝试以下方法:
但是我们现在在 中调用实现定义的行为static_cast
,从无符号转换为有符号。
在“定义明确”的领域中如何做到这一点?
c - 一个字节中的位数 - C 标准
为什么像字节中的位数这样基本的东西被 C 标准保持为实现定义?有没有可能有用的例子?
从 C99 , 3.6 (在此处可用链接)
3.6 字节
可寻址的数据存储单元,大到足以容纳执行环境的基本字符集的任何成员
注 1 可以唯一地表示对象的每个单独字节的地址。
注2 :一个字节由一个连续的比特序列组成,其数量由实现定义。最低有效位称为低位;最高有效位称为高位。
编辑:我在问一些基本的问题,为什么 C 标准在字节大小的位数方面提供了灵活性。没有更具体地询问 sizeof(char) 有什么好处 CHAR_BIT != 8。如果问题仍然看起来重复,请投反对票,我将关闭问题。
c++ - 为什么 boost::hana::tuple_c 实现的类型是定义的?
状态的Boost.Hana 文档tuple_c
:
另请注意,返回的对象类型
tuple_c
和等效调用make<tuple_tag>
可能不同。
后跟以下代码段:
然而,实际的实现只是tuple_c
:
to_tuple
而且,事实上,代码片段在没有包装器的情况下工作得很好:
问题:为什么要tuple_c
定义实际的实现类型?包装不是to_tuple
多余的吗?
c++ - 是否实现定义了哪些算法可以接受可变 lambda?
我在这里发现 lambdas 是按值捕获的。这意味着如果一个算法在内部使用第二个算法,它按值接受 lambda,则不会保留 lambda 的任何可变状态。我将在这里重新发布我的链接问题示例:
因此,在撰写本文时,我最初的问题已经定义了lambdaremove_if
的实现行为。mutable
是否有实现定义的其他功能的列表?
c - “未定义的行为”和“实现定义的行为”之间有什么区别,或者为什么要区分它们?
C 标准 (AFAIK) 使用这两个术语。我很难理解两者之间的区别在哪里。
如果我有任何给定的、语法正确的 C 语句,编译器不可能不发出一些机器指令。当然,它可以选择根本不发布任何声明,但即使这样也会“依赖于实现”。
一个更具体的例子:整数值溢出。现在我们有两种类型的溢出:算术溢出和内存溢出。如果有符号整数的溢出按照标准是UB,那是什么意思呢?实现是否可以简单地将溢出位溢出到 MSB 的相邻字节中?(从未见过,但可以吗?)
在我看来,“未定义的行为”总是依赖于实现。或者,换句话说,编译器似乎无法在不引入“实现定义”行为的情况下处理任何“未定义行为”。
那么为什么还要区分两者呢?
c++ - 为什么为位字段分配值不返回相同的值?
我在这篇 Quora 帖子中看到了以下代码:
在 C 和 C++ 中,代码的输出都是出乎意料的,
被禁用 !!
尽管在那篇文章中给出了与“符号位”相关的解释,但我无法理解,我们怎么可能设置了一些东西,然后它就不能按原样反映。
有人可以给出更详细的解释吗?