请问,这里怎么不执行copy构造函数?
#include <iostream>
class A
{
public:
A() { std::cout << "A::A()\n"; }
A(const A&) { std::cout << "A::A(const A&)\n"; }
~A() { std::cout << "A::~A()\n"; }
};
A f(A a)
{
std::cout << "&a" << &a << std::endl;
return a;
}
int main(int argc, char *argv[])
{
A x;
A b = f(x); // 这里不执行复制构造函数?
std::cout << "&b = " << &b << std::endl;
return 0;
}
------------------------------------------------
运行结果:
A::A()
A::A(const A&)
&a0012FF60
A::A(const A&)
A::~A()
&b = 0012FF6E
A::~A()
A::~A()
------------------------------------------------
A b = f(x);
照道理,传入 x 时执行一次,return 时执行一次,初始化 b 又执行一次,应该是三次才对啊?
可是它初始化 b 的时候不执行了。
是不是用临时的 object 来初始化就不会执行的?