为了表示长度或计数变量,使用有符号或无符号整数是否更好?
在我看来,C++ STL往往更喜欢无符号(std::size_t就像在std :: vector :: size()中一样,而C#BCL往往更喜欢有符号整数(比如在ICollection.Count中).
考虑到长度或计数是非负整数,我的直觉会选择无符号 ; 但我不明白为什么.NET设计者选择了有符号整数.
什么是最好的方法?每个人的利弊是什么?
jal*_*alf 23
C++使用无符号值,因为它们需要全范围.在32位系统上,该语言应该可以使用4 GB的矢量,而不仅仅是2 GB的矢量.(操作系统可能不允许你使用所有4 GB,但语言本身并不想妨碍你)
在.NET中,无符号整数不符合CLS.您可以使用它们(在某些.NET语言中),但它限制了可移植性和兼容性.因此对于基类库,它们只使用有符号整数.
但是,这些都是边缘情况.在大多数情况下,签署的int是足够大的.因此,只要两者都提供您需要的范围,您就可以同时使用它们.
有符号整数有时具有的一个优点是它们可以更容易地检测下溢.假设您正在计算数组索引,并且由于某些错误输入或程序中的逻辑错误,您最终会尝试访问索引-1.
使用有符号整数,易于检测.随着未签名,它将环绕并成为UINT_MAX.这使得检测错误变得更加困难,因为您期望得到一个正数,并且您得到一个正数.
真的,这取决于.C++使用unsigned,因为它需要范围..NET使用签字,因为它需要与不语文工作有签名.
在大多数情况下,两者都可以工作,有时候,签名可以使您的代码更有力地检测错误.