首页 > 解决方案 > 如何安全地将 ssize_t 与 int64_t 进行比较

问题描述

我想安全地将ssize_t变量与int64_t变量进行比较以检查值是否相等。安全我的意思是比较应该适用于ssize_t. 我的第一个猜测是使用 astatic_cast转换为ssize_tint64_t但我不确定这是否是一种安全的转换方式?

就像是:

ssize_t a = read(...);
int64_t b = getsize(...);
if(static_cast<int64_t>(a) == b){
  // ... read succeeded
} else{
  // ... partial or read failure
}

更新:在 Ubuntu 上,它们的大小完全相同

标签: c++

解决方案


不要把事情过度复杂化。

ssize_tint64_t都是有符号类型,因此通用类型是两者中较大的类型,这意味着转换是保值的。
总之,直接使用比较运算符会做正确的事情

您只需要在混合有符号和无符号时小心,无符号至少int与有符号类型一样大。因为只有在这种情况下,转换为通用类型才不会为负值保值。
在这种情况下,C++20 对intcmp有帮助


推荐阅读