Bu program içinC++ Kurucu, zamansal ve kopya semantiği kopyalayın
#include <iostream>
using std::cout;
struct C
{
C() { cout << "Default C called!\n"; }
C(const C &rhs) { cout << "CC called!\n"; }
};
const C f()
{
cout << "Entered f()!\n";
return C();
}
int main()
{
C a = f();
C b = a;
return 0;
}
elde ettiğim çıktı:
Entered f()!
Default C called!
CC called!
f()
değere dönüldüğü için geçici olarak geri dönmelidir. Xzx38 T a(x);
olduğu gibi, a
yapımı için kopya kurucusunu, argümanı olarak geçici olarak geçmesiyle değil mi?
Ben GCC kullanın ve '-fno elide-constructors' ile kaput altında neler olduğunu tam olarak gösterdi! Bazen bu optimizasyonlar bir öğrenciyi çok karıştırıyor :) Ancak, varsayılan olarak AÇIK olmaları gerektiğine katılıyorum, çünkü yine de bilgisiz bir kişinin yapısı varsayılan olarak optimize edilecektir. – legends2k
@ legends2k: RVO, kullanıcıların kaprislerine bırakılmayacak kadar kullanışlıdır.Dahası, bu standardın bir optimizasyona izin verdiği çok az örnekten biridir. Bu, neden bırakıldığını yeniden canlandırıyor. Ancak, bunun genel olarak diğer optimizasyonlar için geçerli olmadığını unutmayın. – dirkgently
Anlaştık, gelinen nokta. Wiki bağlantısı için – legends2k