Varsayılan oluşturucu yerleşik türleri başlatılamıyor
Varsayılan oluşturucu (derleyici tarafından oluşturulan)-dahili-tip başlatılamıyor?
CEVAP
Bir sınıf örtülü olarak tanımlanan (derleyici tarafından) varsayılan yapıcı dahili tip üyeleri başlatmıyor.
Ancak, bazı durumlarda bir sınıf örneğinin başlatılması diğer yöntemlerle yapılabilir unutmayın. Kurucu tarafından varsayılan kurucu tarafından, ne de hiç değil.
Örneğin, C
sözdizimi sınıf C()
her zaman varsayılan kurucuyu çağıran yaygın yanlış bir inanç var. Aslında, C()
çok gerçekleştirir sözdizimi denirdeğer-başlatmasınıf örneği. Sadece eğer değilse, varsayılan kurucusunu çağırmak olacaktırkullanıcı ilan etti. (C 03. Eğer sınıf non-POD ise sadece 98 -) C. Eğer sınıf yok kullanıcı-ilan yapıcı, C()
olmaz Ara derleyici tarafından sağlanan varsayılan yapıcı, daha ziyade yapacak özel bir başlatma o değil dahil kurucu C
. Bunun yerine, doğrudan-başlatma değeri olacaktır sınıfın her üyesi. Yerleşik türleri için sıfır başlatma sonuçlanır.
Eğer sınıf kullanıcı ilan var mı yok mu, örneğin, kurucu
class C {
int x;
};
sonra derleyici örtük olarak sağlayacaktır. Derleyici tarafından sağlanan yapıcı bir şey, C::x
başlatmak değil yani
C c; // Compiler-provided default constructor is used
// Here `c.x` contains garbage
Yine de, aşağıdaki başlatmaları()
açık başlatıcı kullandıkları için sıfır-başlatma x
C c = C(); // Does not use default constructor for `C()` part
// Uses value-initialization feature instead
assert(c.x == 0);
C *pc = new C(); // Does not use default constructor for `C()` part
// Uses value-initialization feature instead
assert(pc->x == 0);
()
başlatıcı davranış ve C 03, ancak bu durumda değil C 98 arasında bazı bakımlardan farklıdır. C
aynı olacak yukarıdaki sınıf için: ()
başlatıcı C::x
sıfır başlatma gerçekleştirir.
Yapıcı katılımı olmadan gerçekleştirilen başlatma başka bir örnek, tabii ki, toplu başlatma
C c = {}; // Does not use any `C` constructors at all. Same as C c{}; in C 11.
assert(c.x == 0);
C d{}; // C 11 style aggregate initialization.
assert(d.x == 0);
Varsayılan alan başlatma satır içi olu...
Java hata: Örtülü süper oluşturucu var...
Android e-Posta gönderme varsayılan/ku...
&; Varsayılan"&; bir dersten sonra " d...
Varsayılan Bahar 3.1 profili...