【发布时间】:2020-08-21 14:15:03
【问题描述】:
所以我不知道实际上是不是 size() 函数导致了这种情况,但每当我运行这段代码时,我都希望它无限循环,但事实并非如此。我正在使用 c++ 和 Visual Studio。
string name = “Devin”;
for(int i = 4; i < name.size(); i—-)
{
printf(“%c”, name[i]);
}
【问题讨论】:
-
请注意,您正在比较有符号和无符号整数。
-
这段代码不会无限循环,因为它会因为非标准引号和缺少分号而导致编译错误。
-
name.size()返回无符号类型。在评估i < name.size()时,i被提升为该类型。当i变为负数时,转换进行模运算,因此将-1转换为无符号类型的结果是无符号类型可以表示的最大值。该值永远不会小于name.size()可以返回的值,因此当i达到-1的值(即第6 次迭代)时循环将停止。 -
@Peter 您的评论不适合作为评论。它应该是一个答案:)
-
@Peter 谢谢!这是有道理的
标签: c++ size infinite-loop