boost::array
(or the tr1
or std
version) offer some nice additional features over a built-in array.
Şimdiye kadar, kod tabanımız yalnızca yerleşik diziler içerir, örneğin (yukarı, ancak stil eşleşir):
WORD m_lastReadFlags[FLAGS_MAX];
...
WORD flagBuffer[FLAGS_MAX];
if (getFlags(flagBuffer)) {
memcpy(m_lastReadFlags, flagBuffer, sizeof(m_lastReadFlags));
...
Bence bu fikir alacak.
Şimdi, benim sorum, koddaki yerlerin, boost :: array
'da düşmesinin (diğer değişiklikler nedeniyle) anlamlı olacağı, array
' in% 100 olduğu Yerleşik dizi için drop-in korunan semantik? (Olası derleyici hataları TAMAM - sadece sessiz davranış değişiklikleri beni rahatsız ediyor.)
Yani, yukarıdaki kodun yeniden yazılması (örneğin) olabilir :
boost::array m_lastReadFlags;
and the memcpy (possibly adapted to use c_array()
or data()
) and other array-like access would remain the same? Yes, of course I could also replace the local buffer by an array and remove the memcpy
or use std::copy
or something like that, but the point of this question is about the compatibility of built-in arrays and the array class.
Güncelleme: Özellikle beni rahatsız eden bir şey, yerleşik dizilerin işaretçi olarak kullanıldığı yerlerdir ( memcpy
durumunda olduğu gibi). Tüm olaylar tarafından yakalanacak mı
derleyici/doğru işlendi?
Görev ne olacak?
T arr1[N];//or array
T arr2[N];//or array
T* p1;
...
// Note, not all combinations will compile:
arr1 = arr2;
p1 = arr1;
arr2 = p1;
...