type qualifiers storage classes c
Znaczenie kwalifikatorów typu i klas pamięci w C ++.
W tym Ekskluzywna seria szkoleń C ++ , rozszerzymy temat zmiennych dalej i zobaczmy w tym samouczku kwalifikatory typów i klasy pamięci w C ++. Chociaż jest to mały temat, jest bardzo ważny i znaczący, jeśli chodzi o programowanie w C ++.
Kwalifikatory typu w C ++ nie zmieniają znaczenia zmiennych lub jednostek, z którymi są używane, a raczej dodają tylko dodatkowe informacje do jednostki.
Czego się nauczysz:
Kwalifikatory typu w C ++
Kwalifikatory typu w C ++ dodają dodatkowe właściwości do zmiennej, na przykład zmienną będącą stałą lub zmienną.
darmowe oprogramowanie do naprawy komputera dla systemu Windows 10
Kwalifikatory typów określają sposób, w jaki uzyskuje się dostęp do zmiennej lub gdzie zmienna jest przechowywana w pamięci, zachowując takie samo znaczenie lub interpretację zmiennej. W pewnym sensie kwalifikatory typu dodają większą precyzję do zmiennych.
W C ++ kwalifikator typu jest określany tuż przed specyfikatorem typu (typem danych) zmiennej.
Kwalifikatory typów w C ++ są klasyfikowane w następujący sposób:
# 1) const
Specyfikator typu „const” służy do definiowania obiektów typu const. Po zadeklarowaniu obiektu lub zmiennej const nie można zmodyfikować. Jeśli zostanie podjęta próba zmodyfikowania obiektu lub zmiennej const, kompilator zgłasza błąd. O stałych / literałach już widzieliśmy w naszym poprzednim samouczku.
Definicja stałych za pomocą słowa kluczowego „const” odpowiada kwalifikatorowi typu „const”.
# 2) niestabilny
Kwalifikator typu „volatile” oznacza, że wartość zmiennej oznaczonej jako volatile może zostać zmieniona na inne sposoby, których program nie określa. Zmienne, które są niestabilne, zmieniają się zwykle z powodu pewnych czynników zewnętrznych, a niekoniecznie z powodu programu. Innymi słowy, mają one charakter niestabilny.
Na przykład, zmienna, która odczytuje temperaturę w prawdziwym słowie, może stać się ulotna, ponieważ odczyt temperatury może nie być całkowicie kontrolowany przez program.
# 3) zmienny
Kwalifikator typu „mutable” umożliwia modyfikowanie elementów członkowskich lub zmiennej.
Modyfikowalny kwalifikator jest zwykle stosowany do niestatycznych składowych klas o typie innym niż stały i bez odwołania. W określonych sytuacjach może być konieczne, aby niektóre zmienne pozostały niezmienne (nie można ich zmienić), a niektóre zmienne były zmienne. Ten typ kwalifikatora jest bardzo pomocny, gdy chcemy mieć zmienne cechy.
Klasy pamięci w C ++
Do tej pory szczegółowo omówiliśmy wszystkie zmienne C ++. Widzieliśmy, że zmienne są deklarowane z odpowiednimi typami danych, a następnie używane w programie. Aby w pełni zdefiniować zmienną, oprócz typów danych potrzebujemy również klas pamięci.
Chociaż do tej pory nie określiliśmy żadnych klas przechowywania dla zmiennych, istniała domyślna klasa pamięci „auto”, która została zastosowana do wszystkich zmiennych.
Więc co to są klasy pamięci?
Klasy pamięci określają, jak zmienna lub funkcja ma być traktowana przez kompilator i jak ma być przydzielana pamięć dla zmiennej. Definiuje widoczność lub zakres i czas życia zmiennej. Czas życia zmiennej to czas, przez jaki zmienna pozostanie aktywna.
Widoczność lub zakres zmiennej określa, dla których funkcji lub modułów zmienna będzie dostępna. Te klasy pamięci są określone przed typem danych zmiennej.
W C ++ mamy następujące klasy pamięci:
# 1) Auto Storage Class
To jest domyślna klasa pamięci. Klasa pamięci „Auto” jest stosowana do zmiennych lokalnych i jest automatycznie przypisywana przez kompilator do zmiennych lokalnych. Zmienne lokalne poprzedzone słowem kluczowym „auto” pozostają aktywne w funkcji, w której zostały zadeklarowane, i po zakończeniu funkcji wychodzą poza zakres.
Jeśli zmienne mające klasę pamięci „auto” nie są zainicjowane lub nie mają przypisanej żadnej wartości, to mają niepotrzebne lub niezdefiniowane wartości.
Zobaczmy przykład zmiennych automatycznych w programie C ++.
#include using namespace std; int main() { int i; float f; cout<<'Variable i = '< # 2) Zarejestruj klasę pamięci Kiedy wymagamy, aby zmienna wymagała szybszego dostępu, używamy klasy rejestrów. Dlatego zamiast przechowywać zmienne w pamięci o dostępie swobodnym (RAM), zmienne te są przechowywane w rejestrze procesora i mają rozmiar równy rozmiarowi rejestru.
Ponadto, ponieważ te zmienne nie mają miejsca w pamięci, nie możemy używać operatora „&” z tymi zmiennymi.
Posiadanie zmiennej z klasą pamięci Register nie gwarantuje, że zmienna będzie zawsze przechowywana w rejestrze. Zamiast tego zakłada po prostu, że zmienna może być przechowywana w rejestrze i jest całkowicie zależna od sprzętu i implementacji.
Zmienne rejestrowe mają zakres i czas życia podobne do zmiennych automatycznych.
Na przykład,
#include using namespace std; int main() { int i; register float f; cout<<'Variable i = '< # 3) Zewnętrzna klasa pamięci Zewnętrzna klasa pamięci jest wymagana, gdy zmienne muszą być współużytkowane w wielu plikach. Zmienne zewnętrzne mają zasięg globalny i są widoczne poza plikiem, w którym zostały zadeklarowane.
Ponieważ zmienne zewnętrzne to zmienne zadeklarowane i zdefiniowane na zewnątrz w innym pliku, nie są inicjalizowane.
Zmienne zewnętrzne mają zasięg globalny, a czas życia zmiennych zewnętrznych jest tak długi, jak program, w którym są zadeklarowane jako zakończone.
Zmienne zewnętrzne można zadeklarować w następujący sposób:
extern int temp; int temp;
W powyższym przykładzie mamy dwie deklaracje zmiennych o tej samej nazwie, ale pierwsza jest zmienną extern zdefiniowaną w innym miejscu. Ta zmienna extern będzie przydatna, gdy włączymy plik źródłowy, w którym zdefiniowana jest zmienna zewnętrzna temp w naszym programie.
# 4) Statyczna klasa pamięci
Statyczna klasa pamięci informuje kompilator, aby utrzymywał wartość zmiennej przez cały okres istnienia programu. Zmienne statyczne są podobne do zmiennych lokalnych, ale poprzedzone są słowem kluczowym „static”.
W przeciwieństwie do zmiennych lokalnych, które wychodzą poza zakres po zakończeniu funkcji, zmienne statyczne nie wychodzą poza zakres, gdy funkcja lub blok kończy działanie, a ich wartości są zachowywane między wywołaniami funkcji.
Zmienne statyczne są inicjalizowane, a pamięć jest do nich przydzielana tylko raz w okresie istnienia programu. Zmienne statyczne są inicjowane na 0, jeśli nie zostały już zainicjowane podczas deklaracji.
Zobaczmy następujący przykład, aby lepiej zrozumieć klasę pamięci statycznej.
#include using namespace std; void printvar() { static int var; var++; cout<<'static variable var = '< Wynik:
printvar wywołanie 1: zmienna statyczna var = 1
printvar wywołanie 2: zmienna statyczna var = 2
printvar wywołanie 3: zmienna statyczna var = 3
printvar wywołanie 4: zmienna statyczna var = 4
W powyższym kodzie mamy funkcję „printvar”, w której zadeklarowaliśmy zmienną statyczną var typu int. Następnie inkrementujemy tę zmienną i drukujemy ją. W funkcji głównej czterokrotnie wywołujemy funkcję printvar.
Teraz sprawdź wyjście. Dane wyjściowe pokazują, że przy każdym wywołaniu funkcji zmienna statyczna var jest zwiększana o 1 w stosunku do jej poprzedniej wartości. Jest to statyczna klasa pamięci, która pomaga zmiennej zachować wartość między wywołaniami funkcji. Zmienna statyczna nie jest ponownie inicjowana dla każdego wywołania funkcji.
Powinniśmy również zauważyć, że w funkcji printvar właśnie zadeklarowaliśmy zmienną statyczną i nie zainicjowaliśmy jej. Warto zauważyć, że gdy nie inicjalizujemy zmiennych statycznych, przypisywana jest im wartość początkowa 0.
Uwaga: Statyczną klasę pamięci można również zastosować do zmiennych globalnych. W tym przypadku zmienna będzie miała zasięg globalny i dodatkowo magazyn statyczny.
# 5) Zmienna klasa pamięci
Zmienna klasa pamięci jest stosowana tylko do obiektów klas. Stosując zmienną klasę pamięci, element członkowski obiektu może przesłonić funkcję składową „const”. Oznacza to, że zmienny element członkowski lub obiekt może być modyfikowany przez funkcję składową, która jest „stała”.
Dowiemy się więcej o funkcjach i obiektach const, a także o zmiennych składowych w naszych późniejszych samouczkach, kiedy nauczymy się programowania obiektowego w C ++.
Wniosek
Chodzi o specyfikatory typu i klasy pamięci w C ++. Mamy nadzieję, że w tym samouczku udało nam się wyjaśnić wszystkie koncepcje dotyczące klas magazynu i specyfikatorów typu.
W naszym nadchodzącym samouczku dowiemy się więcej o różnych operatorach używanych w C ++ i ich zastosowaniu.
jaki pomysł użyć dla Pythona
=> Sprawdź całą serię szkoleń C ++ tutaj
rekomendowane lektury
- Zmienne w C ++
- Zmienne Pythona
- Interfejs Java i samouczek klasy abstrakcyjnej z przykładami
- Konwersje typów w C ++
- Zmienne VBScript: jak deklarować i używać zmiennych - VBScript Dim
- Zmienne i funkcje narzędzia JMeter
- 10 NAJLEPSZYCH dostawców darmowej pamięci masowej w chmurze (pamięć online 2021)
- Typy testów migracji: ze scenariuszami testów dla każdego typu