5.x — Podsumowanie rozdziału 5 i quiz

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::stringunieważ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?

Pokaż rozwiązanie

Dlaczego zmienne const/constexpr są zwykle lepszym wyborem niż #definiowane stałe symboliczne?

Pokaż rozwiązanie

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

Pokaż rozwiązanie

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?

Pokaż rozwiązanie

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).

Pokaż wskazówkę

Pokaż rozwiązanie

Pytanie #5

W rozwiązaniu powyższego quizu, dlaczego nie można zmienna age1 w main be constexpr?

Pokaż rozwiązanie

guest
Twój adres e-mail nie zostanie wyświetlony
Znalazłeś błąd? Zostaw komentarz powyżej!
Komentarze związane z poprawkami zostaną usunięte po przetworzeniu, aby pomóc zmniejszyć bałagan. Dziękujemy za pomoc w ulepszaniu witryny dla wszystkich!
Awatary z https://gravatar.com/ są połączone z podanym adresem e-mail.
Powiadamiaj mnie o odpowiedziach:  
338 Komentarze
Najnowsze
Najstarsze Najczęściej głosowane
Wbudowane opinie
Wyświetl wszystkie komentarze