在许多代码示例、源代码、库等中,我看到了int的用法,据我所知,unsigned int
会更有意义。
我经常在for
循环中看到这种情况。如下例所示:
for(int i = 0; i < length; i++)
{
// Do Stuff
}
您到底为什么要使用int
而不是unsigned int
?这仅仅是懒惰吗?人们不会为输入unsigned
而烦恼
发布于 2014-03-23 13:51:12
使用unsigned
可能会引入难以发现的编程错误,通常最好使用带符号的int
来避免这些错误。一个例子是当你决定向后迭代而不是向前迭代时,并编写以下代码:
for (unsigned i = 5; i >= 0; i--) {
printf("%d\n", i);
}
另一种是如果你在循环中做一些数学运算:
for (unsigned i = 0; i < 10; i++) {
for (unsigned j = 0; j < 10; j++) {
if (i - j >= 4) printf("%d %d\n", i, j);
}
}
使用unsigned
会引入这些类型的bug的可能性,并且没有任何好处。
发布于 2014-03-23 13:56:49
这通常是懒惰或缺乏理解。
当值不应该是负数时,我总是使用unsigned int。这也符合文档的目的,即指定正确的值应该是什么。
IMHO,断言使用"int“比使用"unsigned int”更安全是完全错误的,也是一种糟糕的编程实践。
如果你使用过Ada或Pascal,你会习惯于使用更安全的做法,为数值指定特定的范围(例如,一个只能是1,2,3,4,5的整数)。
发布于 2014-03-23 13:46:01
如果length
也是int
,那么您应该使用相同的整数类型,否则当您在比较语句中混合有符号和无符号类型时,会发生奇怪的事情。大多数编译器都会给你一个警告。
你可以继续问,为什么要签署length
?好吧,那可能是历史了。
此外,如果您决定反转循环,即
for(int i=length-1;i>=0 ;i--)
{
// do stuff
}
如果使用无符号整数,逻辑就会中断。
https://stackoverflow.com/questions/22587451
复制相似问题