由于复制省略,通常首选按值传递对象,只要保留内部副本即可。以下情况怎么办:
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?它依赖于内联吗?