2016-10-26 23 views
5

Farz edelim ki, iki üyeden oluşan bir üye var a ve b aynı türden (ör. Int). Ben a yazarsanAynı türdeki birleşik üyeler

union u{ 
    int a,b; 
    char c; 
}; 

, değerine göre bir işleve geçmek ve işlev a ve b aynı türde düşünüldüğünde, herhangi bir sorun olacaktır a değeri elde etmek bekliyor b okur? Üye üye tam olarak aynısını okumak için okur mu?

+3

C11 taslağı N1548, herhangi bir sorun olmayacağını söyleyebilir. Emin değilim. Hala okuyor. Bir dipnot: “95) Birleşim nesnesinin içeriğini okumak için kullanılan üye, için kullanılan üye ile aynı değilse, nesnede bir değer depolayın, değerin nesne temsilinin uygun kısmı olarak yeniden yorumlanır. 6.2.6'da açıklandığı gibi yeni tipte bir nesne temsili (bazen '' tip punning '') olarak adlandırılan bir süreç. Bu bir tuzak temsili olabilir. ” – Ryan

cevap

4

Evet, sorun değil.

standart (C11 taslak) diyor ki:

bir birlik, ortak bir başlangıç ​​ dizisini paylaşan birçok yapıları içeriyorsa [...] (aşağıya bakınız) ve sendika nesne halen birini içeriyorsa bu yapılar, birliğin tamamlanmış türde bir beyan görünür

İşte

iki tamsayı olarak kabul edilebilir olduğu yerde olduğunu bunlardan herhangi ortak başlangıç ​​kısmını (çok sim incelemek için izin verilir ple) aynı başlangıç ​​dizisini paylaşan yapılar. üyesi bir birlik nesnesinin içeriğini okumak için kullanılırsa

, üye olarak aynı son nesnede bir değeri saklamak için kullanılan uygun değildir:

Hatta orada da, o görmezden değerinin amacı, temsilinin bir parçası oldukça güvenli bir int int bir şekilde yeniden yorumlanarak yeni tip

bir nesne temsili olarak yeniden değerlendirilir.

İlgili konular