コピーの省略のため、内部コピーが保持される限り、通常はオブジェクトを値で渡すことが推奨されます。次の状況はどうでしょうか。
struct A
{
A(int x, int y) : x(x), y(y) {}
int x, y;
};
struct B
{
B(A a) : a(a) {} // 1
B(const A& a) : a(a) {} // 2
A a;
};
struct C : A
{
C(A a) : A(a) {} // 3
C(const A& a) : A(a) {} // 4
};
struct D : B, C
{
D(A a) : B(a), C(a) {} // 5
D(const A& a) : B(a), C(a) {} // 6
};
連鎖コピーは引き続き省略されますか、つまり、1、3、および 5 が望ましいですか? それとも2、4、6?インライン化に依存しますか?