2015-11-05 8 views
5

したがって、do/whileループに関する一般的な質問があります。私はC++を学んだし、私はあなたがそのような何かを書くことができることを知っている:whileループをcout文で実行する

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

点は、私はこれは、C++で可能です知っているが、私たちは本当にそれを行うかということ、ありますか?つまり、「cout」のものがの中にあるのはですか?

+1

あなたができるはずがないという理由だけで、これはその良い例です!ループの本体に 'cout'を置く方が意味があります。 – Sean

答えて

3

実際には、これを行う人がいます(つまり、条件評価の一部として関数を実行する)。シェルスクリプトでは意味がありますが、シェルスクリプトを使用していない場合、関数によっては戻り値が何であるかがわからないことがあります。私はあなたに何かを伝えることができません< < "メッセージ"が手戻りますが、あなたがループ本体の中に書き込むと、それは私が望むことを行い、ドンすれば戻り値を捨てるでしょうそれを使用しないでください。

あなたの将来の自己を含む他の人が理解できる、よりクリーンなコードを書くには、「0/not-0」や「0/1」ではなくtrue/falseを明示的に返す条件だけを評価します。異なる言語。

ボトムラインは、コンパイラが物事をより効率的にさせ、他の人のためにコードをコンパイルするのではなく、

7

あなたのwhileループは再び

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

cout << ...ために戻っcoutに相当します。 その後、質問がある、それはcoutオブジェクトが、ここで使用されているconversion to booleanを持って

while(cout); 

または

if (cout) ... 

のような文を書くことを意味しているものを。これは、実装が!fail()をチェックしているのです、そう

if (cout) ... 

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

do { ... } 
while(cout); 

に相当します。最後

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

、に相当します3210は、ストリームfailed to produce outputの場合にtrueを返します。

+1

あなたの "等価な"コードは、元のものよりもう1つ "メッセージ"を出力します。 – molbdnilo

+0

@molbdniloおそらく、私たちが知らないループの中で何が起こるかによって決まるでしょう。とにかく、それは私が教育的であることを意味するので、実際にここでの関連するポイントではありませんが、はい、完全に同等ではありません。 – MicroVirus

0

の出力後に出力を実行する場合は、ループ内で別の条件テストを追加して両方を維持する必要があります。

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

あなたは通常、あなたのマシンが燃えている場合を除き、それが成功すると仮定することができますように、それは、しかし、それ自体任意の条件でcout <<を見ることはまれです。

一方、抽出演算子>>は、通常、条件内に属します。

while (cin >> x) 

はイディオムC++です。