Widget f(Widget u){
Widget v(u);
Widget w = v;
return w;
}
main(){
Widget x;
Widget y = f(f(x));
}
Widget x; // 无拷贝
首先计算f(x):
传递x到u:拷贝构造1次(u)
在f内:v(u) -> 拷贝构造1次(v)
w = v -> 拷贝构造1次(w)
return w -> 拷贝构造1次(临时对象1)
小计:4次
然后计算f(临时对象1):
传递临时对象1到u:拷贝构造1次(u)
在f内:v(u) -> 拷贝构造1次(v)
w = v -> 拷贝构造1次(w)
return w -> 拷贝构造1次(临时对象2)
小计:4次
最后,用临时对象2初始化y:拷贝构造1次(y)
总计:4+4+1 = 9次。