2014-10-26 16 views
25

Varsa, bir üye veri türü için yapı ve birleşim arasındaki farkı bilmek istiyorum.Sadece bir üyemiz varsa, yapı ve sendika arasında bir fark var mı?

+4

Google'da basit bir arama yaparak bunu kendiniz okuyabilirsiniz. –

+10

@Begueradj: Belki, ama konu biraz incelikli, ve Google'ın bana attığı ilk şeylere güvenme eğiliminde olmayabilir. –

+1

C++ ile ilgili ek tartışmalarla ilgili POD ve agregatlar ile ilgili olarak, bkz. [Agregatlar ve POD'lar nedir ve bunlar nasıl özeldir?] (Http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods -ve-nasıl-neden-onlar-özel) –

cevap

30

C: Yok. Ünlü "yer kazandıran şaka" #define struct union neredeyse bir şaka değil.

C++ 98'de: Sendikalar yalnızca POD members olabilir, sendikasız sınıfların rasgele üyeleri olabilir.

C++ 11'de: Sendikalar, nesne türüne (referans türü değil) rastgele veri üyelerine sahip olabilir, ancak bunların kullanımı, sendika dışı sınıfların kullanımının daha kısıtlı olduğunu gösterir. (Yani: Bir sendika, sanal üye fonksiyonlarına sahip olamaz, bir temel sınıf olamaz ve temel sınıflara sahip olamaz.) Ayrıca, tek kişilik bir sendika olmayan sınıfın aksine tek kişilik bir sendika çalışması yapmak için daha fazla kod yazmanız gerekir. çünkü kurucuları ve yıkıcıyı kendiniz yazmanız gerekiyor.

+1

Bir uygulamada bir yapıda dolgu olmasına izin verilmiyor, ancak birleşim içinde değil midir? – mafso

+0

@mafso: Ben öyle düşünmüyorum. Gördüğüm tek kısıtlama şudur: "Bir kaynağın boyutu, statik olmayan en büyük veri üyelerini içermesi için yeterlidir." –

+0

Bir yapının ilk üyesi * öncesinde * dolguya izin verilmez ve hem birleşim hem de yapı için sonunda dolgu yapılabilir. Yani tek üye sendikaya göre yapıya göre hiçbir fark yoktur. –

İlgili konular