如何安全地将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