【发布时间】:2015-03-06 20:48:52
【问题描述】:
#include <iostream>
struct A
{
A() { std::cout << "Def Constr\n"; }
A(const A&) { std::cout << "Copy Constr\n"; }
};
A func1()
{
return A{};
}
void func2(A a) {}
int main()
{
func2(func1());
}
编译后
g++ Copy.cpp -std=c++11 -fno-elide-constructors
输出是:
定义结构
复制构造
复制构造
我的问题是:为什么是 2 Copy Consr ?我以为只需要 1 份副本。
我可能猜到 func1() 抛出了一个临时对象,并且这个临时对象需要被复制到另一个内存区域,并且必须再次从该区域复制 func2() 参数,但它对我来说是模糊的。
你能详细解释一下吗?
【问题讨论】:
-
我想知道如果func2采用const引用,结果会有什么不同。
标签: c++ c++11 copy-elision