C ++: ctors for structs?

stemmer
4

C ++: Siden en struct er en klasse med alt public, er standard -ctors skapt og kalt?

Grunnen til at jeg spør er å forstå overhead, om noen, som C ++ kan ha over C, når structs brukes. En mening jeg har hørt er at klassene har noen overhead som structs ikke gjør det, i C ++, men jeg spørsmålstegn ved dette.

Publisert på 30/10/2008 klokken 12:39
kilden bruker
På andre språk...                            


4 svar

stemmer
15

I C ++ er det ingen forskjell, bortsett fra standard visibilty struct medlemmer er offentlig, mens klassen standard til private.

Når det gjelder ytelse, vil struct konstruksjon være like rask som klasse konstruksjon. Faktisk hastighet vil selvfølgelig avhenge av hva din struct inneholder. Hvis du skal flytte en C struct til C ++, vil struct bare inneholde POD typer (vanlig gamle data - ingen klasser), som ikke har konstruktører uansett.

Svarte 30/10/2008 kl. 12:42
kilden bruker

stemmer
13

structs har en standardkonstruktør, under nøyaktig samme forhold som klasser gjøre.

Forresten, er en struct ikke "en klasse med alt publikum". Det er en klasse med publikum som standard tilgangs Specifier. structs kan ha private medlemmer, men koden anmelder kan slå deg hvis de gjør.

Den aktuelle saken er ikke konstruere kontra klasse, det er POD kontra ikke-POD.

Husk hvordan en "int" medlem av en klasse er initialisert med mindre du gir det en verdi i initializer liste eller angi en verdi i konstruktør? Vel, det samme gjelder for alle POD typer. Standard konstruktør for en POD struct (eller en POD klasse, for den saks skyld) har ingenting å gjøre. Så selv om det nominelt eksisterer, en kompilator bør faktisk ikke generere og kaller det.

Dette betyr at standard konstruktør for enhver type som du kunne ha definert i C, bør innføre ingen runtime overhead når det brukes i C ++. I praksis hører jeg rykter om at ikke alle C ++ kompilatorer gjelder nok optimalisering for å sikre at all kode avgir alltid en binær så godt som det ville ha gjort hvis kompilert som C. Men jeg vet ikke om dette er stadig en av de sakene som forårsaker problemer - jeg vil gjette at det er vanligvis identiske.

Så, gitt en POD struct:

struct sPOD {
    int foo;
    float bar;
    char baz[23];
};

Det følgende er egnet til å avgi noen kode i C ++ (annet enn kanskje bevege stakkpekeren, avhengig av hvor mye kompilatoren ruller automatiske variable sammen), akkurat som i C:

sPOD s1;

Faktisk er det ikke for meg på gcc.

Svarte 30/10/2008 kl. 14:48
kilden bruker

stemmer
1

I Stroustrup bok, The C ++ Programming Language, Special Edition , på side 234 avsnitt 10.2.8, gir han et eksempel på en struct med en konstruktør. Han sier også litt lenger ned i teksten "Constructors og få tilgang til funksjoner kan være ganske nyttig selv for slike strukturer..." selv om jeg ikke tror han bruker ordet "strukturer" i streng teknisk forstand. Så jeg vil gjette at en struct har en standardkonstruktør.

Svarte 30/10/2008 kl. 12:49
kilden bruker

stemmer
1

Godt spørsmål! Min lesning av Stroustrup ville tendens enig med Roddy svar. Men tror jeg hvorvidt ctor kalles avhenger til en viss grad på hvordan struct er opprettet. For eksempel, hvis du opprette structs via malloc , jeg tror ikke konstruktøren kalles, mens hvis du nye dem, tror jeg det ville.

Når det er sagt, jeg har faktisk ikke sjekket over.

Svarte 30/10/2008 kl. 12:48
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more