-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