650得票9回答
未定义行为、未指定行为和实现定义行为

在C和C++中,什么是未定义行为(UB)?又有哪些未指定行为和实现定义行为呢?它们之间有何区别?

449得票9回答
为什么我不应该使用 #include <bits/stdc++.h>?

我发布了一个带有代码的问题,其中唯一的#include指令如下: #include &lt;bits/stdc++.h&gt; 我的老师让我做这个,但在评论区有人告诉我不应该这样做。为什么?

135得票5回答
C++语言标准中是否定义了sizeof(bool)?

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

98得票6回答
为什么给位域赋值后返回的值不同?

我在这篇Quora帖子中看到了以下代码:#include &lt;stdio.h&gt; struct mystruct { int enabled:1; }; int main() { struct mystruct s; s.enabled = 1; if(s.enabled...

32得票2回答
将一个“unsigned long”变量索引并打印结果

昨天,有人向我展示了这段代码:#include &lt;stdio.h&gt; int main(void) { unsigned long foo = 506097522914230528; for (int i = 0; i &lt; sizeof(unsigned lo...

15得票4回答
有符号右移:哪些编译器使用逻辑移位?

我使用 Visual Studio、Ubuntu 的 GCC 编译器、英特尔编译器和 MinGW 进行了右移测试。所有的移位都在符号位上。我猜想 Xcode 的 GCC 也是这样做的。 我知道这种行为是实现特定的,但是看起来所有主流的桌面/服务器编译器都实现了算术移位。是否有任何广泛使用的编...

8得票3回答
如何在不引起未定义行为或实现定义行为的情况下,从uint8_t缓冲区中读取一个有符号整数?

这是一个简单的函数,它试图从大端序缓冲区中读取通用二进制补码整数。我们假设std::is_signed_v&lt;INT_T&gt;。请参考以下代码: template&lt;typename INT_T&gt; INT_T read_big_endian(uint8_t const *da...

5得票1回答
一个被定义为实现定义行为的操作是否可以有多种可能的执行方式?

[conv.fpint] P2 说 如果被转换的值在可表示的值范围内,但是不能精确表示该值,则实现可以选择下一个较低或较高的可表示值,这是一个实现定义的选择。 [intro.abstract] P2 说 本文档描述了抽象机器的某些方面和操作为实现定义(例如sizeof(int))。...

3得票1回答
可变lambda表达式是否可以被哪些算法接受是实现定义的吗?

我在这里发现,lambda表达式是按值捕获的。这意味着,如果一个算法内部使用了一个接受lambda表达式的第二个算法,并且它是按值传递的,那么lambda表达式中的任何可变状态都不会被保留。我将在此处重新发布我链接问题的示例: remove_if(begin(values), end(val...

3得票4回答
有符号整数溢出是未定义行为还是实现定义行为?

#include &lt;limits.h&gt; int main(){ int a = UINT_MAX; return 0; } 这是UB还是实现定义? 链接表明是UB: https://www.gnu.org/software/autoconf/manual/autoc...