C ++ for循环奇怪的行为

用户名

我相信下面的两个循环是相同的,任何人都知道为什么在| 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)
}
juanchopanza

std::string::length()返回一个无符号整数类型。无符号整数类型遵循模块化算法,因此-1映射到该类型的bigs值。这意味着第二个循环中的减法会产生一个很大的数字,而不是一个负数。

您本可以尝试通过以下方式自己找出来的:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章