2017-02-08 68 views
12

Aşırı yüklenicinin, aşağıdaki kodda olduğu gibi sınıfta başka bir kurucu çağırması mümkün mü?C++ 'da bir kolaylık kurucu var mı?

class A { 
public: 
    A(std::string str) : m_str(str) {} 
    A(int i) { *this = std::move(A(std::to_string(i))); } 

    std::string m_str; 
}; 

Yukarıdaki kod çalışır, ama ben yapıcı bu çağırarak istenmeyen davranışlara yol diye korkuyorum.

Eğer bunun nedenini açıklayabilir ve daha iyi bir alternatif önerebilir misiniz?

+6

Aradığınız terim "temsilci kurucular" dir. – nwp

+1

Niçin A değil (int i): m_str (std :: to_string (i)) {} '? – CoryKramer

+2

Bu en az bir örnektir. 7 parametresini kabul eden bir kurucuya aşırı yüklenmek istiyorum, bunlardan 4 tanesi varsayılan değerlere sahip ve varsayılanları açık bir şekilde birden fazla yere yerleştirmekten kaçınmak istiyorum. – Makaronodentro

cevap

23

C++ 11 delegating constructors tanıtıldı:

class A 
    { 
    public: 
    std::string m_str; 
    A(std::string str) : m_str(str) {} // target constructor 
    A(int i) : A(std::to_string(i)) {} // delegating constructor 
    }; 
+7

Mys için buna değebilir m_str (std :: move (str)) '. – juanchopanza

+0

Hedef kurucunun temsilci kurucudan önce çağrıldığına dikkat etmek gerekir, bu nedenle, ikincisinin gövdesinde, eski çağrıldığını varsayabilirsiniz. –

İlgili konular