2015-11-05 140 views
5

所以我有一個關於do/while循環的一般問題。我正在學習C++,我知道,你可以寫這樣的事情:做while循環與cout語句

do{ 
.... 
} while(a<10 && cout<<"message"); 

的一點是,我知道這是可能在C++中,但我們真的做到這一點?我的意思是,「cout」的東西裏面有那麼?

+1

只因爲你可以不意味着你應該,這是一個很好的例子!將'cout'放在循環體中更有意義。 – Sean

回答

3

事實是有些人這樣做(即運行功能作爲條件評估的一部分)。它在shell腳本中是有意義的,但如果你不使用shell腳本,有時不清楚某些函數的返回值是什麼。我無法告訴你什麼是「消息」,但我確實知道如果你在循環體內寫它,它會做我想要的,如果我不願意,它會'拋棄'返回值不會使用它。爲了寫出更清晰的代碼,其他人包括你的未來 - 我可以理解,我只會評估顯然返回真/假的條件,而不是「0 /不爲0」或「0/1」,這可能會有所不同不同的語言。底線是,讓編譯器爲你提高效率,爲其他人編寫代碼,而不是爲編譯器編寫代碼。

7

while循環相當於

do { 
    ... 
    cout << "message"; 
while(a < 10 && cout); 

因爲cout << ...再次返回cout。 然後,問題是,這是什麼意思寫之類的語句

while(cout); 

if (cout) ... 

cout對象有哪些,這裏使用的conversion to boolean。它的實現是檢查!fail(),所以

if (cout) ... 

相當於

if (!cout.fail()) ... 

do { ... } 
while(cout); 

相當於

do { ... } 
while(!cout.fail()); 

最後,如果數據流爲failed to produce output,則返回true。

+1

您的「等效」代碼將會輸出比原始信息多一個「」信息「。 – molbdnilo

+0

@molbdnilo可能取決於循環內的'a'發生了什麼,我們不知道。無論如何,這裏並不是真正的相關問題,因爲我的意思是教學,但是,它們並不完全等同。 – MicroVirus

0

如果你想後進行輸出測試條件,你需要要麼做,或添加內循環的另一個條件測試和維護他們兩個,這是一個錯誤等待發生。

do { 
    if (a < 10) 
     cout << "message"; 
} while (a < 10); 

這是罕見的在任何情況下看到cout <<本身不過,因爲你通常可以假設它會成功,除非你的機器是着火了。

在另一方面的萃取操作者,>>,通常的條件內所屬;

while (cin >> x) 

是慣用的C++。