c++ - 为什么 C 和 C++ 没有内置方法来检查整数溢出?

标签 c++ c integer-overflow

为什么 C 和 C++ 不提供一组实现提供的操作来执行每个带有溢出检查的基本整数操作(例如,a bool safeAdd(int *out, int a, int b))。

据我了解,大多数指令集都有方法来判断操作是否溢出(例如 x86 溢出和进位标志),并且还定义了是否会在有符号整数的情况下发生。

因此,编译器不应该比用 C 和 C++ 编写的代码做得更好,创建更简单和更快的操作吗?

最佳答案

C 和 C++ 遵循“无需为不需要的东西付费”的中心原则。因此,默认的算术运算不会偏离底层架构的单一算术运算指令。

至于为什么没有标准库函数来添加两个整数和检测溢出,我不能说。首先,该语言似乎将有符号整数溢出定义为 undefined behavior :

In the C programming language, signed integer overflow causes undefined behavior,

考虑到有多种方法可以实现有符号整数(一个补码、二进制补码等),并且在创建 C 语言时,这些架构都很流行,这是可以理解的,为什么这是未定义的。如果没有大量有关底层平台的信息,就很难实现“安全*”纯 C 函数。它可以在逐个 CPU 的基础上完成。

但这并不意味着它是不可能的。如果有人能找到向 C 或 C++ 标准机构提出的带有更安全的溢出帮助器的提案,并且能够了解它们被拒绝的原因,我肯定会感兴趣。

不管怎样,有many ways在实践中检测算术溢出和库以提供帮助。

关于c++ - 为什么 C 和 C++ 没有内置方法来检查整数溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12071532/

相关文章:

c++ - 为什么这段代码在插入 STL 列表时挂起

c - 如何访问80C51的外部存储器

c++ - 有没有一种安全的方法来获取有符号整数的无符号绝对值,而不会触发溢出?

python - 尝试大值时整数溢出 - 因式分解算法

c++ - glDrawElementBaseVertex() 与 glDrawElement()

C++ - 将所有分配的 double 组对齐到 32 字节

c++ - 对此处使用的适当设计模式感到困惑

c - Char变量如何在C中工作

c - C中输出单个字符

java - Java 如何处理整数下溢和上溢,您将如何检查它?