[英]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.