2011-12-30 24 views
7

Im (derleme doesnt) böyle çalışıyor şey:Başlatıcı listesini kullanarak dizi öğeleri nasıl başlatılır?

struct mystruct { 
    somestruct arr[4]; 
    mystruct(somestruct val) : arr[0](val), arr[1](val), arr[2](val), arr[3](val) {} 
}; 

Bu nasıl c en iyi şekilde yapılır ++?

Not: Bu yöntemle yalnızca dizi elemanlarının değerini ayarlamak isteyebilirim. C++ 11 yılında

+1

olası bir kopyası [Üye başlangıç ​​listesini nasıl başlatmak için kullanabilirim?] (Http://stackoverflow.com/questions/5602030/how-can-i-use-member-initialization-list-to-initialize-it) – ildjarn

+0

+1 kurucunun gövdesindeki değerleri atamak yerine başlatıcı listesini kullanmaya çalışmak için. – Andre

+0

@Andre, "kurucunun gövdesindeki değerleri atamak" ile herhangi bir performans farkı var mı? (Mike'ın örneğinin kullandığı derleyiciye sahip olmadığım için test edemiyorum) – Rookie

cevap

6

, tüm unsurları belirlemek istiyorsanız:

mystruct(somestruct val) { 
    arr[0] = val; 
    arr[1] = val; 
    arr[2] = val; 
    arr[3] = val; 
} 
: Sadece bazı unsurları belirlemek istiyorsanız

C++ 03 yılında
mystruct(somestruct val) : arr{val,val,val,val} {} 

veya C++ 11

+1

Çok kötü, visual-C++ derleyici üzerinde çalışmıyor, ikincisini kullanıyorum, daha iyi bir yol olduğunu düşündüm. Btw, derleyici, ikincisi yukarıdaki gibi hızlı bir şekilde optimize eder mi? – Rookie

+0

Derlemek için -std = C++ 11 bayrağını kullanmanız gerekebilir. Ayarlayabileceğiniz bir çeşit tercih panosuna sahip olmalısınız. –

+0

'-std = C++ 0x' derleyici seçeneği ile tüm yaptığım 'classname :: clasname(): dizi {num1, num2, num3, num4} {/ * tüm kurucu işlevleri veya yöntemleri veya değişken atamaları buraya git */} '. İlk başlarda, çözümünüzün sonunda ne {{} 'nün karışık olduğunu anladım ama sonra çabucak kurucunun bedeni olduğunu fark ettim :-) – enthusiasticgeek

İlgili konular