所以我有一個關於do
/while
循環的一般問題。我正在學習C++,我知道,你可以寫這樣的事情:做while循環與cout語句
do{
....
} while(a<10 && cout<<"message");
的一點是,我知道這是可能在C++中,但我們真的做到這一點?我的意思是,「cout
」的東西裏面有那麼?
所以我有一個關於do
/while
循環的一般問題。我正在學習C++,我知道,你可以寫這樣的事情:做while循環與cout語句
do{
....
} while(a<10 && cout<<"message");
的一點是,我知道這是可能在C++中,但我們真的做到這一點?我的意思是,「cout
」的東西裏面有那麼?
事實是有些人這樣做(即運行功能作爲條件評估的一部分)。它在shell腳本中是有意義的,但如果你不使用shell腳本,有時不清楚某些函數的返回值是什麼。我無法告訴你什麼是「消息」,但我確實知道如果你在循環體內寫它,它會做我想要的,如果我不願意,它會'拋棄'返回值不會使用它。爲了寫出更清晰的代碼,其他人包括你的未來 - 我可以理解,我只會評估顯然返回真/假的條件,而不是「0 /不爲0」或「0/1」,這可能會有所不同不同的語言。底線是,讓編譯器爲你提高效率,爲其他人編寫代碼,而不是爲編譯器編寫代碼。
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。
您的「等效」代碼將會輸出比原始信息多一個「」信息「。 – molbdnilo
@molbdnilo可能取決於循環內的'a'發生了什麼,我們不知道。無論如何,這裏並不是真正的相關問題,因爲我的意思是教學,但是,它們並不完全等同。 – MicroVirus
如果你想後進行輸出測試條件,你需要要麼做,或添加內循環的另一個條件測試和維護他們兩個,這是一個錯誤等待發生。
do {
if (a < 10)
cout << "message";
} while (a < 10);
這是罕見的在任何情況下看到cout <<
本身不過,因爲你通常可以假設它會成功,除非你的機器是着火了。
在另一方面的萃取操作者,>>
,通常的條件內所屬;
while (cin >> x)
是慣用的C++。
只因爲你可以不意味着你應該,這是一個很好的例子!將'cout'放在循環體中更有意義。 – Sean