2010-01-19 17 views
8

bir yapı/sınıfın bir amacı (hiçbir kurucu vardır) bir başlatıcı listesini kullanılarak oluşturulabilir. Neden bu yapıcı yapıcı/yapı ile yapılamaz?C++: yapı içinde Oluşturucu başlatıcısı karşı listesi/sınıf

struct r { int a; }; 
struct s { int a; s() : a(0) {} }; 
r = { 1 }; // works 
s = { 1 }; // does not work 
+2

Ne sorduğunuzu gösteren bazı kodlar gönderin. –

+1

Neil, cevap bana mantıklı geldi. – Anycorn

cevap

13

Hayır, bir kurucuya sahip bir nesne artık POD (düz eski veri) olarak değerlendirilmez. Nesneler yalnızca diğer POD türlerini statik olmayan üyeler (temel türler dahil) içermelidir. Bir POD, statik işlevlere ve statik karmaşık veri üyelerine sahip olabilir.

Yaklaşan C++ standardı, POD olmayan nesnelerin parantez ile başlatılmasına izin verecek olan başlatıcı listelerini tanımlamanıza izin verecektir. Sormak demek Sorunuzun tarafından ise

0

, "Bu yapabilirim:"

struct MyGizmo 
{ 
    char things_[5]; 
    MyGizmo() : things_({'a', 'b', 'c', 'd', 'e'})(); 
}; 

... o zaman cevap hayır. C++ buna izin vermiyor.

+0

Hayır, bir dizi dizinin başlatılması, farklı türlerdeki değişkenleri içerebilen bir POD yapısının başlatılmasından farklıdır. Ayrıca, bunu ctor yapıyorsunuz, OP tanımlanmış bir ctoru olan bir nesne üzerinde başlatılmasını istedi. – Macke

+0

aslında, g ++ standart değil, bunu yapmak için bir güce sahiptir: (char [1]) {0} – Anycorn