繁体   English   中英

while循环中的变量声明

[英]variable declaration in while loop

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;
    }
}

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

为什么c的值仍然设置为初始值?

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

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

所以,与

while (int c = counter.Next() <= 5)

编译器将其解释为:

while (int c = (counter.Next() <= 5))

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

试试这个:

int c;

while ((c = counter.Next()) <= 5)

您可以为Counter添加一个转换运算符,并且无需声明额外的变量。

class Counter {
    int val_;
public:
    Counter() : val_(0) {}
    int Next() { return ++val_; }
    operator int () const { return val_; }
};

//...
    Counter counter;
    while (counter.Next() <= 5) {
        cout << counter << endl;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM