Opus magnum C++. Wyprawa w głąb C++20. Tom 5 Supraśl

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 …

od 51,50 Najbliżej: 15 km

Liczba ofert: 1

Oferta sklepu

Opis

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 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 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 O autorze: Dr hab. Jerzy Grębosz – autor książek o języku C++, fizyk, popularyzator, podróżnik-antropolog. Pracownik Instytutu Fizyki Jądrowej imienia Henryka Niewodniczańskiego Polskiej Akademii Nauk (IFJ PAN). Popularyzator nauki – wszechświat wyjaśnia w sposób kreatywny i niekonwencjonalny, między innymi poprzez widowiska artystyczne, animacje komputerowe, czy też autorskie spektakle i filmy popularnonaukowe (nagradzane na przeglądach i festiwalach filmów naukowych i edukacyjnych, wykorzystywane do nauki w szkołach). Autor publikacji z zakresu fizyki jądrowej i języka C++. Jego książki – „Symfonia C++ Standard” oraz „Pasja C++” – są podręcznikami na wielu polskich uniwersytetach. Z zamiłowania podróżnik – antropolog. W swoich podróżach na wyspy Oceanii poznaje pierwotne plemiona i ich kulturę. Więcej informacji: https://www.ifj.edu.pl/~grebosz/

Specyfikacja

Podstawowe informacje

Autor
  • Jerzy Grębosz
Wybrani autorzy
  • Jerzy Grębosz
Wydawnictwo
  • Helion
Okładka
  • Miękka
Rok wydania
  • 2026
Ilość stron
  • 296
Tematyka
  • Programowanie
ISBN
  • 9788328939844