这两个意思不一样,首先得到值然后递增?
for ( ; *s == *t; s++, t++)
for ( ; *s++ == *t++;)
答案 0 :(得分:6)
如果for循环包含引用s
和t
的内容,则为“否”。第一个循环可以重写为
while (true)
{
bool are_equal = *s == *t;
if (!are_equal) break;
// Perform stuff inside the for loop
// Note that 's' and 't' are not increased yet in here.
++ s;
++ t;
}
第二个循环可以重写为
while (true)
{
bool are_equal = *s == *t;
++ s;
++ t;
if (!are_equal) break;
// Perform stuff inside the for loop
// Note that 's' and 't' have been increased in here.
}
答案 1 :(得分:2)
它们都在增量之前进行比较,但是如果循环体不是空的,则第一个版本将增加s和t 在主体之后,而第二个版本将增加它们之前> em>身体。
答案 2 :(得分:2)
for ( ; *s == *t; s++, t++)
相当于:
while (*s == *t)
{
...
s++;
t++
}
,同时:
for ( ; *s++ == *t++;)
相当于:
while (*s++ == *t++)
{
...
}
重要的区别在于,在第一种情况下,s和t在循环体的 end 处递增,而在第一种情况下,它们在 start 处递增循环体。
另一个区别是s和t在第二个循环中比在第一个循环中增加一个tiem。在第一种情况下,s和t甚至可能根本没有增加(如果s[0] != t[0]
),而在第二种情况下,它们总是至少增加一次(即使s[0] != t[0]
)。
答案 3 :(得分:1)
循环将运行相同的次数,但循环体中存在差异:第一个循环将看到原始s
和t
,而第二个循环将看到原始{{1}}和{{1}}看他们后增量。