Perde arkasında neler oluyor?
Dinamik olarak tahsis edilmemiş bir tanım gereği, sabit boyutlu bir homojen eleman konteyneri olmaktadır. Bir Ntür elemanlar dizisi, tipte nesnelerin Tbitişik dizisi olarak hafızaya yerleştirilir .NT
Dizilerin boyutunu içeren bir türe sahip olması neden gereklidir?
Ben bir dizinin türü boyutunu eklemek için "gerekli" olduğunu sanmıyorum - aslında, Tnesnelerin bitişik bir dizi başvurmak için bir işaretçi kullanabilirsiniz . Böyle bir işaretçi dizi hakkında boyut bilgilerini kaybeder.
Ancak, sahip olmak yararlı bir şeydir. Tip güvenliğini arttırır ve derleme zamanında çeşitli şekillerde kullanılabilecek faydalı bilgileri kodlar. Örnek olarak, farklı boyutlardaki dizilere aşırı yükleme yapmak için dizilere referanslar kullanabilirsiniz
void foo(int(&array)[4]) { /* ... */ }
void foo(int(&array)[8]) { /* ... */ }
veya bir dizinin boyutunu sabit bir ifade olarak bulmak için
template <typename T, std::size_t N>
constexpr auto sizeOf(const T(&array)[N]) { return N; }
Bu, dizileri karşılaştırmayı nasıl etkiler?
Gerçekten değil.
C stili dizileri, iki sayıyı (örneğin, intnesneleri) karşılaştırdığınız şekilde karşılaştıramazsınız . Bir çeşit sözlükbilimsel karşılaştırma yazmanız ve farklı boyutlardaki koleksiyonlar için ne anlama geldiğine karar vermeniz gerekir. std::vector<T>bunu sağlar ve dizilere aynı mantık uygulanabilir.
Bonus: C ++ 11 ve üstü, std::arraykonteyner benzeri bir arayüze sahip bir C stili dizi etrafında bir sarıcıdır. Diğer kaplarla (örn. std::vector<T>) Daha tutarlı olduğundan ve aynı zamanda kutudan çıkan sözlükbilimsel karşılaştırmaları desteklediği için C tarzı dizilere tercih edilmelidir .