2016-03-24 7 views
-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); 
} 
+0

この本では説明しませんでしたか? (ここでは本が間違っていることに注意する価値がある) –

+1

RVO(戻り値の最適化)https://en.wikipedia.org/wiki/Return_value_optimization – user3282085

+1

についてはあまり言及していない可能性があります。 「無効」には障害があります。 – user3282085

答えて

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つのコールを表示します。

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

おかげさまで、本では説明なしで答えを出したばかりです。 –

関連する問題