X bar(const T& y, const T& z)
{
X xx;
...
return xx;
}
那会要求xx被“memberwise”地拷贝到编译器所产生的_result之中,如下。
// 可能转换的伪码
void bar(X& _result, const T& y, const T& z)
{
X xx;
...
_result.X::X(xx);
return ;
}
X bar(const T& y, const T& z)
{
return X(y, z);
}
这种效率会比较高,转换如下。
// 可能转换的伪码
void bar(X& _result, const T& y, const T& z)
{
_result.X::X(y, z);
return ;
}
_result被直接计算出来,而不是经由copy constructor拷贝而得!不过,这种解决方法受到某种批评,怕那些特殊用途的constructor可能会大量扩散。在这个层面上,class的设计是以效率考虑居多,而不是以“支持抽象化”为优先。