#include <iostream>
using namespace std;
struct A {
A() { cout<<"构造"<<endl; }
A(int temp):i(temp) { cout<<temp<<"构造"<<endl; }
A(const A &a):i(a.i + 1) { cout<<i<<"拷贝构造"<<endl; }
~A() { cout<<i<<"析构"<<endl;; }
int i;
};
int main()
{
A a = A(16);
return 0;
}
这段代码输出为什么是:
16构造
16析构
而不是:
16构造
17拷贝构造
16析构
17析构
A a = A(16);
不应该是构造了一个临时对象,然后再构造一个 a
吗?应该出现两次构造输出才对,为什么只有一次构造呢?
如果右侧本身是右值(临时对象),这种拷贝赋值或者拷贝构造会被优化。
这种优化依赖于编译器的实现,有的编译器就没有。