C ++ for循环奇怪的行为

时间:2015-05-23 07:23:42

标签: c++ loops for-loop

我相信下面的两个循环是相同的,任何人都知道为什么它们在| s1 |中的工作方式不同> | S2 |

string s1 = "abcd";
string s2 = "abc";

int s1len = s1.length()
int s2len = s2.length()

for (int i = 0; i <= s2len - s1len; i++) {
    // it will never calls (as expected, since 3 - 4 = -1)
}

for (int i = 0; i <= s2.length() - s1.length(); i++) {
    // it calls once (which is strange)
}

1 个答案:

答案 0 :(得分:5)

std::string::length()返回无符号整数类型。无符号的intergal类型遵循模运算,这样-1映射到该类型的larges值。这意味着第二个循环中的减法会产生一个非常大的数而不是一个负数。

你可以尝试这个来自己解决这个问题:

std::cout << s2.length() - s1.length() << std::endl;