Neden std::initializer_list
bir çekirdek dil yerleşik değil ?
Bana öyle geliyor ki, C ++ 11'in oldukça önemli bir özelliği ve yine de kendi ayrılmış anahtar kelimesine (veya benzer bir şeye) sahip değil.
Bunun yerine, initializer_list
bu kadar sadece özel, örtülü sahiptir standart kütüphaneden bir şablon sınıfı eşlemesi yeni gelen hazırladı-init-liste {...}
derleyici tarafından işlenir oldu sözdizimi.
İlk bakışta bu çözüm oldukça zordur .
C ++ diline yapılan yeni eklemelerin artık uygulanacağı yol bu mu: Çekirdek dil tarafından değil, bazı şablon sınıflarının örtük rolleriyle mi?
Lütfen şu örnekleri göz önünde bulundurun:
widget<int> w = {1,2,3}; //this is how we want to use a class
neden yeni bir sınıf seçildi:
widget( std::initializer_list<T> init )
bu fikirlerden herhangi birine benzer bir şey kullanmak yerine :
widget( T[] init, int length ) // (1)
widget( T... init ) // (2)
widget( std::vector<T> init ) // (3)
- klasik bir dizi, muhtemelen şuraya
const
buraya ekleyebilirsiniz - dilde zaten üç nokta var (var-args, şimdi çeşitli şablonlar), neden sözdizimini yeniden kullanmıyorsunuz (ve yerleşik hissettirin )
- yalnızca mevcut bir kapsayıcı ekleyebilir
const
ve&
Hepsi zaten dilin bir parçası. Sadece ilk 3 fikrimi yazdım, başka birçok yaklaşımın olduğuna eminim .