Shi*_*bli 1 c++ for-loop unsigned-integer
下面有两个循环.第一个效果很好,而第二个是无限循环.为什么?
for (unsigned int i=0; i<3; ++i)
{
std::cout << "i= " << i << std::endl; // this gives proper result
}
for (unsigned int i=3; i>=0; --i)
{
std::cout << "i= " << i << std::endl; // infinite loop
}
Run Code Online (Sandbox Code Playgroud)
Car*_*rum 12
一个unsigned int永远不会小于0.这就是使它无符号的原因.如果你打开一些警告标志,你的编译器应该告诉你关于你的问题: i >= 0是总是正确的一个unsigned值.
例如,Clang根本不需要特殊标志来警告:
example.cpp:5:29: warning: comparison of unsigned expression >= 0 is always true
[-Wtautological-compare]
for (unsigned int i=3; i>=0; --i)
~^ ~
1 warning generated.
Run Code Online (Sandbox Code Playgroud)
GCC要求-Wextra:
example.cpp: In function ‘int main()’:
example.cpp:5: warning: comparison of unsigned expression >= 0 is always true
Run Code Online (Sandbox Code Playgroud)