从双精度转换为整数的显式类型是否始终检查整数溢出?
Does explicit type cast from double to integer always check for integer overflow?
我用一些在线编译器做了一些测试,通过使用显式类型转换,它会自动防止溢出/下溢。
例如,从双999999999999999999到 uint32,结果是最大的 uint32 数。我的问题是该功能来自哪里?它是标准的 C/C++ 还是特定于编译器的?谢谢。
例:
double a;
a = 999999999999999999.0;
int b;
b = a;
在线编译器:codeinterview.io 离线:Visual Studio 2019社区(最新稳定版本(
从浮点数转换为整数时,
"如果无法在目标类型中表示截断的值,则行为未定义。">
https://eel.is/c++draft/conv.fpint#1
摘自 1998 年 C++ 标准,第 4.9 节第 1 段
浮点类型的右值可以转换为整数类型的右值。转换蹦蹦跳跳;也就是说,小数部分被丢弃。如果无法在目标类型中表示截断的值,则未定义此行为。
所有C++标准中都存在类似的条款。
因此,OP 完成的转换给出了未定义的行为。
相关文章:
- 验证用户输入和整数是否C++
- 找出堆栈数组中的下一个整数是否相同
- 检查整数是否增加了C++
- 检查用户输入的整数是否包含所有 1 或 0?
- 如何检查整数是否包含数字 0 和 1
- 测试整数是否在范围内时,逻辑错误和不正确输出
- 如何检查整数是否发生过或在读取C 的输入文件时发生了字符
- 使用非 32 位整数是否合理
- 将整数除法到整数是否需要强制转换以浮点数或双精度以更精确
- 检查整数是否是 8 的倍数
- 一种程序,用户在其中输入一个整数,程序指示该整数是否为素数
- 将常量字符数组转换为标头中的整数是否始终安全
- 检查整数是否具有整数立方根
- 如何确定整数是否适合变量
- 检查无符号整数是否没有索引的最佳实践
- C++查找整数是否存在于矩阵的一列中
- 确定一个整数是否与另一个几乎相等
- 检查正整数是否为2的幂的最短方法
- 用于检查整数是否包含给定十六进制模式的c++代码
- 如何在不使用平方根的情况下检查一个整数是否是完全平方数