#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());
}
После компиляции сКопировать Элизия Непонимание
г ++ Copy.cpp -std = C++ 11 -fno-Elide-конструкторы
выход:
Def Constr
Копирование Constr
Copy Constr
И мои вопросы: почему 2 Copy Constr? Я думал, что нужна только 1 копия.
Возможно, у меня есть предположение, что func1() выбрасывает временный объект, и этот темподобный объект нужно скопировать в другую область памяти и из этого региона снова сделать копию для параметра func2(), но это неопределенно для меня ,
Не могли бы вы объяснить это подробно, пожалуйста?
Интересно, как результат будет отличаться, если func2 принимает константу ссылки. –