Facebook - konwersja

  • nowość

Opus magnum C++. Wyprawa w głąb C++20. Tom 5 - ebook

Wydawnictwo:
Format:
PDF
Data wydania:
28 lipca 2026
79,00
7900 pkt
punktów Virtualo

Opus magnum C++. Wyprawa w głąb C++20. Tom 5 - ebook

Poznawaj C++20 tak, jakby tłumaczył Ci go doświadczony kolega, z którym siedzisz przy jednym biurku

 

C++20 to największa od czasu wersji z numerem 11 aktualizacja języka C++. Wprowadza dziesiątki nowych mechanizmów, pozwalających pisać kod, który jest nowocześniejszy, bezpieczniejszy, czytelniejszy i wygodniejszy w utrzymaniu.

Wyprawa w głąb C++20 to kolejny tom cenionego cyklu Opus magnum C++, poświęconego najważniejszym zagadnieniom związanym z językiem C++. Autor, korzystając z wieloletniego doświadczenia zdobytego w międzynarodowych projektach, prowadzi czytelników krok po kroku przez nowe możliwości standardu C++20. Tak jak w poprzednich tomach, trudniejsze kwestie wyjaśnia prostym, przyjaznym językiem, a dodatkowo ilustruje je licznymi przykładami i praktycznymi programami.

Czego się nauczysz?

  • Poznasz nowe atrybuty, dzięki którym skuteczniej porozumiesz się z kompilatorem
  • Nauczysz się korzystać z trójstanowego operatora porównania (<=>)
  • Odkryjesz nowoczesne metody formatowania tekstu z użyciem std::format
  • Poznasz mechanizmy std::ranges, które pozwalają wygodniej przetwarzać sekwencje danych
  • Dowiesz się, czym są koncepty (concepts) i jak dzięki nim tworzyć bezpieczniejsze i bardziej przejrzyste szablony
  • Nauczysz się budować moduły - jako nowoczesny sposób organizowania dużych projektów
  • Poznasz korutyny, jedną z najciekawszych i najbardziej nowatorskich możliwości C++20

Jeżeli znasz wcześniejsze standardy C++, ta książka pokaże Ci, jak ogromny krok naprzód wykonał współczesny C++ i pomoże w pełni wykorzystać jego nowe możliwości.

Spis treści

Spis treści

0 Proszę tego nie czytać 1

  • 0.1 Wyruszamy na kolejną wyprawę! 1

