C på inbäddade system har traditionellt använt strukturer för att hålla strukturerad data.
Arduino tar C ++ till bordet, så att vi kan använda klasser istället.
Låt oss säga att vi har två olika datastrukturer som kan anses vara mycket lika:
typedef struct { int valueOne; int valueTwo; int valueThree; } value_t;
och:
class Value { public: int valueOne; int valueTwo; int valueThree; }
Vad gäller minne, vilken skillnad kommer det att göra?
Jag ser fortfarande att strukturtekniken används kraftigt – varför är det här?
Kommentarer
Svar
Som hämtat från det accepterade svaret från När ska du använda en klass mot en struct i C ++?
Den enda skillnaden mellan en klass och en struktur i C ++ är att structts har standard offentliga medlemmar och baser och klasser har standard privata medlemmar och baser. Både klasser och strukturer kan ha en blandning av offentliga och privata medlemmar, kan använda arv och kan ha medlemsfunktioner.
Jag rekommenderar att du använder strängar som vanligt gamla datastrukturer utan några klassliknande funktioner, och att använda klasser som aggregerade datastrukturer med privata data och medlemsfunktioner.
Minnesmässigt gör åtkomstmodifieraren ingen skillnad och med tanke på Arduino-minnets begränsningar, människor är mindre benägna att använda klasser med komplexa hierarkier, men föredrar ändå POD-strukturer.
Svar
Till skillnad från C, en instans av en struct
i C ++ är ett objekt på exakt samma sätt som en instans av en class
. Från den kompilerade kodens synvinkel är de identiska. Minnesanvändning, justering, åtkomsttider etc. är exakt desamma (dvs. det finns inga omkostnader).
Från programmerarens synvinkel är det en mycket liten skillnad. Medlemmar av en struct
har allmän synlighet som standard, medan medlemmar i class
har privat synlighet som standard. Annars fungerar alla språkfunktioner på båda, som konstruktörer / förstörare, arv, polymorfism, mallar och operatörsöverbelastning. Du kan till och med härleda en struct
från en class
och vice versa.
Trots likheten är det ganska vanligt att se människor medvetet använda en struct
i C ++ för mycket enkla strukturer, t.ex. där den bara består av ett fåtal datamedlemmar, men inga funktioner. En class
skulle användas för allt mer komplicerat. Detta är dock enbart en fråga om konvention eller personlig preferens och kan användas som en subtil indikation på strukturens avsedda komplexitet.
Svar
Som andra svar har påpekat är din specifika struct
och class
oskiljbara prestandamässigt (Det finns små skillnader i omfattningen av typnamnen, på grund av hur du definierade din struktur). Avgränsningen i C ++ är inte mellan struct
och class
mellan typer som är POD (vanliga gamla data) och typer som inte är, som förklaras i denna diskussion .
Svar
När det gäller minne, vilken skillnad kommer det att göra?
Ingen. Strängar och klasser är samma sak, de skiljer sig endast i skyddsnivåer och om du antingen omedelbart skapas skapas ett ”objekt”.
ser fortfarande att strukturtekniken används kraftigt – varför är det här?
Mindre skrivning om du ” försöker inte dölja datamedlemmar.
Svar
Observera att
typedef struct { ... } Foo;
är föråldrad i C ++ och du ska bara använda
struct Foo { ... };
Det är inte särskilt tydligt i svaren men den andra effekten av structs är offentligt arv som standard jämfört med privat ärv som standard med klasser.
Som nämnts av andra är användning av struct i allmänhet en konvention för POD-typer.
Även tekniskt bör ”struct vs object” vara ”struct vs class” (eftersom instiniering av en struct eller en klass fortfarande ger ett objekt).
Kommentarer
- Redigerat frågeobjekt- > klass.
struct
ochclass
förutom standardsynlighetenstruct
används främst för att den stora majoriteten av inbäddad maskinvara är kodad i C, så den som spenderar mycket tid på att skriva kod för små MCU-enheter känner förmodligen C mycket bättre än C ++, och når automatiskt efter C-idiomer före C ++ – idiom. Det ' är programmerare prestandafråga.