我有两个片段:
while (indent-- > 0)
{
out << " ";
}
Run Code Online (Sandbox Code Playgroud)
while (indent > 0)
{
indent -= 1;
out << " ";
}
Run Code Online (Sandbox Code Playgroud)
据我所知,第一个片段中没有任何未定义的行为(参见此处).
我的问题是:这两个片段是否相同?
我不太确定,因为-=运算符的优先级高于比较运算符,因此应该首先在第一个代码段中执行.然而,第二个片段仅在比较后执行此操作.
它们将循环体运行相同的次数,但它们不一样.
第一个将递减indent一个额外的时间,留indent在-1,因为--运营商将运行条件是否成功或失败.
第二个会离开indent的0.这是一个完整的工作示例:
#include <iostream>
int main()
{
int indent = 3;
while (indent-- > 0)
{
std::cout << "First "; // Prints three times
}
std::cout << indent << std::endl; // Prints -1
indent = 3;
while (indent > 0)
{
indent -= 1;
std::cout << "Second "; // Prints three times
}
std::cout << indent << std::endl; // Prints 0
}
// Output:
// First First First -1
// Second Second Second 0
Run Code Online (Sandbox Code Playgroud)