Słowa kluczowe
C++ rezerwuje zestaw 92 słów (od C++ 23) na własny użytek. Te słowa to tzw słowa kluczowe (lub słowa zastrzeżone), a każde z tych słów kluczowych ma specjalne znaczenie w języku C++.
Oto lista wszystkich słów kluczowych C++ (do C++23):
- wyrównane
- wyrównanie
- i
- i_równ
- asm
- automatyczny
- bitand
- bitor
- bool
- przerwa
- sprawa
- catch
- char
- char8_t (od C++ 20)
- char16_t
- char32_t
- klasa
- komplet
- koncepcja (od C++ 20)
- const
- consteval (od C++ 20)
- constexpr
- constinit (od C++ 20)
- const_cast
- Kontynuować
- co_await (od C++ 20)
- co_return (od C++ 20)
- co_yield (od C++ 20)
- decltype
- domyślny
- delete
- do
- double
- dynamic_cast
- w przeciwnym razie
- wyliczeniem
- jawnego
- eksport
- zewnętrzny
- fałsz
- float
- for
- przyjaciel
- muszę
- Jeśli
- wbudowane
- int
- long
- zmienny
- przestrzeń nazw
- nowego
- noexcept
- nie
- nie_równ
- nullptr
- operator
- lub
- lub_równ
- prywatny
- protected
- publiczny
- rejestr
- reinterpret_cast
- wymaga (od C++ 20)
- powrót
- krótki
- podpisany
- operator sizeof
- statyczny
- static_assert
- static_cast
- struct
- przełącznik
- template
- this
- wątek_lokalny
- throw
- prawda
- try
- typedef
- typ
- nazwa typu
- unia
- niepodpisany
- za pomocą
- faktyczny
- próżnia
- lotny
- wchar_t
- podczas
- xor
- xor_równ
Oznaczone słowa kluczowe (C++20) zostały dodane w C++20. Jeśli Twój kompilator nie jest zgodny z C++20 (lub ma funkcjonalność C++20, ale jest domyślnie wyłączona), te słowa kluczowe mogą nie działać.
C++ definiuje również specjalne identyfikatory: prześcigać, finał, import, I moduł. Mają one określone znaczenie, gdy są używane w określonych kontekstach, ale nie są zastrzeżone w inny sposób.
Natrafiłeś już na niektóre z tych słów kluczowych, m.in int i powrót. Te słowa kluczowe i specjalne identyfikatory, wraz z zestawem operatorów, definiują cały język C++ (z wyłączeniem poleceń preprocesora). Ponieważ słowa kluczowe i specjalne identyfikatory mają specjalne znaczenie, Twoje IDE prawdopodobnie zmienią kolor tekstu tych słów, aby wyróżnić je na tle innych identyfikatorów.
Kiedy skończysz z tą serią samouczków, zrozumiesz, co robią prawie wszystkie te słowa!
Zasady nazewnictwa identyfikatorów
Dla przypomnienia, nazwa zmiennej (lub funkcji, typu lub innego rodzaju elementu) nazywana jest identyfikatorem. C++ zapewnia dużą elastyczność w zakresie nazywania identyfikatorów według własnego uznania. Istnieje jednak kilka zasad, których należy przestrzegać przy nazewnictwie identyfikatorów:
- Identyfikator nie może być słowem kluczowym. Słowa kluczowe są zastrzeżone.
- Identyfikator może składać się wyłącznie z liter (małych lub dużych), cyfr i znaku podkreślenia. Oznacza to, że nazwa nie może zawierać symboli (z wyjątkiem znaku podkreślenia) ani białych znaków (spacji lub tabulacji).
- Identyfikator musi zaczynać się od litery (małej lub dużej) lub znaku podkreślenia. Nie może zaczynać się od cyfry.
- W C++ rozróżniana jest wielkość liter, dlatego rozróżniane są małe i wielkie litery.
nvaluejest inny niżnValuejest inny niżNVALUE.
Najlepsze praktyki dotyczące nazewnictwa identyfikatorów
Teraz, gdy już wiesz, jak to zrobić możesz nazwij zmienną, porozmawiajmy o tym, jak to zrobić powinieneś nazwij zmienną (lub funkcję).
- W C++ jest zwyczajem, że nazwy zmiennych powinny zaczynać się od małej litery. Jeżeli nazwa zmiennej jest pojedynczym słowem lub akronimem, całość należy zapisać małymi literami.
int value; // conventional
int Value; // unconventional (should start with lower case letter)
int VALUE; // unconventional (should start with lower case letter and be in all lower case)
int VaLuE; // unconventional (see your psychiatrist) ;)Najczęściej nazwy funkcji również zaczynają się od małej litery (choć w tej kwestii nie ma zgody). Będziemy przestrzegać tej konwencji, ponieważ funkcja głównego (który muszą mieć wszystkie programy) zaczyna się od małej litery, podobnie jak wszystkie funkcje w standardowej bibliotece C++.
Nazwy identyfikatorów rozpoczynające się wielką literą są zwykle używane w typach zdefiniowanych przez użytkownika (takich jak struktury, klasy i wyliczenia, o których wszystkie omówimy później).
Jeśli nazwa zmiennej lub funkcji składa się z wielu słów, istnieją dwie typowe konwencje: słowa oddzielone podkreśleniami (czasami nazywane „snap_case”) lub ujęte między nimi (czasami nazywane camelCase, ponieważ wielkie litery wystają jak garby na camel).
int my_variable_name; // conventional (separated by underscores/snake_case)
int my_function_name(); // conventional (separated by underscores/snake_case)
int myVariableName; // conventional (intercapped/camelCase)
int myFunctionName(); // conventional (intercapped/camelCase)
int my variable name; // invalid (whitespace not allowed)
int my function name(); // invalid (whitespace not allowed)
int MyVariableName; // unconventional (should start with lower case letter)
int MyFunctionName(); // unconventional (should start with lower case letter)W tym samouczku zazwyczaj będziemy używać metody intercapped, ponieważ jest ona łatwiejsza do odczytania (łatwo pomylić podkreślenie ze spacją w gęstych blokach kodu). Ale często można spotkać jedno i drugie — standardowa biblioteka C++ używa metody podkreślenia zarówno w przypadku zmiennych, jak i funkcji. Czasami można zobaczyć kombinację tych dwóch: podkreśleń używanych w przypadku zmiennych i kropek używanych w funkcjach.
Warto zauważyć, że jeśli pracujesz w kodzie innej osoby, ogólnie uważa się, że lepiej jest dopasować styl kodu, w którym pracujesz, niż sztywno przestrzegać konwencji nazewnictwa określonych powyżej.
Najlepsza praktyka
Pracując w istniejącym programie, używaj konwencji tego programu (nawet jeśli nie są one zgodne z nowoczesnymi najlepsze praktyki). Pisząc nowe programy, korzystaj z nowoczesnych, najlepszych praktyk.
- Unikaj nadawania nazw identyfikatorom zaczynającym się od podkreślenia. Chociaż składniowo są one zgodne z prawem, nazwy te są zazwyczaj zarezerwowane do użytku z systemem operacyjnym, biblioteką i/lub kompilatorem.
- Nazwy identyfikatorów powinny jasno wyjaśniać, co oznacza przechowywana przez nie wartość (szczególnie jeśli jednostki nie są oczywiste). Identyfikatory należy nazwać w taki sposób, aby ktoś, kto nie ma pojęcia, co robi Twój kod, mógł jak najszybciej to rozgryźć. Kiedy za 3 miesiące spojrzysz na swój program ponownie, zapomnisz, jak to działa, i podziękujesz sobie za wybranie nazw zmiennych, które mają sens.
Jednak nadanie trywialnemu identyfikatorowi zbyt złożonej nazwy utrudnia ogólne zrozumienie tego, co robi program prawie w takim samym stopniu, jak nadanie nietrywialnemu identyfikatorowi nieodpowiedniej nazwy. Dobrą zasadą jest, aby długość identyfikatora była proporcjonalna do tego, jak konkretny i dostępny jest identyfikator. Oznacza to:
- Identyfikator, który istnieje tylko dla kilku instrukcji (np. w treści krótkiej funkcji) może mieć krótszą nazwę.
- Identyfikator, który jest dostępny z dowolnego miejsca, może mieć dłuższą nazwę.
- Identyfikator reprezentujący nieokreśloną liczbę (np. wszystko, co podaje użytkownik) może mieć krótszą nazwę.
- Identyfikator reprezentujący konkretną wartość (np. długość nogawki w milimetrach) powinna mieć dłuższą nazwę.
| int count | Zły | Co oznacza c przed „count”? |
| int clientCount | Dobrze | Wyczyść, co liczymy |
| int i | Albo | OK, jeśli użycie jest trywialne, w przeciwnym razie źle |
| int indeks | Albo | OK<<<M21>>>OK, jeśli oczywiste, co indeksujemy |
| int totalScore | Albo | OK, jeśli punktowana jest tylko jedna rzecz, w przeciwnym razie zbyt niejednoznaczne |
| int count | Zły | Nie zaczynaj nazw od podkreślenia |
| int count | Albo | OK, jeśli jest oczywiste, co liczymy |
| int data | Zły | Jakiego rodzaju dane? |
| int time | Zły | Czy to jest w sekundach, minutach czy godziny? |
| int minuty, które upłynęły | Albo | OK, jeśli oczywiste, od czego to upłynęło |
| int x1, x2 | Albo | OK, jeśli użycie jest trywialne, w przeciwnym razie źle |
| int userinput1, userinput2 | Zły | Trudno rozróżnić między nimi ze względu na długą nazwę |
| int numApples | Dobrze | Opisowe |
| int monstersZabite | Dobrze | Opisowe |
- Unikaj skrótów, chyba że są powszechne i jednoznaczne (np.
num,cm,idx).
Kluczowa informacja
Kod jest częściej czytany niż zapisywany, zatem czas zaoszczędzony podczas pisania kodu jest czasem, który każdy czytelnik, łącznie z Tobą w przyszłości, zmarnuje podczas jego czytania. Jeśli chcesz szybciej pisać kod, użyj funkcji autouzupełniania w swoim edytorze.
- W przypadku deklaracji zmiennych przydatne może być użycie komentarza, aby opisać, do czego zmienna będzie używana, lub wyjaśnić wszystko, co może nie być oczywiste. Załóżmy na przykład, że zadeklarowaliśmy zmienną, która ma przechowywać liczbę znaków w fragmencie tekstu. Czy tekst „Hello World!” mają 10, 11, 12 znaków? Zależy to od tego, czy uwzględniamy białe znaki, czy znaki interpunkcyjne. Zamiast nazywać zmienną
numCharsIncludingWhitespaceAndPunctuation, co jest dość długie, dobrze umieszczony komentarz na linii deklaracji lub nad nią powinien pomóc użytkownikowi to zrozumieć:
// a count of the number of chars in a piece of text, including whitespace and punctuation
int numChars {};Czas quizu
Pytanie nr 1
Na podstawie tego, jak powinieneś nazwijesz zmienną, wskaż, czy każda nazwa zmiennej jest konwencjonalna (zgodnie z najlepszymi praktykami), niekonwencjonalna (kompilator zaakceptuje, ale nie będzie przestrzegać najlepszych praktyk) lub nieprawidłowa (nie zostanie skompilowana) i dlaczego.
int suma {};
(Załóżmy, że jest oczywiste, co sumujemy)
Pokaż rozwiązanie
int _apples {};
Pokaż rozwiązanie
int WARTOŚĆ {};
Pokaż rozwiązanie
int nazwa mojej zmiennej {};
Pokaż rozwiązanie
int TotalCustomers {};
Pokaż rozwiązanie
int void {};
Pokaż rozwiązanie
int numFruit {};
Pokaż rozwiązanie
int 3some {};
Pokaż rozwiązanie
int metrów_rury {};
Pokaż rozwiązanie

