为什么代码中的 3<–1?

Why is 3<–1 in code?

本文关键字:lt 代码 为什么      更新时间:2023-10-16

看看下面的代码:

int start = 3;
vector<int> data;
data.push_back(0);
data.push_back(0);
for (int i=start; i<data.size()-start; i++)
    printf("In...n");

运行上面的代码时,它将无限printf("In...n");运行。尽管基于 for 循环的条件(3<-1),但它永远不应该这样做。很奇怪吧?

为了避免这种情况,您必须先计算长条件方程,例如:

… …
int end = data.size()-start;
for (int i=start; i<end; i++)
    printf("In...n");

为什么会这样?

size

() 返回一个无符号值(类型 size_t),这会导致比较右侧的表达式提升为无符号,从而使比较无符号。

所以在你认为有负数的地方没有负数,只有非常大的正数。

正如其他人所说,如果你调高警告级别,大多数编译器都会警告你这一点,而 C++ 不是一种可以在低警告级别安全使用的语言。