c++ - 将 unsigned int 的最大值转换为 int 并期望结果为-1 是否可移植?
问题描述
我发现了一个 C++ 代码,我们在其中将一个 unsigned int 32 初始化为它的最大值,转换为一个有符号 int 并期望它是-1
. 它在经过测试的编译器上运行良好,但它真的可移植吗?
int GetBusinessDataID()
{
u32_t id = ~0;
// Some code that may return a valid ID.
return id; // Here we expect to return -1.
}
解决方案
从 C++20 开始,这保证了整数转换;在 C++20 之前,这是实现定义的。
如果目标类型是有符号的,则如果源整数可以在目标类型中表示,则值不会更改。否则结果是
实现定义(C++20 前)
目标类型的唯一值等于源值模 2 n 其中n是用于表示目标类型的位数。(C++20 起)。
推荐阅读
- javascript - react-hook-form 显示未定义
- java - 无法找出 pom 文件
- excel - 将工作表导出为 PDF 并附加到 Outlook 电子邮件
- arrays - char数组中的C指针
- java - 如果类方法不存在,无论如何让 TestNG 不运行套件?
- php - Laravel Eloquent 关系有很多错误:在 where 上使用时调用未定义的方法
- css - 固定背景附件和自定义文本
- c# - .net c# 从控制台应用程序向打印机发送文件
- javascript - 为什么使用 WebGL 和 three.js 从我的代码中没有呈现任何对象?
- shell - 从另一个 Hbase 表中获取值