rlu*_*uks 11 c++ casting size-t
在我在项目中使用的源文件中,有一个ssize_t
和size_t
变量之间的比较:
ssize_t sst;
size_t st;
if(sst == st){...}
Run Code Online (Sandbox Code Playgroud)
我想摆脱警告:
warning: comparison between signed and unsigned integer expressions
Run Code Online (Sandbox Code Playgroud)
但我不确定,我应该向另一个转变哪个变量?
if((size_t)sst == st){...}
Run Code Online (Sandbox Code Playgroud)
要么
if(sst == (ssize_t)st){...}
Run Code Online (Sandbox Code Playgroud)
什么是更安全,更好,更清洁?谢谢
Ste*_*non 24
这个问题没有一个正确的答案.有几种可能的答案,取决于您对这些变量可能采用的值的先验知识.
如果你知道这sst
是非负面的,那么你可以安全地转换sst
为size_t
,因为这不会改变值(顺便说一句,如果你根本没有演员,会发生这种情况).
如果sst
可能是负面但你知道st
永远不会大于SSIZE_MAX
,那么你可以安全地转换st
为ssize_t
,因为这不会改变值.
如果sst
可能是否定的,并且st
可能大于SSIZE_MAX
,那么两个演员都不是正确的; 任何一个都可能改变该值,导致不正确的比较.相反,您将执行以下操作if (sst >= 0 && (size_t)sst == st)
.
如果您不确定前两种情况之一是否适用,请选择第三种选项,因为它在所有情况下都是正确的.