2016-03-23 18 views
0

Bir A sınıfıneden C++ aşağıdaki durumda bir kurucu oluşturur? Yaparsam

struct A{ 
    A(){} 

    A(int x): d(x) {} 

    A(const A& a): d(a.d) { 
     std::cout << "copy construction" << std::endl; 
    } 

    A(A&& a): d(a.d){ 
     std::cout << "move construction" << std::endl; 
    } 

    A& operator=(const A& a){ 
     std::cout << "copy assignment" << std::endl; 
     d = a.d; 
     return *this; 
    } 

    A& operator=(A&& a){ 
     std::cout << "move assignment" << std::endl; 
     d = a.d; 
     return *this; 
    } 

    int d; 
}; 

ve fonksiyon fonk

A func(){ 
    return A(3); 
} 

sahip bu

A x; 
x = func(); 

çıkış beklendiği gibi "hareket ataması" ama inşa eğer Bunun gibi bir

A x = func(); 

o zaman C++ kendi taşıma kurucusunu oluşturur ve tanımlı olanı kullanmayı reddederse hiçbir şey yazdırılmaz.

Ben gerçekten bunu anlamak istiyorum görsel stüdyo 14

kullanıyorum.

Açıklamalarınız için teşekkür ederiz.

cevap

4

Yapıcı çağrısı seçilir.

  • gcc ile, -fno-elide-constructors ile devre dışı bırakabilirsiniz.
  • msvc eşdeğer bir seçeneğe sahip değil.
+0

Güzel ve basit. – erip

+0

Birleştirilmiş olarak mı seçildi? Veya derleyici optimizasyonunun bir parçası olarak tamamen mi atılıyor? – CinCout

+0

hm tamam Bu davranış hakkında bilmiyordum – bakkaa

İlgili konular