簡體   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