这是一个相当愚蠢的问题,但是为什么在C或C++中定义一个for循环时,通常使用int而不是unsigned int

for(int i;i<arraySize;i++){}
for(unsigned int i;i<arraySize;i++){}

我认识到在执行数组索引以外的操作时使用int的好处,以及在使用C++容器时使用迭代器的好处.只是因为在数组中循环时并不重要吗?或者我应该避免使用所有的类型,而使用不同的类型,比如size_t

推荐答案

这是一个更普遍的现象,通常人们没有为他们的整数使用正确的类型.现代C语言具有比原始整数类型更可取的语义typedeff.例如,所有"大小"的东西都应该只打成size_t.如果系统地为应用程序变量使用语义类型,使用这些类型的循环变量也会容易得多.

我也看到了一些很难发现的bug,它们来自于使用int个左右.突然在大型矩阵和类似的东西上崩溃的代码.只要用正确的类型正确编码就可以避免这种情况.

C++相关问答推荐

有什么方法可以检测SunOS上的SparcWorks吗?

rSP堆栈指针在返回函数调用的值时有任何用途吗?

有效地计算由一组点构成的等边三角形和等腰三角形的数量

C指针地址和转换

为什么GCC在每次循环迭代时都会生成一个数组的mov&S使用[]访问数组?(-03,x86)

拥有3x3二维数组并访问数组[1][3]等同于数组[2][0]?

如何创建一个C程序来存储5种动物的名字,并在用户 Select 其中任何一种动物时打印内存地址?

我在这里正确地解释了C操作顺序吗?

将uintptr_t添加到指针是否对称?

GDB输出ARM助记符

防止C++中递归函数使用堆栈内存

在句子中转换单词的问题

Zlib:解压缩大文件导致";无效代码长度设置";错误

运行时错误:在索引数组时加载类型为';char';`的空指针

分配给静态变量和动态变量的位置之间有区别吗?

Tcl_GetDoubleFromObj在列表的迭代中是一个缺点

C/C++编译器可以在编译过程中通过按引用传递来优化按值传递吗?

为什么INT_MIN是在c语言的头文件limits.h中定义的(-INT_MAX-1)而不是直接使用-2147483648

与 C 相比,C++ 中无副作用的无限循环的好处是 UB?

返回指向函数内声明的复合文字的指针是否安全,还是应该使用 malloc?