while循环中的变量声明

tMC*_*tMC 1 c++

using namespace std;

class Counter
{
    int val;

public:
    Counter() { val = 0; }
    int Next() { return ++val; }
};

int main()
{
    Counter counter;

    while (int c = counter.Next() <= 5)
    {
        cout << c << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

运行时,程序打印15 次。因此,.Next()当 while 循环终止时返回预期值。

为什么remain的值c设置为初始值?

我对 C++非常陌生(这是我编写的第一个 C++ 程序),我只是想了解 的返回值如何.Next()按预期进行评估,但未在c变量中捕获。

lur*_*ker 5

运算<=符的优先级高于运算符=

所以,与

while (int c = counter.Next() <= 5)
Run Code Online (Sandbox Code Playgroud)

编译器将其解释为:

while (int c = (counter.Next() <= 5))
Run Code Online (Sandbox Code Playgroud)

它将逻辑表达式的结果赋给c,当表达式成立时,该结果将为 1。

试试这个:

int c;

while ((c = counter.Next()) <= 5)
Run Code Online (Sandbox Code Playgroud)