-8
在這本書中,我讀到這個問題,答案是8次。複製ctor在下面被調用了多少次?
- 怎麼樣?
- 請解釋一下。 :)
Temp fun1(Temp x)
{
Temp y(x);
Temp z=y;
return z;
}
void main()
{
Temp a;
Temp b=fun1(a);
Temp c=fun1(b);
}
在這本書中,我讀到這個問題,答案是8次。複製ctor在下面被調用了多少次?
Temp fun1(Temp x)
{
Temp y(x);
Temp z=y;
return z;
}
void main()
{
Temp a;
Temp b=fun1(a);
Temp c=fun1(b);
}
#include <iostream>
class Temp
{
public:
int a;
Temp() : a(0) {}
Temp(const Temp &ref) : a(ref.a)
{
std::cout << "Temp(Temp&)" << std::endl;
}
};
Temp fun1(Temp x)
{
Temp y(x);
Temp z=y;
return z;
}
int main(int ac, char**av)
{
Temp a;
Temp b=fun1(a);
Temp c=fun1(b);
}
顯示鐺6次通話。
786_ g++ -std=c++11 test.cpp
787_ ./a.out
Temp(Temp&)
Temp(Temp&)
Temp(Temp&)
Temp(Temp&)
Temp(Temp&)
Temp(Temp&)
謝謝,在書中,他們剛剛給出了答案,沒有任何解釋。 –
這本書沒有解釋它嗎? (這裏值得注意的是,這本書是錯誤的。) –
它可能沒有提到RVO(返回值優化)https://en.wikipedia.org/wiki/Return_value_optimization – user3282085
此外,如果書是推薦主要功能返回'無效'它有缺點。 – user3282085