C++ for 循环结构

标签 c++

希望这不是一个蹩脚的问题,但我不得不问这个 :)

当我用 C++ 编程并使用 for 循环时,我给出的参数是

for(int i = 0; i< something; i++)

这是正确的前进方式但是..这给了我这样的编译警告:

1>c:\main.cpp(185): warning C4018: '<' : signed/unsigned mismatch 

现在翻书看网上大部分for循环的例子都是这种结构。

我总是忽略警告,因为我的程序总是能正常工作并做它们应该做的事情,直到我对这个警告感兴趣并做了一个小研究....通过复制这个 Waring 和谷歌它发现它更好如果我使用这种结构来避免警告:

for(vector<int>::size_type i= 0; i < something; i++ )

现在我的问题是为什么......如果初始结构有效并且在许多书籍和在线资源中都有描述和记录。

还有什么好处,或者在技术上有什么显着差异......?

我为什么要用这个

for(vector<int>::size_type i= 0; i < something; i++ )

除了摆脱警告......?

最佳答案

不要忽略警告。他们想告诉你一些事情。

我怀疑something未签名。

如果你有

unsigned int something = 0;
something--;  // Now something is a really large positive integer, not -1

如果您忽略警告,并且您没有将编译器设置为将警告视为错误,那么这将编译正常,但您不会得到您期望的结果。

您可能会看到 vector<int>::size_type是一个 unsigned int如果警告消失。

关于C++ for 循环结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15752911/

相关文章:

c++ - 无法将空的初始值设定项分配给 unique_ptrs 的 vector

c++ - 关于波特词干算法的困惑

c++ - torch C++ : Getting the value of a int tensor by using *. 数据<int>()

c# - 如何知道从 C++ dll 传递到 C# 的数组的大小

c++ - C++ 中易于使用的正则表达式支持?

c++ - 当应用程序执行大量 printf 时,如何将终端的最后一行设置为固定输入?

c++ - 虚拟模板?

c++ - 堆栈/队列中的内存泄漏 C++

c++ - 关于google-nacl的非常简单的问题

c++ - 解压缩元组列表