c++ - 如何安全地将 ssize_t 与 int64_t 进行比较
问题描述
我想安全地将ssize_t
变量与int64_t
变量进行比较以检查值是否相等。安全我的意思是比较应该适用于ssize_t
. 我的第一个猜测是使用 astatic_cast
转换为ssize_t
,int64_t
但我不确定这是否是一种安全的转换方式?
就像是:
ssize_t a = read(...);
int64_t b = getsize(...);
if(static_cast<int64_t>(a) == b){
// ... read succeeded
} else{
// ... partial or read failure
}
更新:在 Ubuntu 上,它们的大小完全相同
解决方案
不要把事情过度复杂化。
ssize_t
和int64_t
都是有符号类型,因此通用类型是两者中较大的类型,这意味着转换是保值的。
总之,直接使用比较运算符会做正确的事情。
您只需要在混合有符号和无符号时小心,无符号至少int
与有符号类型一样大。因为只有在这种情况下,转换为通用类型才不会为负值保值。
在这种情况下,C++20 对intcmp有帮助
推荐阅读
- javascript - 嵌入问题,字段值可能不是空的
- python - 减去布尔值列表
- c# - 使用 Dapper 将数组传递给 SQL 参数
- rest - 多个请求的 REST API 方式/最先进的技术
- python - 避免递归树行走中的基本路径
- c# - 实体框架:使用包含在 Net Core 3 中的更新记录
- python - Python中的正则表达式在“:”之后获取文本
- microsoft-graph-api - 如何在没有教育许可证的情况下在 Microsoft Teams 中添加分配选项卡
- spring - Spring 确实回滚,同时保存在 try-catch 的 finally 块中
- python - 如何在包含特定文本的文件夹中搜索文件并在 Python 中重命名该文件