Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我是否应该使用“;“未签名”;每次我知道我';我在处理无符号值吗?_C++_Signedness - Fatal编程技术网

C++ 我是否应该使用“;“未签名”;每次我知道我';我在处理无符号值吗?

C++ 我是否应该使用“;“未签名”;每次我知道我';我在处理无符号值吗?,c++,signedness,C++,Signedness,通常情况下,已知值为正值。例如,TCP/UDP序列号始终为正值。int和unsigned int都足够大,甚至可以存储最大的序列号,因此我可以使用这些类型中的任何一种。当已知值为正值时,还有许多其他示例 当常规有符号类型的容量足够(并且通常足够多)时,是否有任何理由使用无符号类型 就我个人而言,我倾向于使用常规类型,因为: int可能比uint或unsigned int 我不需要为UINT等添加额外的标题 我将避免在节目中的其他地方进行额外的播放 使用无符号类型的原因我可以想象: 帮助编译

通常情况下,已知值为正值。例如,TCP/UDP序列号始终为正值。
int
unsigned int
都足够大,甚至可以存储最大的
序列号
,因此我可以使用这些类型中的任何一种。当已知值为正值时,还有许多其他示例

当常规
有符号
类型的容量足够(并且通常足够多)时,是否有任何理由使用
无符号
类型

就我个人而言,我倾向于使用常规类型,因为:

  • int
    可能比
    uint
    unsigned int
  • 我不需要为
    UINT
    等添加额外的标题
  • 我将避免在节目中的其他地方进行额外的播放
使用
无符号
类型的原因我可以想象:

  • 帮助编译器生成更好的代码
  • 帮助其他程序员理解变量是无符号的
  • 避免可能的错误(例如,当int被分配给UINT编译器时,可能会产生编译时错误,我们应该检查分配的值是否为负值)

一个原因是,比较有符号和无符号数字可能会得到令人惊讶的结果。在C和(我想)C++中,比较有符号和无符号数使符号数被解释为无符号。如果有符号的值恰好是负数,那么将其读取为无符号将给出比任何无符号数都大的值,这不是您想要的。请参阅Objective-C中的一个示例,它使用与C相同的转换规则。

这里有一些想法:谢谢,我也发现了这个问题,现在没有。反对使用<代码>未签名< /COD> > Stroustrup在C++编程语言中顺便提及这一点。拉科斯走了,在他的一本书中写了一篇有关乏味的章节。示例问题:如果您有值a和b,
abs(a-b)
倾向于直观地为int工作,但不是无符号的;值得注意的是,标准转换可以在静默状态下启动,因此您可能希望通过使用unsigned进行的检查无论如何都不起作用-负值会在静默状态下变大,反之亦然。混合使用signed和unsigned是bug的一个重要来源。除了专业情况外,我会在所有情况下都坚持签名。@john:不混合它们意味着根本不使用STL?