gpt4 book ai didi

c++ - 施放 ssize_t 或 size_t

转载 作者:可可西里 更新时间:2023-11-01 15:37:39 35 4
gpt4 key购买 nike

在我的项目中使用的源文件中,ssize_tsize_t 变量之间有一个比较:

ssize_t sst;
size_t st;

if(sst == st){...}

我想摆脱警告:

warning: comparison between signed and unsigned integer expressions

但我不确定,我应该将哪个变量转换为另一个变量?

if((size_t)sst == st){...}

if(sst == (ssize_t)st){...}

什么更安全、更好、更清洁?谢谢

最佳答案

这个问题没有唯一的正确答案。有几种可能的答案,具体取决于您对这些变量可能取的值先验的了解。

  • 如果您知道 sst 是非负数,那么您可以安全地将 sst 转换为 size_t,因为这不会更改值(顺便说一下,如果您根本没有类型转换,就会发生这种情况)。

  • 如果 sst 可能为负,但您知道 st 永远不会大于 SSIZE_MAX,那么您可以安全地转换 stssize_t,因为这不会改变值。

  • 如果 sst 可能为负,并且 st 可能大于 SSIZE_MAX,则两种类型转换都不正确;任何一个都可能更改值,从而导致不正确的比较。相反,您可以执行以下操作 if (sst >= 0 && (size_t)sst == st)

如果您不是绝对确定前两种情况中的一种适用,请选择第三个选项,因为它在所有情况下都是正确的。

关于c++ - 施放 ssize_t 或 size_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16086331/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com