相关疑难解决方法(0)

为什么无符号整数溢出定义了行为但是有符号整数溢出不是?

无符号整数溢出由C和C++标准很好地定义.例如,C99标准(§6.2.5/9)声明

涉及无符号操作数的计算永远不会过度流动,因为无法用结果无符号整数类型表示的结果将以比结果类型可以表示的最大值大1的数量为模.

但是,这两个标准都声明有符号整数溢出是未定义的行为.再次,从C99标准(§3.4.3/1)

未定义行为的一个示例是整数流上的行为

这种差异是否存在历史或(甚至更好!)技​​术原因?

c c++ integer-overflow undefined-behavior

197
推荐指数
4
解决办法
4万
查看次数

是否存在一个平台或情况,其中解除引用(但不使用)空指针以使空引用将表现不佳?

我目前正在使用一个使用代码的库

T& being_a_bad_boy()
{
    return *reinterpret_cast<T*>(0);
}
Run Code Online (Sandbox Code Playgroud)

在没有实际存在T的情况下引用T.这是未定义的行为,特别指出标准不支持,但它不是闻所未闻的模式.

我很好奇是否有任何示例或平台或用法表明在实践中这可能会导致问题.谁能提供一些?

c++ null reference undefined-behavior

25
推荐指数
3
解决办法
2248
查看次数

(x&lt;y)==(-x&gt;-y) 是真还是假?

该问题来自 cs:app3e 2.82。我了解到,当x = INT_MIN,-x也是-INT_MIN,但是

#include <stdio.h>
#include <limits.h>

int main() {
    int x = INT_MIN, y = -3;
    printf("%d\n", (x < y) == (-x > -y));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的机器上(Linux版本6.2.0-34-generic(buildd@bos03-amd64-059)(x86_64-linux-gnu-gcc-11(Ubuntu 11.4.0-1ubuntu1~22.04)11.4.0,GNU ld(GNU Binutils for Ubuntu) 2.38)),这给出输出 1。为什么会发生这种情况?

我使用gcc -o来编译它。我还使用gcc -O0来编译它。

c gcc system

3
推荐指数
1
解决办法
251
查看次数

标签 统计

c ×2

c++ ×2

undefined-behavior ×2

gcc ×1

integer-overflow ×1

null ×1

reference ×1

system ×1