在下面调用复制ctor的次数是多少?

时间:2016-03-24 16:59:10

标签: c++ copy-constructor

在我读过这个问题的书中,答案是 8次

  • 如何?
  • 请解释一下。:)
Temp fun1(Temp x)
{
Temp y(x);
Temp z=y;
return z;
}
void main()
{
Temp a;
Temp b=fun1(a);
Temp c=fun1(b);
}

1 个答案:

答案 0 :(得分:1)

#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个clang的调用。

786_ g++ -std=c++11 test.cpp
787_ ./a.out
Temp(Temp&)
Temp(Temp&)
Temp(Temp&)
Temp(Temp&)
Temp(Temp&)
Temp(Temp&)