2009-07-13 11 views
28

Geçenlerde üç kurucular vardı bazı garip görünümlü sınıfa geldi: Bu gerçekten benim için bir anlam ifade etmiyorÇok değişkenli kurucuda açık anahtar kelime var mı?

class Class 
{ 
    public: 
     explicit Class(int); 

     Class(AnotherClass); 

     explicit Class(YetAnotherClass, AnotherClass); 

    // ... 
} 

- Ben açık anahtar bir yabancı türünden derleyici seçilen inşaat korumaktır düşündüm.

Bu izin verilir mi? Eğer öyleyse, bu ne anlama geliyor?

+0

Bu kopya daha fazla/daha iyi yanıt aldı: [2 veya daha fazla (varsayılan olmayan) parametresi olan varsayılan kurucular ve yapıcılar için açık neden izin verilir?] (Https://stackoverflow.com/questions/4467142/why-is- açık-izin-için-varsayılan-constructors-ve-constructors-with-2 veya daha fazlası) –

cevap

46

C++ 11'de çok parametreli kurucular, dolaylı olarak küme başlatmaya dönüştürülebilir. Bununla birlikte, C++ 11 explicit'dan önce, yalnızca tek değişkenli yapıcılara uygulanır. Çok argümanlı kurucular için göz ardı edildi ve had no effect.

+1

Açıklama için teşekkürler. GCC'nin böyle bir durum için uyarılacağını anladım. – LiraNuna

+26

Uyarı ile çok değişkenli parametrelerden birinin dışında varsayılan değerler varsa o zaman bu etki – zebrabox

+20

olacaktır. Bu, C++ 11 ile değişti. Şimdi çok parametreli kurucular, örtük olarak brace başlatmaya dönüştürülebilir. – Shane