ebook img

C++20. Get the Details PDF

600 Pages·2021·11.711 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview C++20. Get the Details

C++20 Rainer Grimm Thisbookisforsaleathttp://leanpub.com/c20 Thisversionwaspublishedon2021-08-28 ThisisaLeanpubbook.LeanpubempowersauthorsandpublisherswiththeLeanPublishingprocess. LeanPublishingistheactofpublishinganin-progressebookusinglightweighttoolsandmany iterationstogetreaderfeedback,pivotuntilyouhavetherightbookandbuildtractiononceyoudo. ©2020-2021RainerGrimm Contents ReaderTestimonials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii SpecialFonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii SpecialBoxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii SourceCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii CompilationofthePrograms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii HowshouldyoureadtheBook? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v PersonalNotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v AboutMe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi About C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1. HistoricalContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1 C++98 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 C++03 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 TR1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 C++11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.5 C++14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.6 C++17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Standardization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.1 Stage3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 Stage2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3 Stage1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 A Quick Overview of C++20 . . . . . . . . . . . . . . . . . . . . . . . . 6 3. C++20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 CONTENTS 3.1 TheBigFour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.1.1 Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.1.2 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.1.3 TheRangesLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.1.4 Coroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 CoreLanguage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2.1 Three-WayComparisonOperator. . . . . . . . . . . . . . . . . . . . . . . . 13 3.2.2 DesignatedInitialization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2.3 constevalandconstinit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2.4 TemplateImprovements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2.5 LambdaImprovements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2.6 NewAttributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.3 TheStandardLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.3.1 std::span . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.3.2 ContainerImprovements . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.3.3 ArithmeticUtilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.3.4 FormattingLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.3.5 CalendarandTimeZones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.4 Concurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.4.1 Atomics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.4.2 Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.4.3 LatchesandBarriers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.4.4 CooperativeInterruption . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.4.5 std::jthread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.4.6 SynchronizedOutputstreams . . . . . . . . . . . . . . . . . . . . . . . . . . 28 The Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4. CoreLanguage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.1 Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.1.1 TwoWrongApproaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.1.2 AdvantagesofConcepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.1.3 Thelong,longHistory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.1.4 UseofConcepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.1.5 ConstrainedandUnconstrainedPlaceholders . . . . . . . . . . . . . . . . . 53 4.1.6 AbbreviatedFunctionTemplates . . . . . . . . . . . . . . . . . . . . . . . . 55 4.1.7 PredefinedConcepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.1.8 DefineConcepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.1.9 RequiresExpressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 4.1.10 User-DefinedConcepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.2 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4.2.1 WhydoweneedModules? . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 CONTENTS 4.2.2 Advantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.2.3 AFirstExample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.2.4 CompilerSupport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.2.5 Export . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 4.2.6 GuidelinesforaModuleStructure . . . . . . . . . . . . . . . . . . . . . . . 110 4.2.7 ModuleInterfaceUnitandModuleImplementationUnit . . . . . . . . . . . 112 4.2.8 PrivateModuleFragment . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 4.2.9 SubmodulesandModulePartitions . . . . . . . . . . . . . . . . . . . . . . . 116 4.2.10 TemplatesinModules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 4.2.11 ModuleLinkage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 4.2.12 HeaderUnits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 4.3 EqualityComparisonandThree-WayComparison . . . . . . . . . . . . . . . . . . . 130 4.3.1 ComparisonbeforeC++20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 4.3.2 ComparisonsinceC++20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 4.3.3 ComparisonCategories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 4.3.4 Compiler-GeneratedEqualityandSpaceshipOperator . . . . . . . . . . . . 140 4.3.5 RewritingExpressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 4.3.6 User-DefinedandAuto-GeneratedComparisonOperators . . . . . . . . . . 148 4.4 DesignatedInitialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 4.4.1 AggregateInitialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 4.4.2 NamedInitializationofClassMembers. . . . . . . . . . . . . . . . . . . . . 151 4.5 constevalandconstinit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 4.5.1 consteval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 4.5.2 constinit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 4.5.3 Comparisonof const,constexpr,consteval,andconstinit . . . . . . . . . . 160 4.5.4 SolvingtheStaticInitializationOrderFiasco . . . . . . . . . . . . . . . . . . 163 4.6 TemplateImprovements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 4.6.1 ConditionallyExplicitConstructor . . . . . . . . . . . . . . . . . . . . . . . 169 4.6.2 Non-TypeTemplateParameters(NTTP) . . . . . . . . . . . . . . . . . . . . 172 4.7 LambdaImprovements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 4.7.1 TemplateParameterforLambdas . . . . . . . . . . . . . . . . . . . . . . . . 177 4.7.2 DetectionoftheImplicitCopyofthethisPointer . . . . . . . . . . . . . . . 181 4.7.3 LambdasinanUnevaluatedContextandStatelessLambdascanbeDefault- ConstructedandCopy-Assigned . . . . . . . . . . . . . . . . . . . . . . . . 183 4.7.4 PackExpansioninInit-Capture . . . . . . . . . . . . . . . . . . . . . . . . . 187 4.8 NewAttributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 4.8.1 [[nodiscard("reason")]] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 4.8.2 [[likely]]and[[unlikely]] . . . . . . . . . . . . . . . . . . . . . . . . . . 197 4.8.3 [[no_unique_address]] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 4.9 FurtherImprovements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 4.9.1 volatile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 4.9.2 Range-basedforloopwithInitializers . . . . . . . . . . . . . . . . . . . . . 203 4.9.3 Virtualconstexprfunction . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 CONTENTS 4.9.4 ThenewCharacterTypeofUTF-8Strings:char8_t . . . . . . . . . . . . . . 205 4.9.5 usingenuminLocalScopes . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 4.9.6 DefaultMemberInitializersforBitFields . . . . . . . . . . . . . . . . . . . 208 5. TheStandardLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 5.1 TheRangesLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 5.1.1 Ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 5.1.2 Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 5.1.3 DirectontheContainer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 5.1.4 FunctionComposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 5.1.5 LazyEvaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 5.1.6 DefineaView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 5.1.7 AFlavorofPython. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 5.2 std::span . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 5.2.1 StaticversusDynamicExtent . . . . . . . . . . . . . . . . . . . . . . . . . . 239 5.2.2 Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 5.2.3 AutomaticallyDeducestheSizeofaContiguousSequenceofObjects . . . . 246 5.2.4 ModifyingtheReferencedObjects . . . . . . . . . . . . . . . . . . . . . . . 247 5.2.5 Addressingstd::spanElements . . . . . . . . . . . . . . . . . . . . . . . . . 249 5.2.6 AConstantRangeofModifiableElements . . . . . . . . . . . . . . . . . . . 251 5.2.7 Dangersof std::span . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 5.3 ContainerandAlgorithmImprovements . . . . . . . . . . . . . . . . . . . . . . . . . 256 5.3.1 constexprContainersandAlgorithms . . . . . . . . . . . . . . . . . . . . . 256 5.3.2 std::array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 5.3.3 ConsistentContainerErasure . . . . . . . . . . . . . . . . . . . . . . . . . . 261 5.3.4 containsforAssociativeContainers . . . . . . . . . . . . . . . . . . . . . . 265 5.3.5 ShifttheContentofaContainer . . . . . . . . . . . . . . . . . . . . . . . . 268 5.3.6 Stringprefixandsuffixchecking . . . . . . . . . . . . . . . . . . . . . . . . 270 5.4 ArithmeticUtilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 5.4.1 SafeComparisonofIntegers. . . . . . . . . . . . . . . . . . . . . . . . . . . 273 5.4.2 MathematicalConstants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 5.4.3 MidpointandLinearInterpolation . . . . . . . . . . . . . . . . . . . . . . . 280 5.4.4 BitManipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 5.5 FormattingLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 5.5.1 FormatString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 5.5.2 User-DefinedTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 5.6 CalendarandTimeZones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 5.6.1 BasicChronoTerminology . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 5.6.2 BasicTypesandLiterals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 5.6.3 Timeofday . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 5.6.4 CalendarDates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 5.6.5 TimeZones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 5.6.6 ChronoI/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 CONTENTS 5.7 FurtherImprovements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 5.7.1 std::bind_front . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 5.7.2 std::is_constant_evaluated . . . . . . . . . . . . . . . . . . . . . . . . . . 363 5.7.3 std::source_location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 5.7.4 std::to_address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 6. Concurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 6.1 Coroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 6.1.1 AGeneratorFunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 6.1.2 Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 6.1.3 TheFramework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 6.1.4 AwaitablesandAwaiters . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 6.1.5 TheWorkflows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 6.1.6 co_return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 6.1.7 co_yield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 6.1.8 co_await . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 6.2 Atomics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 6.2.1 std::atomic_ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 6.2.2 AtomicSmartPointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 6.2.3 std::atomic_flagExtensions . . . . . . . . . . . . . . . . . . . . . . . . . . 410 6.2.4 std::atomicExtensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 6.3 Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 6.4 LatchesandBarriers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 6.4.1 std::latch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 6.4.2 std::barrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 6.5 CooperativeInterruption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 6.5.1 std::stop_source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438 6.5.2 std::stop_token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 6.5.3 std::stop_callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 6.5.4 AGeneralMechanismtoSendSignals . . . . . . . . . . . . . . . . . . . . . 443 6.5.5 JoiningThreads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 6.5.6 NewwaitOverloadsforthecondition_variable_any . . . . . . . . . . . . . 446 6.6 std::jthread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450 6.6.1 AutomaticallyJoining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 6.6.2 CooperativeInterruptionofastd::jthread . . . . . . . . . . . . . . . . . . 453 6.7 SynchronizedOutputStreams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 7. CaseStudies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 7.1 FastSynchronizationofThreads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 7.1.1 ConditionVariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 7.1.2 std::atomic_flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 7.1.3 std::atomic<bool> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 7.1.4 Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 CONTENTS 7.1.5 AllNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 7.2 VariationsofFutures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 7.2.1 ALazyFuture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 7.2.2 ExecutiononAnotherThread . . . . . . . . . . . . . . . . . . . . . . . . . . 484 7.3 ModificationandGeneralizationofaGenerator . . . . . . . . . . . . . . . . . . . . . 489 7.3.1 Modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 7.3.2 Generalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 7.4 VariousJobWorkflows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 7.4.1 TheTransparentAwaiterWorkflow . . . . . . . . . . . . . . . . . . . . . . 500 7.4.2 AutomaticallyResumingtheAwaiter. . . . . . . . . . . . . . . . . . . . . . 503 7.4.3 AutomaticallyResumingtheAwaiteronaSeparateThread. . . . . . . . . . 506 Epilogue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .511 Further Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .513 8. C++23andBeyond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 8.1 C++23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 8.1.1 TheCoroutinesLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 8.1.2 ModularizedStandardLibraryforModules . . . . . . . . . . . . . . . . . . 530 8.1.3 Executors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533 8.1.4 TheNetworkLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 8.2 C++23orLater . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 8.2.1 Contracts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 8.2.2 Reflection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 8.2.3 PatternMatching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548 8.3 FurtherInformationaboutC++23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 9. FeatureTesting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551 10. Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 10.1 Aggregate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 10.2 AutomaticStorageDuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 10.3 Callable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 10.4 CallableUnit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 10.5 Concurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 10.6 CriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 10.7 DataRace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 10.8 Deadlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 10.9 DynamicStorageDuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 10.10 EagerEvaluation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 CONTENTS 10.11 Executor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 10.12 FunctionObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 10.13 LambdaExpressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 10.14 LazyEvaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 10.15 LiteralType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 10.16 Lock-free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 10.17 LostWakeup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 10.18 MathLaws . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 10.19 MemoryLocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 10.20 MemoryModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 10.21 Non-blocking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 10.22 Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 10.23 Parallelism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 10.24 POD(PlainOldData) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 10.25 Predicate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 10.26 RAII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 10.27 RaceConditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 10.28 RegularType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 10.29 ScalarType. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 10.30 SemiRegular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 10.31 Short-CircuitEvaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 10.32 Standard-LayoutType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 10.33 StaticStorageDuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 10.34 SpuriousWakeup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 10.35 TheBigFour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 10.36 TheBigSix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 10.37 Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 10.38 ThreadStorageDuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 10.39 TimeComplexity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 10.40 TranslationUnit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 10.41 TrivialType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 10.42 UndefinedBehavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 Reader Testimonials SandorDargo SeniorSoftwareDevelopmentEngineeratAmadeus ”’C++ 20: Get the details’ is exactly the book you need right now if you want to immerse yourself in the latest version of C++. It’s a complete guide, Rainer doesn’t only discuss the flagship features of C++20, but also every minor addition to the language. Luckily, the book includes tons of example code, so even if you don’t have direct access yet to the latest compilers, you will have a very good idea of what you can expect from the different features. A highly recommended read!” AdrianTam DirectorofDataScience,SynechronInc. ”C++ has evolved a lot from its birth. With C++20, it is like a new language now. Surely this book is not a primer to teach you inheritance or overloading, but if you need to bring your C++ knowledge up to date, this is the right book. You will be surprised about the new features C++20 brought into C++. This book gives you clear explanations with concise examples. Its organization allows you to use it as a reference later. It can help you unleash the old language into its powerful future.”

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.