classW{public:W(){
cout<<"W()"<< endl;}W(const W& w){
cout<<"W(const W& w)"<< endl;}
W&operator=(const W& w){
cout<<"W& operator=(const W& w)"<< endl;return*this;}~W(){
cout<<"~W()"<< endl;}};voidf1(W w){}voidf2(const W& w){}
W f3(){
W ret;return ret;}
W f(W u){
W v(u);
W w = v;return w;}voidFunc1(){
W x;
W y =f(x);//1次构造,4次拷贝构造(返回时经过优化,w直接拷贝构造给y【在函数 Func1()栈帧销毁之前】)}voidFunc2(){
W x;
W y =f(f(x));//1次构造,7次拷贝构造(优化之后); }intmain(){
W w1;f1(w1);f2(w1);f1(W());//传的是 匿名对象: 构造+拷贝构造——优化成:直接构造//结论:连续一个表达式步骤中,连续构造一般都会优化----合二为一f3();// 1次构造 + 1次拷贝构造
W w3 =f3();// 本来:1次构造 + 2次拷贝构造 —— 优化成:1次构造 + 1次拷贝构造//原来是:ret拷贝构造给 tmp, tmp再拷贝构造给w3;现在经过编译器优化之为: ret直接拷贝构造给w3(在函数f3()的栈帧尚未销毁之前,ret直接拷贝构造给w3) ;//Func1();Func2();return0;}