クラスが次のように定義されているとしましょう
class A {
//.....
};
そして今、私は2つのオブジェクトを作成しています
A a,b;
どのような順序a
でb
作成されますか? 標準で定義されていますか?
クラスが次のように定義されているとしましょう
class A {
//.....
};
そして今、私は2つのオブジェクトを作成しています
A a,b;
どのような順序a
でb
作成されますか? 標準で定義されていますか?
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;
規格:
宣言子 [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