Varsayılan başlatma , Standarttan bir terimdir ve potansiyel olarak hiç başlatma olmadığı anlamına gelir, bu nedenle muhtemelen sıfır başlatmayı kastediyorsunuz .
Cppreference.com'daki açıklama aslında biraz yanıltıcıdır. std::array
kümelenmiş bir sınıftır ve öğe türü ilkel ise, C diliyle yakından eşleşen anlambilimle POD: "düz eski veriler" dir. Arasında örtük tanımlanmış yapıcı std::array< int, N >
bir olan önemsiz kesinlikle hiçbir şey yapmaz biri.
Benzer std::array< int, 3 >()
veya std::array< int, 3 > x{}
sıfırlanmış değerler sağlayan sözdizimi , bir kurucu çağırarak bunu yapmaz. Sıfır elde etmek, C ++ 11 §8.5 / 8'de belirtilen değer başlatmanın bir parçasıdır :
T türünde bir nesneyi değerle başlatmak için şu anlama gelir:
- T, kullanıcı tarafından sağlanan veya silinmiş bir varsayılan kurucu olmadan (muhtemelen cv nitelikli) bir sınıf tipiyse, nesne sıfır olarak başlatılır… ve T, önemsiz olmayan bir varsayılan kurucuya sahipse, nesne varsayılan olarak başlatılır;
std::array
kullanıcı tarafından sağlanan varsayılan kurucu yoktur, bu nedenle sıfır başlatılır. Örtük olarak tanımlanmış bir varsayılan kurucuya sahiptir, ancak önemsizdir, bu nedenle hiçbir zaman varsayılan olarak başlatılmaz. (Ancak, tanım gereği önemsiz başlatmanın çalışma zamanında etkisi olmadığı için bu bir fark yaratmaz.)
değilse, tüm öğeleri varsayılan değerlerine başlatmak için tüm dizilerde (sıfır boyutlu diziler dahil) çalışacak bir sözdizimi var mı?
C-tarzı diziler ve std::array
her ikisi de kümelerdir ve herhangi bir toplamayı tamamen sıfır başlatmanın yolu sözdizimidir = {}
. Bu, C ++ 98'den beri çalışır. C tarzı dizilerin sıfır kapsamının sizeof (std::array< X, 0 >)
olamayacağını ve bunun sıfır olmadığını unutmayın.
T x[N]
sözdiziminin eşdeğeridir .