希望这不是一个蹩脚的问题,但我不得不问这个 :)
当我用 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/