这两个while循环是等效的吗?

Arn*_*tta 1 c++ loops

我有两个片段:

  while (indent-- > 0)
  {
    out << "  ";
  }
Run Code Online (Sandbox Code Playgroud)
  while (indent > 0)
  {
    indent -= 1;
    out << "  ";
  }
Run Code Online (Sandbox Code Playgroud)

据我所知,第一个片段中没有任何未定义的行为(参见此处).

我的问题是:这两个片段是否相同?

我不太确定,因为-=运算符的优先级高于比较运算符,因此应该首先在第一个代码段中执行.然而,第二个片段仅在比较后执行此操作.

Ric*_*dle 5

它们将循环体运行相同的次数,但它们不一样.

第一个将递减indent一个额外的时间,留indent-1,因为--运营商将运行条件是否成功或失败.

第二个会离开indent0.这是一个完整的工作示例:

#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)