genellikle std::vector
kullanımı ve Sabit referans ile geçmek gibi. Bu, eğer benim api'm bir noktada c koduyla çağrılabilirse, const işaretçisini kullanarak geçiş yapmak mantıklı olabilir, ancak siz de boyutu aşağıya göndermek isteyebilirsiniz. işlevi std::array
veya std::vector
ile çağrılabilir, bir işaretçi (ve boyutunu) veya Yineleyicilerin (/ ucunu başlayacak) bir dizi aşağı göndermeye karar verebilir.
biz std :: dizisi kullanarak bahsediyorsak, şablon argümanı dizinin boyutunu gerektirir. Biz boyutuna templated işlevi, çiftleşmiş yaparsanız
void myfunc(const std::array<int, 5>& mydata){...}
Ancak, bu artık bir sorun: Bu normal bir işlev, sabit bir boyut ihtiyacım olacağını anlamına gelecektir. biz yığın tahsis c tarzı diziler bahsedecek olursak
template<unsigned int SZ>
void myfunc(const std::array<int, SZ>& mydata) {...}
... İyi C++ tarzı c tarzı diziler için std :: dizi/std :: vector tercih etmektir. C++ Coding Standard by Herb Sutter bölüm 77 okuma önerisi sayfa 152 konuyla ilgili konuşur. C-stili dizileri kullanırken, işaretçiyi ve büyüklüğü göndermek standart yoldur.
! Dinamik olarak ayrılmış bir dizi, referans olarak geçmek için parametre olarak kabul edilmez mi? Nasıl olur? Bir referans tüm takma adlardan sonradır. – quantum231
@ quantum231 Bir diziyi dinamik olarak ayırmak zaten bir işaretçi döndürür, bu nedenle hayır. –
Otomatik ayırma gereksinimi yoktur, ancak bir tür sorunu var. Örnek: 'void f (int (Arg) [5]);' 'void g() {f (* yeni int [1] [5]);} ' –