1 Nowe atrybuty w C++20 3

  • 1.1 Atrybuty [[likely\ i [[unlikely\ 3
  • 1.2 Atrybut [[nodiscard\ z tekstem 5
  • 1.3 Atrybut [[no_unique_address\ do optymalizacji pamięci obiektu 6
  • 1.4 Ćwiczenia 8

2 Trójstanowy operator porównania <=> 9

  • 2.1 Operator porównania <=> dla typów całkowitych 9
  • 2.2 Operator <=> wobec typów zmiennoprzecinkowych 10
  • 2.3 Trzeci możliwy typ rezultatu <=>, czyli porównanie słabe (weak_ordering) 13
  • 2.4 Operator <=> można zadeklarować jako = default 17
  • 2.5 Składniki typu zmiennoprzecinkowego a = default 19
  • 2.6 Konwersje między kategoriami porównañ 22
  • 2.7 Jak strumieniem cout wypisać rezultat porównania słownie 23
  • 2.8 Ćwiczenia 24

3 using enum - co za ulga w C++20! 26

  • 3.1 Zwykłe enum (tzw. plain enum) 26
  • 3.2 enum class - czyli zakresowy enum 27
  • 3.3 C++20 pomaga uproscić zapis (using enum) 28
  • 3.4 Ćwiczenia 31

4 Nowoczesne formatowanie tekstu - poznaj std::format 33

  • 4.1 Funkcja std::format 33
  • 4.2 Znacznik formatujący 34
  • 4.3 Pole: id - indeks 35
  • 4.4 Dwukropek - rozpoczyna część z określeniami sposobu formatowania 35
  • 4.5 Pole formatowania: szerokość 35
    • 4.5.1 Szerokość sterowana argumentem (dynamicznie) 36
  • 4.6 Pole: wyrównanie (justowanie) 37
  • 4.7 Pole: wypełnienie (char) 37
  • 4.8 Pole: znak (liczby dodatniej lub ujemnej) 38
  • 4.9 Pole: prefix (podstawa systemu liczenia) 38
  • 4.10 Pole: wiodące zera 38
  • 4.11 Pole: specyfikacja typu wypisywania 39
  • 4.12 Pole: precyzja, czyli dokładność 42
    • 4.12.1 Na zakończenie - dynamiczne podawanie dokładności 44
  • 4.13 Przykłady złożonych znaczników 44
  • 4.14 Ćwiczenia 45

5 Span 47

  • 5.1 Geneza, czyli skąd ten pomysł? 47
  • 5.2 std::span 51
  • 5.3 Dalsze korzyści z klasy span<T> 54
  • 5.4 Ciekawe funkcje składowe klasy std::span 57
  • 5.5 Ćwiczenia 58

6 consteval, constinit - kiedy warto liczyć w compile-time 60

  • 6.1 consteval - funkcje wykonywane tylko w trakcie kompilacji 60
    • 6.1.1 Tablica liczb obliczana w czasie kompilacji programu 64
  • 6.2 constinit - inicjalizacja obiektów statycznych w czasie kompilacji 67
    • 6.2.1 constinit - bezpieczna inicjalizacja zmiennych globalnych 69
    • 6.2.2 Dobre praktyki: jak definiować i inicjalizować zmienne globalne 71
  • 6.3 Kilka przypomnień i przestróg 72
  • 6.4 Ćwiczenia - consteval i constinit 72

7 template<auto> w nowej odsłonie 74

  • 7.1 Co to jest NTTP? 74
  • 7.2 Przykłady różnych NTTP 75
    • 7.2.1 Stała zmiennoprzecinkowa jako NTTP w szablonie funkcji 75
    • 7.2.2 Stała zmiennoprzecinkowa jako NTTP w szablonie klasy 76
    • 7.2.3 Stała będąca obiektem klasy literalnej 77
    • 7.2.4 Stała będąca referencją do C-stringu 78
    • 7.2.5 Stała będąca pojemnikiem typu std::array 80
    • 7.2.6 Stały obiekt struktury (konfiguracja algorytmu) 80
    • 7.2.7 Stała NTTP będąca funkcja lambda z przydomkiem constexpr 82
  • 7.3 Podsumowanie 83
  • 7.4 Ćwiczenia 84

8 Nowości w C++20 dotyczące lambd 88

  • 8.1 Przypomnienie 88
  • 8.2 C++20 - lambdy z listą parametrów szablonu 89
  • 8.3 Ćwiczenia 91

9 Koncepty w C++20 - jak szepnąć kompilatorowi, czego oczekujesz 93

  • 9.1 Wymogi i koncepty 93
  • 9.2 Gdzie można narzucać wymagania (koncepty)? 96
  • 9.3 Porozmawiajmy bliżej o słowie kluczowym requires 97
  • 9.4 Z czego może składać się zbiór wymogów? 98
  • 9.5 Koncepty z biblioteki standardowej (koncepty standardowe) 99
    • 9.5.1 Podstawowe koncepty (warunki) dotyczące typów i ich relacji 100
    • 9.5.2 Koncepty związane z porównywaniem wartości 102
    • 9.5.3 Koncepty, które sprawdzają zachowania obiektów 102
    • 9.5.4 Koncepty dotyczące elementów, które można wywołać jak funkcje 103
    • 9.5.5 Koncept dotyczący wyniku wywołania 104
    • 9.5.6 Typ relacyjny 105
    • 9.5.7 Koncepty relacyjne (porównania i porządek) 107
  • 9.6 Kwestia stylu 111
  • 9.7 Łączenie konceptów: koniunkcja i alternatywa 112
  • 9.8 Koncepty użyte w wyrażeniach lambda 114
    • 9.8.1 Parametry o typie wnioskowanym (auto) - czyli lambda bez jawnego <...> 114
    • 9.8.2 Lambda z parametrami szablonu - czyli lambda mająca <...> 116
  • 9.9 Co tak naprawdę zmieniają koncepty w C++20? 117
  • 9.10 Ćwiczenia 117

10 range - zakres sekwencji elementów 119

  • 10.1 Przypomnienie o algorytmie std::sort 119
  • 10.2 Wkraczamy w krainę ranges 121
  • 10.3 Widoki na panoramę górską, czyli views 124
  • 10.4 Zestawienie ciekawych funkcji-adapterów views:: 131
  • 10.5 Adapter views::iota generujący ciąg liczb i widok 133
    • 10.5.1 Jak to wszystko właściwie działa "pod maską"? 135
  • 10.6 Adapter views::elements 135
  • 10.7 Adaptery views::values, views::keys 136
  • 10.8 Adaptery strukturalne views::join, views::split i views::common 138
    • 10.8.1 Adapter views::common 141
  • 10.9 Od strumienia do sekwencji: wczytywanie danych z użyciem ranges 142
    • 10.9.1 Idea: wczytywanie danych za pomocą biblioteki ranges 142
    • 10.9.2 Widok interpretujący strumień znaków ze stringu 143
    • 10.9.3 Widok interpretujący strumień znaków z pliku 145
    • 10.9.4 Widok interpretujący strumień z klawiatury jako dane typu int 147
  • 10.10 Pojedynek strumień versus widok 148
  • 10.11 Ćwiczenia 150

11 Nowe narzędzie: moduły 153

  • 11.1 Pliki nagłówkowe - rozwiązanie z czasów przed C++20 153
  • 11.2 Moduły - lepsza wersja nagłówków 154
  • 11.3 Jak zbudowany jest plik modułu? 157
  • 11.4 Jak to działa - co robi kompilator, gdy spotyka moduł? 163
  • 11.5 Definicja klasy w module 163
    • 11.5.1 Mała, krótka klasa w module 163
    • 11.5.2 Moduł z bardziej rozbudowaną klasą 166
    • 11.5.3 Kiedy użyć którego sposobu? 172
  • 11.6 Organizacja wiekszych modułów 173
    • 11.6.1 Moduł z partycjami 174
    • 11.6.2 Blok export i blok export namespace 179
    • 11.6.3 Sekcja prywatna w deklaracji modułu 182
  • 11.7 Importowanie biblioteki standardowej 187
  • 11.8 Jak udało mi się uruchomić moduły w praktyce? 187
    • 11.8.1 Konfiguracja krok po kroku w środowisku Qt Creator 188
  • 11.9 Ćwiczenia 191

12 Korutyny 193

  • 12.1 Skąd ten pomysł? 193
  • 12.2 Korutyna - pierwsze starcie 197
  • 12.3 Korutyna - jak to wszystko może działać? 200
  • 12.4 Co naprawdę robi kompilator przy wywołaniu korutyny? 201
    • 12.4.1 Ad krok 2. - Jak naprawdę zbudowany jest Tsterownik_pracy? 204
    • 12.4.2 Ad krok 3. - Co w programie robi initial_suspend()? 207
    • 12.4.3 Ad krok 5. - Instrukcja co_yield to tak naprawdę jest co_await 208
    • 12.4.4 Ad krok 7. - Co robi funkcja final_suspend()? 210
  • 12.5 Korutyna, która sukcesywnie dostarcza liczb (generator liczb) 212
  • 12.6 Dwukierunkowa korutyna - rozmowa zamiast monologu 215
  • 12.7 Korutyny, które przekazują sobie sterowanie 221
    • 12.7.1 Przykład programu z dwoma korutynami, które przekazuja sobie sterowanie 223
  • 12.8 Gdy korutyna mówi: "Obudź mnie później" 231
  • 12.9 Najprostsza pętla zdarzeñ 235
  • 12.10 Refleksje o mechanice kończenia działania korutyny 240
  • 12.11 Praktyczne użycie - od mechaniki do narzędzia 241
    • 12.11.1 ETAP 1. Sterownik, który zwraca wartość 242
    • 12.11.2 ETAP 2. Wersja z pilnowaniem własności ramki 244
    • 12.11.3 ETAP 3. Gdy jedna korutyna czeka na drugą 247
    • 12.11.4 ETAP 4. Wyjatki i propagacja błędów w korutynach 254
  • 12.12 Pojedynek korutyny versus wątki 258
  • 12.13 Symulacja komunikacji klient - serwer 261
    • 12.13.1 To jest paragraf dla zaawansowanych, znających operacje sieciowe 269
  • 12.14 Na zakończenie 272
  • 12.15 Ćwiczenia 273

13 Posłowie 274

Skorowidz 276

  • !
    • #include compare 12
    • #pragma once 154
  • A
    • adapter
    • adaptery
    • algorytm std::sort 119-120
    • algorytmy a span 56
    • alias enum class 31
    • alternatywa konceptów 112-113
    • animacja - dławienie się 197
    • architektura asynchroniczna 239
    • atrybut
    • automat stanów 197
    • await_ready() 219
    • await_resume() 219
    • await_suspend() 219
    • await_transform 219
    • awaiter 209
  • B
    • BMI - Binary Module Interface 163
    • biblioteka
    • blok
    • bębenkowy licznik 186
  • C
    • ciąg Fibonacciego 64
    • ciągłe sekwencje 47
    • co_await - z argumentem 238
    • co_await read(socket) 269
    • co_await write(socket) 269
    • co_return 242
    • co_yield 199, 203
    • common_reference_with 100
    • common_with 100
    • compare (#include) 12
    • consteval 60-73
    • constexpr
    • constinit 67-71
    • convertible_to 100
    • copyable 102-103
    • coroutine_handle promise_type > 206
    • coroutine_handle< promise_type > 228
    • część implementacyjna modułu 171
    • część interfejsowa modułu 156
    • część przedmodułowa 171
  • D
    • deklaracja
    • derived_from 100
    • dokładność podawana dynamicznie 44
    • done() 240
    • dwukropek w polu formatowania 35
    • dynamiczne podawanie dokładności 44
    • dyrektywy preprocesora
    • dyspozytor 221, 227, 240, 269
    • dławienie się animacji 197
  • E
    • eksportowane nazwy modułu 156
    • enum class 27
    • enum plain 26
    • equality_comparable 102
    • equality_comparable_with 102
    • equivalence_relation 107
    • equivalent 11, 13
    • export module - instrukcja 157-158
    • extern constinit 71
  • F
    • Fibonacciego ciąg 64
    • fabryka widoków 145
    • final_suspend() 201, 210
    • floating_point (koncept) 100
    • format 33
    • from_promise(*this) 206
    • funkcja format a mainpulatory 40
    • funkcja natychmiastowa 60
  • G
    • generator liczb 212-214
    • get_return_object 202, 206
    • globalny fragment modułu 157, 160
    • greater 11
  • H
    • harmonogram 239
  • I
    • immediate function 60
    • implementacja 166
    • implementacyjna
    • import partycji modułu 177
    • importowanie biblioteki standardowej 187
    • indeks
    • initial_suspend() 201-202, 207
    • instrukcja module 157
    • integral (koncept) 100
    • interfejs modułu 182
    • interfejs znaczeniowy 117
    • invocable 103
    • iteracja 121
    • ixx 166
  • J
    • jednoprzebiegowy zakres 142
    • jednoznaczna własność ramki 244
    • justowanie 37
  • K
    • kategorie znaczeniowe 95
    • klasa
    • klient - serwer komunikacja 261-271
    • komunikacja klient - serwer 261-271
    • koncept 93
    • koncepty
    • koniunkcja konceptów 112-113
    • konstruktor przenoszący 246
    • konwersje między kategoriami porównań 22
    • korutyna
    • koszt przełączania 259
  • L
    • lambda
    • lenistwo 128-130
    • less 11
    • liczba jednoczesnych zadań 260
    • licznik bębenkowy 186
    • likely - atrybut 3
    • lokalny zakres
  • M
    • makrodefinicje
    • manipulatory a funkcja format 40
    • maszyna stanów 197
    • module
    • moduł
    • moduły 153-192
    • movable 102
  • N
    • natychmiastowa funkcja 60
    • nazwa kwalifikowana
    • nazwany warunek kompilacyjny 94
    • nodiscard - atrybut 5
    • noop_coroutine() 228
    • nttp - NTTP 74
  • O
    • One Definition Rule - ODR 154
    • obiekt
    • odraczanie, rodzaj oszczędności 130
    • operacje asynchroniczne 269
    • operacje sieciowe 268
    • operator
    • operator statku kosmicznego 9
    • operatory porównania w pakiecie 19
  • P
    • Perl 9
    • partial_ordering 11, 23
    • partycje modułu 174
    • pieczenie herbatników 124
    • plain enum 26
    • plik
    • pole formatowania 34
    • policy_type 200
    • port USB - jako span 54
    • poziome przekazanie sterowania korutyn 223
    • pragma once 154
    • precyzja czyli dokładność 42-43
    • predicate 105
    • prefix (podstawa systemu liczenia) 38
    • preprocesora dyrektywy
    • private module fragment 183
    • promise_type 200
    • protokół oczekiwania 219
    • prywatny fragment modułu 182
    • przekazywanie sterowania 230
    • przenoszący operator przypisania 246
    • przeplatanie operacji READ i WRITE 268
    • przeładowanie trójstanowego op. 15
    • przełączanie wykonywania 259
    • przynależność modułu 171
    • punkty zawieszenia 220
    • pusta klasa 6
    • pętla zdarzeń 235-239
  • R
    • ramka korutyny 200-201
    • ranges - biblioteka 119
    • ranges::filter 127
    • ranges::find 124
    • ranges::istream_view 144
    • ranges::sort 123
    • ranges::transform 124
    • regular 103
    • regular_invocable 103
    • relacyjny typ 105
    • relation 107
    • requires 95
    • resume() 198, 203
    • rethrow_exception() 254
    • return_void() 201
    • rezultat porównania słownie 23
    • równoległość 260
  • S
    • śruby - przykład 14
    • same_as 100
    • scheduler 221, 239-240
    • sekcja
    • sekcja globalna modułu 157
    • sekwencja elementów 121
    • semiregular 102
    • serwer sieciowy 261
    • signed_integral (koncept) 100
    • spaceship operator 9
    • span 51-53
    • span::back() 58
    • span::data() 58
    • span::empty() 58
    • span::first 58
    • span::front() 58
    • span::last 58
    • span::size() 58
    • span::size_bytes() 58
    • span::subspan 58
    • spanning pointer 51
    • specyfikacja typu wypisywania 39-41
    • statku kosmicznego - operator 9
    • stałe odwieczne 63
    • std::common_reference_with 100
    • std::common_with 100
    • std::convertible_to 100
    • std::copyable 102-103
    • std::derived_from 100
    • std::equality_comparable 102
    • std::equality_comparable_with 102
    • std::equivalence_relation 107
    • std::floating_point 100
    • std::integral 100
    • std::invocable 103
    • std::movable 102
    • std::predicate 105
    • std::regular 103
    • std::regular_invocable 103
    • std::relation 107
    • std::same_as 100
    • std::semiregular 102
    • std::signed_integral 100
    • std::sort 119-120
    • std::strict_weak_order 107
    • std::totally_ordered 102
    • std::totally_ordered_with 102
    • std::unsigned_integral 100
    • sterownik korutyny 202
    • sterownik pracy korutyny 204
    • strażnik nagłówka 154
    • strict_weak_order 107
    • string formatujący 33
    • strong_ordering 10, 23
    • suspend_always 207
    • suspend_never 207
    • system asynchroniczny 239
    • szablonowa lambda 89
    • szerokość - pole formatowania 35-36
    • szerokość sterowana argumentem (dynamicznie) 36
  • T
    • tablica
    • template i auto 74
    • totally_ordered 102
    • totally_ordered_with 102
    • trójstanowy operator porównania 9-25
    • typ o jawnej strukturze 84
    • typ relacyjny 105
  • U
    • USB port jako span 54
    • uchwyt korutyny 228
    • unhandled_exception() 240, 254
    • union 7
    • unlikely - atrybut 4
    • unordered 11
    • unsigned_integral (koncept) 100
    • using enum 28-30
    • using namespace std
  • V
    • view 124-130
    • views::all 132
    • views::common 132, 138-141
    • views::counted 132
    • views::drop 132
    • views::drop_while 131
    • views::elements 131, 135
    • views::empty 132
    • views::filter 131
    • views::iota 132-134
    • views::istream 144
    • views::join 132, 138-141
    • views::key 132
    • views::keys 136-137
    • views::reverse 129, 132
    • views::split 132, 138-141
    • views::take 132
    • views::take_while 129, 131
    • views::transform 128, 131
    • views::values 132, 136-137
  • W
    • warunek wznowienia korutyny 239
    • weak_ordering 13-16, 23
    • widok (view) 128
    • wiodące zera 38
    • wnętrze modułu 156, 160
    • wyjątki w korutynach 254
    • wymogi
    • wypełnienie 37
    • wypisywanie liczb zmiennoprzecinkowych 40
    • wyrównanie 37
    • właściciel ramki korutyny 241
    • wątki a korutyny 258-260
  • Y
    • yield 199
    • yield_value 201, 208
  • Z
    • zagnieżdżenie klasy 227
    • zakres
    • zakresowy enum 27
    • zakresowy for a span 56
    • zasada jednej definicji (ODR) 154, 163
    • zbiór wymogów 98
    • zdarzeń pętla 235-239
    • zewnętrzny wizerunek (interfejs) modułu 182
    • znacznik formatujący 34
    • znaczniki stringu formatującego 33
    • znak (liczby dodatniej lub ujemnej) 38
    • zniszczenie korutyn 268
    • zużycie pamięci 259

Kategoria: Programowanie
Zabezpieczenie: Watermark
Watermark
Watermarkowanie polega na znakowaniu plików wewnątrz treści, dzięki czemu możliwe jest rozpoznanie unikatowej licencji transakcyjnej Użytkownika. E-książki zabezpieczone watermarkiem można odczytywać na wszystkich urządzeniach odtwarzających wybrany format (czytniki, tablety, smartfony). Nie ma również ograniczeń liczby licencji oraz istnieje możliwość swobodnego przenoszenia plików między urządzeniami. Pliki z watermarkiem są kompatybilne z popularnymi programami do odczytywania ebooków, jak np. Calibre oraz aplikacjami na urządzenia mobilne na takie platformy jak iOS oraz Android.
ISBN: 978-83-289-4315-5
Rozmiar pliku: 25 MB

BESTSELLERY

Menu

Zamknij