3

Bjarne Stroustrup's Programming : Principles and Practice Using C++ を読んでいます

hello_world第 2 章のドリル セクションでは、プログラムのコンパイル時に入力エラーを確認するさまざまな方法について説明しています。

#include "std_lib_facilities.h"

int main()  //C++ programs start by executing the function main
{
    cout << "Hello, World!\n",  // output "Hello, World!"
    keep_window_open();         // wait for a character to be entered
    return 0;
}

特に、このセクションでは次のことを尋ねます。

プログラムで入力した可能性のあるエラーを少なくとも 5 つ考えてください (たとえば、 を忘れる keep_window_open()、単語を入力するときに Caps Lock キーを押したままにする、セミコロンの代わりにコンマを入力するなど)。それらのバージョンをコンパイルして実行します。

行についてcoutは、セミコロンの代わりにコンマがあることがわかります。
これはコンパイルして実行します(私にとって)。ステートメントが終了したことを前提としていますか (javascript の質問: Why use semicolon?のように)。

コンパイラを試してみるとkeep_terminal_open();、セミコロンの除外が通知されるためです。

4

4 に答える 4

11

C ++のコンマ演算子は、次のように使用できます。

a, b;

これは、「実行しa、結果を無視してから実行する」という意味ですb。次のようにチェーンできます。

a, b, c, (etc.), n;

一般的に、これは良いスタイルとは見なされません。混乱を招くため、実際にはコンマ演算子が使用されることはめったにありません。それが合法的に役立つ数回は、通常、forループを思い付きます。

for (int a = 0, b = 0; a < 100; a++, b++) {
    /* ... */
}

ここでは、forループの最後の部分でコンマ演算子を使用して、「との両方aをインクリメントする」ことを意味しますb

質問に答えるには、はい、の後にセミコロンを付ける必要がありますcout。コンマ演算子を使用することも技術的には機能しますが、エレガントではなく、人々を混乱させる可能性があります。

于 2011-01-13T01:30:17.513 に答える
3

ステートメントはセミコロンで終了する必要があります。

std::cout << "Hi world";

ただし、とりわけ、式はA,B,C、 where ABおよびの形式を取ることができC、その後C結果になります。

次の式を入れると:

std::cout << "Hi world", 3

ステートメントに:

std::cout << "Hi world", 3;

ステートメントの最後にセミコロンは必要なかったようです。実際に起こったことは、「ステートメント」が実際に何であるかを誤解したことです。

これが役に立ったことを願っています。

于 2011-01-13T01:33:26.957 に答える
1

はい、1つで終了する必要があります

于 2011-01-13T01:27:52.837 に答える
0

状況の他のいくつかの側面を説明するだけです...

コンマ演算子は、どの C++ 演算子よりも優先順位が低いため、たとえば、コード...

#include <iostream>

int main()
{
    std::cout << 5, 2;    // outputs 5, complete line/statement evaluates to 2
    std::cout << '\n';
    std::cout << (5, 2);  // outputs 2 (5 is discarded), line evaluates to std::cout
    std::cout << '\n';
}

...コメントAの行に「5」、Bから「2」を出力します。

この優先順位のため、 が返された場合 、それをストリーミングする方法がわからず、コンパイラ エラーが発生することに注意してください...keep_window_open()voidstd::cout

std::cout << keep_window_open(); // can't compile if function return type is void

...しかし、あなたが調査している使用法ではまだ安全ではありません...

std::cout << "Hello, World!\n",  // can compile because seen as two comma-separated
keep_window_open();              // subexpressions, so std::cout doesn't try to stream
                                 // a return value from keep_window_open().
于 2011-01-13T05:45:17.030 に答える