string str="";
for(int j=0;j<str.size()-1;++j)
{
char t=str[j];
cout<<"here";
}
string str="";
int s=str.size();
--s;
for(int j=0;j<s;++j)
{
char t=str[j];
cout<<"here";
}
1。为什么#1&#34; for loop&#34;不会以#2结束?这些有什么区别?
答案 0 :(得分:0)
str.size返回一个无符号数。应该有一个警告,但是0 - 1作为无符号数将改为最大数。这会导致你的第一个循环永远运行(同样,应该有关于比较签名的无符号的警告),或者更可能的是崩溃,因为你正在访问字符串边界之外的东西。
在你的第二个例子中,你将无符号零转换为有符号零(int已签名),然后递减它,因此它的行为与你期望的一样。
一般情况下,在启用警告的情况下编译代码(强烈建议我在第一个示例中发出两个警告,无符号vs签名以及不太重要的t未使用)。