Przegląd rozdziału
A stała to wartość, która nie może być zmieniana w trakcie wykonywania programu. C++ obsługuje dwa typy stałych: stałe nazwane i literały.
A stała nazwana to stała wartość powiązana z identyfikatorem. A Stała literałowa jest wartością stałą nie powiązaną z identyfikatorem.
Zmienna, której wartości nie można zmienić, nazywana jest zmienną stałą. Słowo kluczowe const słowem kluczowym, które może zostać użyte do utworzenia zmiennej stałej. Zmienne stałe muszą zostać zainicjowane. Unikaj używania const podczas przekazywania wartości lub zwracania wartości.
A kwalifikator typu to słowo kluczowe stosowane do typu, które modyfikuje zachowanie tego typu. Począwszy od C++23, C++ obsługuje tylko const i volatile jako kwalifikatory typu.
A wyrażenie stałe jest wyrażeniem, które można ocenić w czasie kompilacji. Wyrażenie, które nie jest wyrażeniem stałym, jest czasami nazywane wyrażeniem wykonawczym.
A stała czasu kompilacji jest stałą, której wartość jest znana w czasie kompilacji. stała wykonawcza jest stałą, której wartość inicjująca jest znana dopiero w czasie wykonywania.
A constexpr zmienna musi być stałą czasową kompilacji i zainicjowaną wyrażeniem stałym. Parametry funkcji nie mogą być constexpr.
Literały są wartościami wstawianymi bezpośrednio do kodu. Literały mają typy, a sufiksy literałów mogą służyć do zmiany typu literału z typu domyślnego.
A liczba magiczna to literał (zwykle liczba), który albo ma niejasne znaczenie, albo może wymagać późniejszej zmiany. Nie używaj magicznych liczb w swoim kodzie. Zamiast tego używaj stałych symbolicznych.
W życiu codziennym liczymy liczbami dziesiętnymi , które mają 10 cyfr. Komputery używają binarny, który ma tylko 2 cyfry. C++ obsługuje także ósemkowy (podstawa 8) i szesnastkowy (podstawa 16). Oto wszystkie przykłady systemów liczbowych, które są zbiorami symboli (cyfr) używanych do reprezentowania liczb.
A ciąg to zbiór kolejnych znaków używany do reprezentowania tekstu (takiego jak nazwy, słowa i zdania). Literały łańcuchowe są zawsze umieszczane pomiędzy podwójnymi cudzysłowami. Literały łańcuchowe w C++ to ciągi w stylu C, które mają dziwny typ, z którym trudno pracować.
std::string oferuje łatwy i bezpieczny sposób radzenia sobie z ciągami tekstowymi. std::string znajduje się w nagłówku <string>. std::string jest kosztowny w inicjalizacji (lub przypisaniu) i kopiowaniu.
std::string_view zapewnia dostęp tylko do odczytu do istniejącego ciągu (literału ciągu w stylu C, std::stringu lub tablicy znaków) bez tworzenia kopii. Widok std::string_view oglądający zniszczony ciąg znaków jest czasami nazywany widokiem wiszącym . Kiedy a std::string zostanie zmodyfikowany, wszystkie widoki w tym std::string są unieważniają, co oznacza, że te widoki są teraz nieważne. Użycie unieważnionego widoku (innego niż jego ponowna weryfikacja) spowoduje niezdefiniowane zachowanie.
Ponieważ w całym programie istnieją literały łańcuchowe w stylu C, można ustawić std::string_view na literał łańcuchowy w stylu C, a nawet zwrócić taki std::string_view z funkcji.
A podciąg to ciągła sekwencja znaków w istniejącym string.
Czas quizu
Pytanie nr 1
Dlaczego stałe nazwane są często lepszym wyborem niż stałe literałowe?
Dlaczego zmienne const/constexpr są zwykle lepszym wyborem niż #definiowane stałe symboliczne?
Pytanie nr 2
Znajdź 3 problemy poniżej kod:
#include <cstdint> // for std::uint8_t
#include <iostream>
int main()
{
std::cout << "How old are you?\n";
std::uint8_t age{};
std::cin >> age;
std::cout << "Allowed to drive a car in Texas: ";
if (age >= 16)
std::cout << "Yes";
else
std::cout << "No";
std::cout << '.\n';
return 0;
}Przykładowe pożądane wyjście:
How old are you? 6 Allowed to drive a car in Texas: No
How old are you? 19 Allowed to drive a car in Texas: Yes
Pytanie nr 3
Jakie są podstawowe różnice między std::string i std::string_view?
Co może pójść nie tak, gdy std::string_view?
Pytanie nr 4
Napisz program, który zapyta o imię i wiek dwóch osób, a następnie wyświetli, która osoba jest starsza.
Oto przykładowy wynik jednego uruchomienia programu:
Enter the name of person #1: John Bacon Enter the age of John Bacon: 37 Enter the name of person #2: David Jenkins Enter the age of David Jenkins: 44 David Jenkins (age 44) is older than John Bacon (age 37).
Pytanie #5
W rozwiązaniu powyższego quizu, dlaczego nie można zmienna age1 w main be constexpr?

