C'In diğer unsuru boyutu dayalı Birliği öğe boyutu
Kod: aşağıdaki parça düşünün
struct S
{
union
{
int arr1[10];
char arr2[sizeof(arr1)];
};
};
Başarıyla c 03 c 11 modunda 4.9.2 gcc ile derler. S
gibi şablon olarak değiştirdiğimde ancak:
template <size_t N>
struct S
{
union
{
int arr1[N];
char arr2[sizeof(arr1)];
};
};
Şu hata çıktısını alıyorum:
error: int S<10ul>::<anonymous union>::arr1 [10]’ is inaccessible
int arr1[N];
error: within this context
char arr2[sizeof(arr1)];
Çınlama c 11 modunda her iki sürümü de derler. Ne doğru davranış burada olduğunu merak ediyorum. arr2
sizeof(int) * N
olduğunu açıkça belirtmelidir ben belki?
CEVAP
Sendika anonim. Böylece, derleyici arr1
ve sınıf düzeyinde arr2
oluşturur.
Bu, char arr2[sizeof(arr1)];
arr1
düzgün bakın olmaz çünkü.
İşte bir çözüm :
template <size_t N>
struct S
{
union A
{
int arr1[N];
char arr2[sizeof(arr1)];
};
};
Derler burada : https://ideone.com/JcvOYg
Birliği belirtilerek, doğrudan dahil derleyici engelleyebiliriz. Sonra arr1
düzgün bir şekilde almak mümkün.
Ama arr1
arr2
S
'nin üyeleri artık değil. bu da demek oluyor
Son olarak, Members can be defined in terms of other members
ama ikincisi "" derleyici tarafından. kolay bulunabilir olmalı
Doldurmak için nasıl CSS Görüntü boyut...
Ayar grafik boyutu şekil...
JavaScript nesne boyutu...
Ne'doğru boyutu drawable-xxhdpi i...
Boyutu 0 (sıfır)döndürebilir...