62

クラスが次のように定義されているとしましょう

class A {
//.....
};

そして今、私は2つのオブジェクトを作成しています

A a,b;

どのような順序ab作成されますか? 標準で定義されていますか?

4

5 に答える 5

11

順番は、左から右へ、書き順です。また、これはコンマ演算子ではなく、単なる宣言子のリストです。ユーザー定義のコンマ演算子が使用されている場合、順序は実際には指定されていません。

コンマ演算子宣言子を参照してください。

于 2016-02-22T18:31:07.773 に答える
8

aが最初に作成され、次にbが作成されます。

この場合のカンマは、演算子としてではなく、セパレータとして使用されます。

たとえば、ウィキペディアから:

    /**
      *  Commas act as separators in this line, not as an operator.
      *  Results: a=1, b=2, c=3, i=0
      */
     int a=1, b=2, c=3, i=0;
于 2016-02-22T18:30:59.910 に答える
6

規格:

宣言子 [dcl.decl]:
宣言内の各 init-declarator は、それ自体が宣言内にあるかのように個別に分析されます。

例:

class A {
public:
    A(std::string const &s): name(s) 
    { 
        std::cout << "I am " << name << '\n'; 
    }
    std::string name;
};

auto main() -> int
{
    A a("a"), b("b");
}

出力:

I am a
I am b
于 2016-02-22T22:03:02.627 に答える