C++ 我是否应该使用“;“未签名”;每次我知道我';我在处理无符号值吗?
通常情况下,已知值为正值。例如,TCP/UDP序列号始终为正值。C++ 我是否应该使用“;“未签名”;每次我知道我';我在处理无符号值吗?,c++,signedness,C++,Signedness,通常情况下,已知值为正值。例如,TCP/UDP序列号始终为正值。int和unsigned int都足够大,甚至可以存储最大的序列号,因此我可以使用这些类型中的任何一种。当已知值为正值时,还有许多其他示例 当常规有符号类型的容量足够(并且通常足够多)时,是否有任何理由使用无符号类型 就我个人而言,我倾向于使用常规类型,因为: int可能比uint或unsigned int 我不需要为UINT等添加额外的标题 我将避免在节目中的其他地方进行额外的播放 使用无符号类型的原因我可以想象: 帮助编译
int
和unsigned int
都足够大,甚至可以存储最大的序列号
,因此我可以使用这些类型中的任何一种。当已知值为正值时,还有许多其他示例
当常规有符号
类型的容量足够(并且通常足够多)时,是否有任何理由使用无符号
类型
就我个人而言,我倾向于使用常规类型,因为:
可能比int
或uint
unsigned int
- 我不需要为
等添加额外的标题UINT
- 我将避免在节目中的其他地方进行额外的播放
无符号
类型的原因我可以想象:
- 帮助编译器生成更好的代码
- 帮助其他程序员理解变量是无符号的
- 避免可能的错误(例如,当int被分配给UINT编译器时,可能会产生编译时错误,我们应该检查分配的值是否为负值)
abs(a-b)
倾向于直观地为int工作,但不是无符号的;值得注意的是,标准转换可以在静默状态下启动,因此您可能希望通过使用unsigned进行的检查无论如何都不起作用-负值会在静默状态下变大,反之亦然。混合使用signed和unsigned是bug的一个重要来源。除了专业情况外,我会在所有情况下都坚持签名。@john:不混合它们意味着根本不使用STL?