A pragmatic recipe book for acquiring a comprehensive understanding of the complexities and core fundamentals of C++ programming
C++ has come a long way to be one of the most widely used general-purpose languages that is fast, efficient, and high-performance at its core.
The updated second edition of Modern C++ Programming Cookbook addresses the latest features of C++20, such as modules, concepts, coroutines, and the many additions to the standard library, including ranges and text formatting. The book is organized in the form of practical recipes covering a wide range of problems faced by modern developers.
The book also delves into the details of all the core concepts in modern C++ programming, such as functions and classes, iterators and algorithms, streams and the file system, threading and concurrency, smart pointers and move semantics, and many others. It goes into the performance aspects of programming in depth, teaching developers how to write fast and lean code with the help of best practices.
Furthermore, the book explores useful patterns and delves into the implementation of many idioms, including pimpl, named parameter, and attorney-client, teaching techniques such as avoiding repetition with the factory pattern. There is also a chapter dedicated to unit testing, where you are introduced to three of the most widely used libraries for C++: Boost.Test, Google Test, and Catch2.
By the end of the book, you will be able to effectively leverage the features and techniques of C++11/14/17/20 programming to enhance the performance, scalability, and efficiency of your applications.
What you will learn:-
* Understand the new C++20 language and library features and the problems they solve
* Become skilled at using the standard support for threading and concurrency for daily tasks
* Leverage the standard library and work with containers, algorithms, and iterators
* Solve text searching and replacement problems using regular expressions
* Work with different types of strings and learn the various aspects of compilation
* Take advantage of the file system library to work with files and directories
* Implement various useful patterns and idioms
* Explore the widely used testing frameworks for C++
Author(s): Marius Bancila
Edition: 2
Publisher: Packt
Year: 2020
Language: English
Pages: 751
Tags: c++20 c++17 boost
Cover
Copyright
Packt Page
Contributors
Table of Contents
Preface
Chapter 1: Learning Modern Core Language Features
Using auto whenever possible
How to do it...
How it works...
See also
Creating type aliases and alias templates
How to do it...
How it works...
See also
Understanding uniform initialization
Getting ready
How to do it...
How it works...
There's more...
See also
Understanding the various forms of non-static member initialization
How to do it...
How it works...
See also
Controlling and querying object alignment
Getting ready
How to do it...
How it works...
See also
Using scoped enumerations
How to do it...
How it works...
See also
Using override and final for virtual methods
Getting ready
How to do it...
How it works...
See also
Using range-based for loops to iterate on a range
Getting ready
How to do it...
How it works...
See also
Enabling range-based for loops for custom types
Getting ready
How to do it...
How it works...
See also
Using explicit constructors and conversion operators to avoid implicit conversion
Getting ready
How to do it...
How it works...
See also
Using unnamed namespaces instead of static globals
Getting ready
How to do it...
How it works...
See also
Using inline namespaces for symbol versioning
Getting ready
How to do it...
How it works...
See also
Using structured bindings to handle multi-return values
Getting ready
How to do it...
How it works...
There's more...
See also
Simplifying code with class template argument deduction
How to do it...
How it works...
See also
Chapter 2: Working with Numbers and Strings
Converting between numeric and string types
Getting ready
How to do it...
How it works...
See also
Limits and other properties of numeric types
Getting ready
How to do it...
How it works...
See also
Generating pseudo-random numbers
Getting ready
How to do it...
How it works...
See also
Initializing all bits of internal state of a pseudo-random number generator
Getting ready
How to do it...
How it works...
See also
Creating cooked user-defined literals
Getting ready
How to do it...
How it works...
There's more...
See also
Creating raw user-defined literals
Getting ready
How to do it...
How it works...
See also
Using raw string literals to avoid escaping characters
Getting ready
How to do it...
How it works...
See also
Creating a library of string helpers
Getting ready
How to do it...
How it works...
See also
Verifying the format of a string using regular expressions
Getting ready
How to do it...
How it works...
There's more...
See also
Parsing the content of a string using regular expressions
Getting ready
How to do it...
How it works...
See also
Replacing the content of a string using regular expressions
Getting ready
How to do it...
How it works...
See also
Using string_view instead of constant string references
Getting ready
How to do it...
How it works...
See also
Formatting text with std::format
Getting ready
How to do it...
How it works...
See also
Using std::format with user-defined types
Getting ready
How to do it...
How it works...
See also
Chapter 3: Exploring Functions
Defaulted and deleted functions
Getting started
How to do it...
How it works...
See also
Using lambdas with standard algorithms
Getting ready
How to do it...
How it works...
See also
Using generic and template lambdas
Getting started
How to do it...
How it works...
See also
Writing a recursive lambda
Getting ready
How to do it...
How it works...
See also
Writing a function template with a variable number of arguments
Getting ready
How to do it...
How it works...
See also
Using fold expressions to simplify variadic function templates
Getting ready
How to do it...
How it works...
There's more...
See also
Implementing the higher-order functions map and fold
Getting ready
How to do it...
How it works...
There's more...
See also
Composing functions into a higher-order function
Getting ready
How to do it...
How it works...
There's more...
See also
Uniformly invoking anything callable
Getting ready
How to do it...
How it works...
See also
Chapter 4: Preprocessing and Compilation
Conditionally compiling your source code
Getting ready
How to do it...
How it works...
See also
Using the indirection pattern for preprocessor stringification and concatenation
Getting ready
How to do it...
How it works...
See also
Performing compile-time assertion checks with static_assert
Getting ready
How to do it...
How it works...
See also
Conditionally compiling classes and functions with enable_if
Getting ready
How to do it...
How it works...
There's more...
See also
Selecting branches at compile time with constexpr if
Getting ready
How to do it...
How it works...
See also
Providing metadata to the compiler with attributes
How to do it...
How it works...
See also
Chapter 5: Standard Library Containers, Algorithms, and Iterators
Using vector as a default container
Getting ready
How to do it...
How it works...
See also
Using bitset for fixed-size sequences of bits
Getting ready
How to do it...
How it works...
There's more...
See also
Using vector for variable-size sequences of bits
Getting ready...
How to do it...
How it works...
There's more...
See also
Using the bit manipulation utilities
Getting ready
How to do it…
How it works…
See also
Finding elements in a range
Getting ready
How to do it...
How it works...
See also
Sorting a range
Getting ready
How to do it...
How it works...
See also
Initializing a range
Getting ready
How to do it...
How it works...
See also
Using set operations on a range
Getting ready
How to do it...
How it works...
See also
Using iterators to insert new elements into a container
Getting ready
How to do it...
How it works...
There's more...
See also
Writing your own random-access iterator
Getting ready
How to do it...
How it works...
There's more...
See also
Container access with non-member functions
Getting ready
How to do it...
How it works...
There's more...
See also
Chapter 6: General-Purpose Utilities
Expressing time intervals with chrono::duration
Getting ready
How to do it...
How it works...
There's more...
See also
Working with calendars
Getting ready
How to do it…
How it works…
There's more…
See also
Converting times between time zones
Getting ready
How to do it…
How it works…
See also
Measuring function execution time with a standard clock
Getting ready
How to do it...
How it works...
See also
Generating hash values for custom types
Getting ready
How to do it...
How it works...
See also
Using std::any to store any value
Getting ready
How to do it...
How it works...
See also
Using std::optional to store optional values
Getting ready
How to do it...
How it works...
See also
Using std::variant as a type-safe union
Getting ready
How to do it...
How it works...
There's more...
See also
Visiting an std::variant
Getting ready
How to do it...
How it works...
See also
Using std::span for contiguous sequences of objects
Getting ready
How to do it…
How it works…
See also
Registering a function to be called when a program exits normally
Getting ready
How to do it...
How it works...
See also
Using type traits to query properties of types
Getting ready
How to do it...
How it works...
There's more...
See also
Writing your own type traits
Getting ready
How to do it...
How it works...
See also
Using std::conditional to choose between types
Getting ready
How to do it...
How it works...
See also
Chapter 7: Working with Files and Streams
Reading and writing raw data from/to binary files
Getting ready
How to do it...
How it works...
There's more...
See also
Reading and writing objects from/to binary files
Getting ready
How to do it...
How it works...
See also
Using localized settings for streams
Getting ready
How to do it...
How it works...
See also
Using I/O manipulators to control the output of a stream
Getting ready
How to do it...
How it works...
See also
Using monetary I/O manipulators
Getting ready
How to do it...
How it works...
See also
Using time I/O manipulators
Getting ready
How to do it...
How it works...
See also
Working with filesystem paths
Getting ready
How to do it...
How it works...
See also
Creating, copying, and deleting files and directories
Getting ready
How to do it...
How it works...
See also
Removing content from a file
Getting ready
How to do it...
How it works...
See also
Checking the properties of an existing file or directory
Getting ready
How to do it...
How it works...
See also
Enumerating the content of a directory
Getting ready
How to do it...
How it works...
There's more...
See also
Finding a file
Getting ready
How to do it...
How it works...
See also
Chapter 8: Leveraging Threading and Concurrency
Working with threads
Getting ready
How to do it...
How it works...
See also
Synchronizing access to shared data with mutexes and locks
Getting ready
How to do it...
How it works...
See also
Avoiding using recursive mutexes
Getting ready
How to do it...
How it works...
See also
Handling exceptions from thread functions
Getting ready
How to do it...
How it works...
See also
Sending notifications between threads
Getting ready
How to do it...
How it works...
See also
Using promises and futures to return values from threads
Getting ready
How to do it...
How it works...
There's more...
See also
Executing functions asynchronously
Getting ready
How to do it...
How it works...
See also
Using atomic types
Getting ready
How to do it...
How it works...
See also
Implementing parallel map and fold with threads
Getting ready
How to do it...
How it works...
See also
Implementing parallel map and fold with tasks
Getting ready
How to do it...
How it works...
There's more...
See also
Implementing parallel map and fold with standard parallel algorithms
Getting ready
How to do it...
How it works...
There's more...
See also
Using joinable threads and cancellation mechanisms
Getting ready
How to do it...
How it works...
See also
Using thread synchronization mechanisms
Getting ready
How to do it...
How it works...
See also
Chapter 9: Robustness and Performance
Using exceptions for error handling
Getting ready
How to do it...
How it works...
There's more...
See also
Using noexcept for functions that do not throw exceptions
How to do it...
How it works...
There's more...
See also
Ensuring constant correctness for a program
How to do it...
How it works...
There's more...
See also
Creating compile-time constant expressions
Getting ready
How to do it...
How it works...
There's more…
See also
Creating immediate functions
How to do it…
How it works…
See also
Performing correct type casts
How to do it...
How it works...
There's more...
See also
Using unique_ptr to uniquely own a memory resource
Getting ready
How to do it...
How it works...
See also
Using shared_ptr to share a memory resource
Getting ready
How to do it...
How it works...
See also
Implementing move semantics
Getting ready
How to do it...
How it works...
There's more...
See also
Consistent comparison with the operator <=>
Getting ready
How to do it…
How it works…
See also
Chapter 10: Implementing Patterns and Idioms
Avoiding repetitive if...else statements in factory patterns
Getting ready
How to do it...
How it works...
There's more...
See also
Implementing the pimpl idiom
Getting ready
How to do it...
How it works...
There's more...
See also
Implementing the named parameter idiom
Getting ready
How to do it...
How it works...
See also
Separating interfaces and implementations with the non-virtual interface idiom
Getting ready
How to do it...
How it works...
See also
Handling friendship with the attorney-client idiom
Getting ready
How to do it...
How it works...
See also
Static polymorphism with the curiously recurring template pattern
Getting ready
How to do it...
How it works...
There's more...
See also
Implementing a thread-safe singleton
Getting ready
How to do it...
How it works...
There's more...
See also
Chapter 11: Exploring Testing Frameworks
Getting started with Boost.Test
Getting ready
How to do it...
How it works...
There's more...
See also
Writing and invoking tests with Boost.Test
Getting ready
How to do it...
How it works...
See also
Asserting with Boost.Test
Getting ready
How to do it...
How it works...
See also
Using fixtures in Boost.Test
Getting ready
How to do it...
How it works...
See also
Controlling outputs with Boost.Test
Getting ready
How to do it...
How it works...
There's more...
See also
Getting started with Google Test
Getting ready
How to do it...
How it works...
There's more...
See also
Writing and invoking tests with Google Test
Getting ready
How to do it...
How it works...
See also
Asserting with Google Test
How to do it...
How it works...
See also
Using test fixtures with Google Test
Getting ready
How to do it...
How it works...
See also
Controlling output with Google Test
Getting ready
How to do it...
How it works...
See also
Getting started with Catch2
Getting ready
How to do it...
How it works...
There's more...
See also
Writing and invoking tests with Catch2
How to do it...
How it works...
See also
Asserting with Catch2
Getting ready
How to do it...
How it works...
See also
Controlling output with Catch2
Getting ready
How to do it…
How it works...
See also
Chapter 12: C++20 Core Features
Working with modules
Getting ready
How to do it...
How it works...
See also
Understanding module partitions
Getting ready
How to do it...
How it works...
There's more...
See also
Specifying requirements on template arguments with concepts
Getting ready
How to do it...
How it works...
There's more...
See also
Using requires expressions and clauses
Getting ready
How to do it...
How it works...
See also
Iterating over collections with the ranges library
Getting ready
How to do it...
How it works...
There's more...
See also
Creating your own range view
Getting ready
How to do it...
How it works...
See also
Creating a coroutine task type for asynchronous computations
Getting ready
How to do it...
How it works...
There's more...
See also
Creating a coroutine generator type for sequences of values
Getting ready
How to do it...
How it works...
There's more...
See also
Bibliography
Websites
Articles and books
Other Books You May Enjoy
Index