C++23 Best Practices
Author:Jason Turner
185
PAGES
18,337
WORDS
60 DAYS
GUARANTEE
ENGLISH
EPUB
WEB
Book Description
For the first time ever, C++23 changes “Hello World” in C++. What kind of fundamental changes does this mean for your code?
This is a major update and reorganization of my popular C++ Best Practices book. That version ends at C++20. This version has been updated to C++23 with all of the examples reviewed and updated to C++23.
If you are still using C++20, you should still consider getting the older version of this book. If you are looking forward to using C++23 soon, you should get this book!
As a C++ developer and trainer for more than 20 years, I have learned that there are many common mistakes that C++ developers of all experience levels make. This book distills that experience down into the most important things to address to make your code faster, easier to maintain, and more portable.
Most sections have one or more exercises that help you apply what is discussed in a practical way in the code you are currently working on
This book is intentionally concise! Expect short sections for each item! I use as few words as possible to get across the point and get you applying what you learned to your code.
If you follow me and watch all of my talks this book will present little new information to you. Why should you buy it then? Because I’ve consolidated the most important items and given you exercises to apply the rules in your code.
Table of Contents
Part I:Introduction and Philosophy of Good C++
1:Introduction To The C++23 Edition
2:Introduction To The Original Edition
3:About Best Practices
4:Slow Down
5:Use AI Coding Assistants Judiciously
6:C++ Is Not Magic
7:Remember: C++ Is Not Object-Oriented
8:Learn Another Language
9:Know Your Standard Library
10:Use The Tools
11:Don’t Invoke Undefined Behavior
12:Never Test for this To Be nullptr It’s UB
13:Never Test for A Reference To Be nullptr It’s UB
Part II:Use The Tools
14:Use the Tools: Automated Tests
15:Use the Tools: Continuous Builds
16:Use the Tools: Compiler Warnings
17:Use the Tools: Static Analysis
18:Use The Tools: Consider Custom Static Analysis
19:Use the Tools: Sanitizers
20:Use The Tools: Hardening
21:Use the Tools: Multiple Compilers
22:Use The Tools: Fuzzing and Mutating
23:Use the Tools: Build Generators
24:Use the Tools: Package Managers
Part III:API and Code Design Guidelines
25:Make your interfaces hard to use wrong.
26:Consider If Using the API Wrong Invokes Undefined Behavior
27:Be Afraid of Global State
28:Use Stronger Types
29:Use [[nodiscard]] Liberally
30:Forget Header Files Exist
31:Export Module Overloads Consistently
32:Prefer Stack Over Heap
33:Don’t return raw pointers
34:Know Your Containers
35:Be Aware of Custom Allocation And PMR
36:Constrain Your Template Parameters With Concepts
37:Understand consteval and constinit
38:Prefer Spaceships
39:Follow the Rule of 0
40:If You Must Do Manual Resource Management, Follow the Rule of 5
Part IV:Code Implementation Guidelines
41:Don’t Copy and Paste Code
42:Prefer format Over iostream Or c-formatting Functions
43:constexpr All The Things!
44:Make globals in headers inline constexpr
45:const Everything That’s Not constexpr
46:Always Initialize Your non-const non-auto Values
47:Prefer auto in Many Cases.
48:Use Ranges and Views For Correctness and Readability
49:Don’t Reuse Views
50:Prefer Algorithms Over Loops
51:Use Ranged-For Loops When Views and Algorithms Cannot Help
52:Use auto in ranged for loops
53:Avoid default In switch Statements
54:Prefer Scoped enum
55:Prefer if constexpr over SFINAE
56:De-template-ize Your Generic Code
57:Use Lippincott Functions
58:No More new
59:Avoid std::bind and std::function
60:Don’t Use initializer_list For Non-Trivial Types
61:Consider Designated Initializers (C++20)
Part V:Bonus Chapters
62:Improving Build Time
63:Continue Your C++ Education
64:Thank You
Amazon page