wat is de grootte van lege klasse en het verschil tussen unie, structuur en klasse in c ++?

wat is de grootte van lege klasse en het verschil tussen unie, structuur en klasse in c ++?

Mijn idee:

als er geen statische leden in zitten, moeten ze hetzelfde zijn omdat alle leden op stapel staan.

Als ze allemaal leeg zijn, zijn ze hetzelfde.

als ze statische leden hebben, is dit afhankelijk van de relatieve locatie van de leden in de leden.

toch?

bedankt

1
De grootte van een type wordt niet beïnvloed door de aanwezigheid van statische gegevensleden.
toegevoegd de auteur ildjarn, de bron
verduidelijk pl0x - vrij vage vraag
toegevoegd de auteur slartibartfast, de bron

2 antwoord

class == struct the only difference is that in a struct, all members i.e. ivars and methods are public by default.

statische leden, d.w.z. variabelen of methoden, maken geen deel uit van de klasse/struct in de zin dat ze niet tot een bepaalde instantie behoren. dus een sizeof zal ze niet bevatten.

union is not a class nor struct, Union is used to map a struct to a particular memory layout.

om de grootte te krijgen voer je gewoon een sizeof() uit van een instantievariabele en dat zul je zien.

2
toegevoegd

C ++ Standaardstandaard geeft aan dat de grootte van een lege klasse niet-nul moet zijn.
Meestal is het 1 byte op de meeste systemen.

In Bjarne Stroustrup's words, the size is non-zero "To ensure that the addresses of two different objects will be different."

De grootte is 1 op de meeste systemen, omdat de uitlijningsregels er niet toe doen, omdat de naam van de klasse alleen in de symbolentabel wordt ingevoerd om een ​​uniek adres te verkrijgen.

Voor Standerdese fans:
C ++ 03 Standard Section 9: Classes, Para 2:

Volledige objecten en lid-subobjecten van klassetype hebben een grootte die niet nul is.   94)

1
toegevoegd
Het wordt door de standaard gedefinieerd als elke grootte boven 0
toegevoegd de auteur Dani, de bron
Vervolgens wordt volgens jou de klassenaam gemaakt in de symbolentabel om een ​​uniek adres te verkrijgen, daarom is de grootte van de lege klasse 1. Waarom is de grootte van de lege struct 0?
toegevoegd de auteur devsda, de bron
ergens waar ik dit heb gelezen, kan dit in elke post in stackOverflow voorkomen. Bedankt om mijn verkeerde concept te corrigeren.
toegevoegd de auteur devsda, de bron
@jhamb: de grootte van een lege structuur is Non-Zero (meestal 1 ) in C evenals in C ++ . Wat is uw referentie voor de statement "grootte van lege struct is < code> 0 "
toegevoegd de auteur Alok Save, de bron