type qualifiers storage classes c
Betydelsen av typkvalificeringar och lagringsklasser i C ++.
I denna Exklusiv C ++ träningsserie , kommer vi att utöka ämnesområdet för variabler ytterligare och se typkvalificeringar och lagringsklasser i C ++ i denna handledning. Även om detta är ett litet ämne är det mycket viktigt och viktigt vad gäller C ++ programmering.
Typkvalificeringarna i C ++ ändrar inte betydelsen av de variabler eller enheter som de används med, utan de lägger bara till extra information till enheten.
Vad du kommer att lära dig:
Skriv kvalificeringsspel i C ++
Typkvalificeringar i C ++ lägger till extra egenskaper till variabeln som en variabel som är konstant eller flyktig.
Typkvalificatorer uttrycker hur en variabel nås eller där en variabel lagras i minnet genom att hålla innebörden eller tolkningen av variabeln densamma. På ett sätt lägger typkvalificeringarna mer förfining till variabler.
I C ++ specificeras typkvalificering precis före variabelns typspecifikator (datatyp).
Typkvalificeringar i C ++ klassificeras enligt nedan:
# 1) konst
Typspecifikatorn 'const' är att definiera objekten av typen const. Ett const-objekt eller en variabel kan inte ändras när deklareras. Om ett försök görs för att modifiera const-objektet eller variabeln, ger kompilatorn ett fel. Vi har redan sett om konstanter / bokstavliga i vår tidigare handledning.
Definitionen av konstanter som använder 'const' nyckelord motsvarar typkvalificatorn 'const'.
# 2) flyktig
Typkvalificatorn 'flyktig' betyder att värdet på variabeln som är markerad som flyktig kan ändras på andra sätt som inte specificeras av programmet. Variablerna som är flyktiga förändras vanligtvis på grund av vissa externa faktorer och inte nödvändigtvis på grund av programmet. Med andra ord är de flyktiga till sin natur.
Till exempel, en variabel som läser temperaturen i ett riktigt ord kan göras flyktig eftersom läsningstemperaturen kanske inte är helt kontrollerad av programmet.
# 3) muterbar
”Mutable” -kvalificering gör medlemmarna eller variabeln modifierbar.
Den muterbara kvalificeringen tillämpas vanligtvis på icke-statiska klassmedlemmar av icke-konst och icke-referens typ. Enligt specifika situationer kan vi behöva vissa variabler för att förbli oföränderliga (kan inte ändras) och vissa variabler för att kunna ändras. Den här typen av kvalificering är till stor hjälp när vi vill ha förändrade egenskaper.
Lagringsklasser i C ++
Hittills har vi diskuterat alla C ++ - variabler i detalj. Vi har sett att variabler deklareras med sina respektive datatyper och sedan används i programmet. För att fullständigt definiera en variabel behöver vi också lagringsklasser förutom deras datatyper.
Även om vi hittills inte har specificerat några lagringsklasser för variabler, fanns det en standardlagringsklass 'auto' som tillämpades på alla variabler.
Så vad är lagringsklasser?
Lagringsklasser anger hur variabeln eller en funktion ska behandlas av kompilatorn och hur lagring ska tilldelas för en variabel. Den definierar synligheten eller omfattningen och livslängden för en variabel. Variabelns livstid är hur länge variabeln kommer att förbli aktiv.
Variabelns synlighet eller omfattning är för vilka funktioner eller moduler variabeln kommer att vara tillgänglig. Dessa lagringsklasser anges före datatypen för variabeln.
I C ++ har vi följande lagringsklasser:
# 1) Klass för automatisk lagring
Detta är standardlagringsklassen. Lagringsklassen ”Auto” tillämpas på de lokala variablerna och tilldelas automatiskt av kompilatorn till lokala variabler. Lokala variabler som föregås av 'auto' nyckelordet förblir aktiva i den funktion de deklareras i och går utanför räckvidden när funktionen avslutas.
Om variablerna med 'automatisk' lagringsklass inte initialiseras eller tilldelas något värde, har de sopor eller odefinierade värden.
Låt oss se ett exempel på autovariabler i ett C ++ - program.
#include using namespace std; int main() { int i; float f; cout<<'Variable i = '< Eftersom vi inte har tilldelat några värden till dem, när vi skriver ut dessa variabler, ser vi att båda har värden = 0. Detta är helt kompilatorberoende av vilka värden som ska tilldelas automatisk lokal variabel om de inte redan tilldelas något värde i programmet .
NOTERA: Från och med C ++ 11 används det automatiska nyckelordet för typ slutsats . Detta betyder att vi kan använda en kod som auto i = 10 och datatypen I kommer att härledas direkt från initialiseraren som används för i. Därför, om vi förklarar något som 'auto float f;', kommer kompilatorn att visa ett fel.
Så vi använder vanligtvis inte deklaration för lagringsklass auto eftersom det antyds att standard alltid kommer att vara automatisk lagringsklass.
# 2) Registrera lagringsklass
När vi har krav på att en variabel behöver snabbare åtkomst använder vi registerlagringsklassen. Så istället för att lagra variablerna i Random Access Memory (RAM) lagras dessa variabler i CPU-registret och har en storlek som är lika med ett register.
Eftersom dessa variabler inte har en minnesplats kan vi inte använda '&' -operatören med dessa variabler.
Att ha en variabel med registerlagringsklass garanterar inte att variabeln alltid kommer att lagras i registret. Istället antar det bara att variabeln kan lagras i ett register och är helt beroende av hårdvara och implementering.
Registervariabler har omfattning och livstid som de automatiska variablerna.
Till exempel,
#include using namespace std; int main() { int i; register float f; cout<<'Variable i = '< # 3) Extern lagringsklass Den externa lagringsklassen krävs när variablerna måste delas över flera filer. Externa variabler har globalt omfång och dessa variabler är synliga utanför filen där de deklareras.
Eftersom externa variabler är variablerna deklarerade och definierade utanför i en annan fil initialiseras de inte.
Externa variabler har global räckvidd och livslängden för externa variabler är lika lång som programmet där de deklareras som avslutade.
Externa variabler kan deklareras enligt följande:
extern int temp; int temp;
I exemplet ovan har vi två variabeldeklarationer med samma namn men den första är den externa variabeln som definieras någon annanstans. Denna externa variabel kommer att vara användbar när vi inkluderar källfilen där den externa variabeln temp definieras i vårt program.
# 4) Statisk lagringsklass
Statisk lagringsklass ber kompilatorn att behålla värdet på variabeln under hela programmets livstid. Statiska variabler liknar de lokala variablerna men föregås av ett 'statiskt' nyckelord.
Till skillnad från lokala variabler som går utanför räckvidden efter att funktionen avslutats, går statiska variabler inte utanför räckvidden när en funktion eller ett block avslutas och deras värden bevaras mellan funktionssamtal.
Statiska variabler initialiseras och lagring tilldelas dem bara en gång under programmets livstid. Statiska variabler initialiseras till 0 om inte redan har initialiserats under deklarationen.
Låt oss se följande exempel för att bättre förstå klassisk lagringsklass.
#include using namespace std; void printvar() { static int var; var++; cout<<'static variable var = '< Produktion:
printvar-samtal 1: statisk variabel var = 1
printvar call 2: statisk variabel var = 2
printvar call 3: statisk variabel var = 3
printvar call 4: statisk variabel var = 4
I ovanstående kod har vi en funktion 'printvar' där vi har deklarerat en statisk variabel var av typen int. Vi ökar sedan denna variabel och skriver ut den. I huvudfunktionen kallar vi printvar-funktionen fyra gånger.
Kontrollera nu utdata. Utgången visar att den statiska variabeln var för varje funktionsanrop ökas med 1 från sitt tidigare värde. Detta är den statiska lagringsklassen som hjälper variabeln att behålla sitt värde mellan funktionssamtal. Den statiska variabeln återinitialiseras inte för varje funktionsanrop.
Vi bör också märka att i printvar-funktionen har vi just deklarerat den statiska variabeln och inte initialiserat den. Det är anmärkningsvärt att när vi inte initialiserar de statiska variablerna tilldelas de initialvärde 0.
Notera: Statisk lagringsklass kan också tillämpas på globala variabler. I det här fallet kommer variabeln att ha globalt omfång och dessutom statisk lagring.
# 5) Muterbar lagringsklass
Den muterbara lagringsklassen tillämpas endast på klassobjekten. Genom att tillämpa den muterbara lagringsklassen kan medlem av ett objekt åsidosätta ”const” -medelfunktionen. Detta betyder att ett muterbart medlem eller objekt kan modifieras av en medlemsfunktion som är 'const'.
Vi kommer att lära oss mer om konstfunktionerna och objekten samt mutabla medlemmar i våra senare handledning när vi lär oss om objektorienterad programmering i C ++.
Slutsats
Det här handlar om typspecifikatorer och lagringsklasser i C ++. Vi hoppas att vi kunde göra alla begrepp tydliga om lagringsklasser och typspecifikationer genom denna handledning.
portutlösning vs portvidarebefordran för spel
I vår kommande handledning lär vi oss mer om de olika operatörerna som används i C ++ tillsammans med deras användning.
=> Kolla hela C ++ träningsserien här
Rekommenderad läsning
- Variabler i C ++
- Python-variabler
- Java-gränssnitt och abstrakt klasshandledning med exempel
- Skriv omvandlingar i C ++
- VBScript-variabler: Hur man deklarerar och använder variabler - VBScript Dim
- JMeter-variabler och funktioner
- 10 BÄSTA gratis leverantörer av molnlagring (onlinelagring 2021)
- Typer av migreringstest: Med testscenarier för varje typ