3

C++ での句読点の使用法、特にセミコロンの背後にあるロジックを識別しようとしています。これはこれまでの私の進歩であり、いくつかの質問があります:

  • 宣言は、タイプ、クラス、またはオブジェクトをスコープに導入します。int i;
  • 式は、演算子とオペランドのシーケンスです。a=i+1; i++;
  • ステートメントは、式または宣言です。

  • ()括弧は、式の一部をグループ化し、テストを囲みます (例: if(a==b)while(a==b)switch(myTestVal)およびfor(int i=0;i<5;i++)

  • {}中括弧は、スコープとグループ ステートメント、および配列、列挙型、構造体の初期化リストを定義しますが、なぜクラスではないのでしょうか。さらに、ブレークがどこから続行するかを知るために、switch ステートメントでその本体を囲む必要があります。

  • ,引数リストや配列初期化リストなど、リスト内の項目をカンマで区切ります。

  • :コロンは、switch ステートメントの case 部分の後などのラベルの後や、3 番目の演算子 '?' などのステートメントの部分を区切るために使用されます。

    ただし、ステートメントの部分を区切るために使用されるのでは;なく、たとえば—これはなぜですか?:forfor(i=0;i<5;i++)

  • ;セミコロンはステートメント (式と宣言) を終了し)ます。:(a==(c+b*d))

宣言全体がステートメントであり、他の多くのステートメントで構成されるため、 関数またはクラスの宣言の最後で を使用する必要が}あり}ます。;ただし、関数またはクラスの実装は宣言ではありません (関数またはクラスは既に宣言されている必要があるため)。したがって、ステートメントとしてカウントされないため、クロージング;の後にクロージングは​​ありません}

最後の奇妙な点: なぜ a の;後に a が必要なのdo...whileですか?

4

3 に答える 3

3

Commas separate items in a list, e.g. an argument or initialisation list.
はい。ただし、ばかげたことを行うためにコンマをオーバーロードすることもできることに注意してください。(そうしないでください)

Colons are used to separate parts of a statement
はい、コンマまたはセミコロンが意味をなさない場合はどこでもコロンが使用されます。それは「その他」のトークンのようなものです。ループがセパレーターとしてセミコロンを使用する理由がよくわかりませんfor(これらは式であり、ステートメントではありません)。

Braces group statements.
いいえ、スコープ{}を宣言します。、または( a は文字列であるため、 のスコープ内のメンバーにアクセスできます。)スコープは、ネストされたスイッチとネストされた...何でも明確にします。{}{}std::stringstring a; a.begin();string

switch(a) {
case 1:
case 2:
    switch(b) {
    case 3:
    case 4:
    }
case 5:
}

Semicolons terminate statements
;とを除いて、forすべて のステートメントは で終わりwhileます。ループの先頭には、forステートメントではなく式が含まれます。宣言に awhileを入れることはできません。for(それは何呼ばれていますか?)ええ。とても紛らわしいです。

However, a function or class implementation, is not a declaration
はい、いいえ。関数は定義であり、ステートメントではありません。セミコロンは必要ありません。クラス定義は技術的には変数宣言ステートメントの一部であるため、セミコロンが必要です。

int a;  //declare a as an int
class A {} a; //declare a as an A class I just made
class {} a,b,c;  //declare a,b,c as unnamed class types
int;  //int exists
class A {};  //A exists
于 2011-10-19T19:02:28.620 に答える