C++ 为什么这会进入无限循环?

C++ 为什么这会进入无限循环?,c++,C++,为什么这个结果会进入无限循环 在进入for循环后,我打印了I和v.size()-2的值,它们分别是0和-1。因此,循环条件必须是false。那么,这个程序首先是如何进入for循环的 #include <iostream> #include <vector> int main() { std::vector<int> v {1}; std::cout << "Size:: " << v.size(); for (

为什么这个结果会进入无限循环

在进入
for
循环后,我打印了
I
v.size()-2的值,它们分别是
0
-1
。因此,循环条件必须是
false
。那么,这个程序首先是如何进入
for
循环的

#include <iostream>
#include <vector>

int main() {
    std::vector<int> v {1};
    std::cout << "Size:: " << v.size();
    for (int i=0 ; i <= (v.size()-2) ; i++) {
        std::cout << "Hello";
    }
    return 0;
}
#包括
#包括
int main(){
std::向量v{1};

std::cout问题在于在下溢后与无符号数字进行比较

向量的大小是1。你可以将其细分为2,然后在数学上得到-1。但是,在无符号数学中,你得到的是一个非常大的数字,因此循环的持续时间比你预期的要长得多

要避免这种情况,请将减法替换为加法:

i+2 <= v.size()

i+2“打印v.size()的值-2”的确切位置在哪里?您的程序可能有未定义的行为,因为
i++
导致有符号整数溢出。编译器应该警告您有符号-无符号比较。如果没有,请找出如何增加警告。解决此类问题的正确工具是调试器。在询问之前,您应该逐行检查代码关于堆栈溢出。有关更多帮助,请阅读。至少,您应该[编辑]您的问题将包括一个重现您的问题的示例,以及您在调试器中所做的观察。@ChristianHackl:您不能将一个数字与其类型相比太大,因为操作数首先转换为公共类型。有关将负数分配给无符号整数的详细信息,请参阅: