30 Core Guidelines for Writing Clean, Safe, and Fast Code
J. Guy Davidson, Kate Gregory

#Cpp
Discover the Beauty of Modern C++
Beautiful C++
presents the C++ Core Guidelines from a developer's point of view with an emphasis on what benefits can be obtained from following the rules and what nightmares can result from ignoring them. For true geeks, it is an easy and entertaining read. For most software developers, it offers something new and useful.
--Bjarne Stroustrup, inventor of C++ and co-editor of the C++ Core Guidelines
Writing great C++ code needn't be difficult. The C++ Core Guidelines can help every C++ developer design and write C++ programs that are exceptionally reliable, efficient, and well-performing. But the Guidelines are so jam-packed with excellent advice that it's hard to know where to start. Start here, with Beautiful C++.
Expert C++ programmers Guy Davidson and Kate Gregory identify 30 Core Guidelines you'll find especially valuable and offer detailed practical knowledge for improving your C++ style. For easy reference, this book is structured to align closely with the official C++ Core Guidelines website.
Throughout, Davidson and Gregory offer useful conceptual insights and expert sample code, illuminate proven ways to use both new and longstanding language features more successfully, and show how to write programs that are more robust and performant by default.
There's something here to improve virtually every program you write, design, or maintain.
For ease of experimentation, all sample code is available on Compiler Explorer at https://godbolt.org/z/cg30-ch0.0.
Table of Contents
Section 1 Bikeshedding is bad
Chapter 1.1 P.2: Write in ISO Standard C++
Chapter 1.2 F.51: Where there is a choice, prefer default arguments over overloading
Chapter 1.3 C.45: Don't define a default constructor that only initializes data members; use in-class member initializers instead
Chapter 1.4 C.131: Avoid trivial getters and setters
Chapter 1.5 ES.10: Declare one name (only) per declaration
Chapter 1.6 NR.2: Don't insist to have only a single return-statement in a function
Section 2 Don't hurt yourself
Chapter 2.1 P.11: Encapsulate messy constructs, rather than spreading through the code
Chapter 2.2 1.23: Keep the number of function arguments low
Chapter 2.3 1.26: If you want a cross-compiler ABI, use a C-style subset
Chapter 2.4 C.47: Define and initialize member variables in the order of member declaration
Chapter 2.5 CP.3: Minimize explicit sharing of writable data
Chapter 2.6 T.120: Use template metaprogramming only when you really need to
Section 3 Stop using that
Chapter 3.1 1.11: Never transfer ownership by a raw pointer (T*) or reference (T&)
Chapter 3.2 1.3: Avoid singletons
Chapter 3.3 C.90: Rely on constructors and assignment operators, not memset and memcpy
Chapter 3.4 ES.50: Don't cast away const
Chapter 3.5 E.28: Avoid error handling based on global state (e.g. errno)
Chapter 3.6 SF.7: Don't write using namespace at global scope in a header file
Section 4 Use this new thing properly
Chapter 4.1 F.21: To return multiple "out" values, prefer returning a struct or tuple Chapter 4.2 Enum.3: Prefer class enums over "plain" enums
Chapter 4.3 ES.5: Keep scopes small
Chapter 4.4 Con.5: Use constexpr for values that can be computed at compile time
Chapter 4.5 T.1: Use templates to raise the level of abstraction of code
Chapter 4.6 T.10: Specify concepts for all template arguments
Section 5 Write code well by default
Chapter 5.1 P.4: Ideally, a program should be statically type safe
Chapter 5.2 P.10: Prefer immutable data to mutable data
Chapter 5.3 1.30: Encapsulate rule violations
Chapter 5.4 ES.22: Don't declare a variable until you have a value to initialize it with
Chapter 5.5 Per.7: Design to enable optimization
Chapter 5.6 E.6: Use RAII to prevent leaks
I enjoyed reading this book. I enjoyed it especially because it presents the C++ Core Guidelines (CG) very differently from how the CG itself does it. The CG presents its rules relatively tersely in a fixed format. The CG rules are often expressed in language-technical terms with an emphasis on enforcement through static analysis. This book tells stories, many coming from the games industry based on the evolution of code and techniques over decades. It presents the rules from a developer’s point of view with an emphasis on what benefits can be obtained from following the rules and what nightmares can result from ignoring them. There are more extensive discussions of the motivation for rules than the CG themselves can offer.
The CG aims for a degree of completeness. Naturally, a set of rules for writing good code in general cannot be complete, but the necessary degree of completeness implies that the CG are not meant for a systematic read. I recommend the introduction and the philosophy section to get an impression of the aims of the CG and its conceptual framework. However, for a selective tour of the CG guided by taste, perspective, and experience, read the book. For true geeks, it is an easy and entertaining read. For most software developers, it offers something new and useful.
J. Guy Davidson, head of engineering practice at Creative Assembly, works on its Total War game franchise, curates its catalogue, and improves programming standards across its engineering team. He serves on the ISO C++ committee, moderates the #include discord server, speaks at C++ events, and offers C++ mentoring support through Prospela and BAME in Games.
Kate Gregory has 40+ years of development experience in multiple languages. She has keynoted on five continents, and volunteers in many C++ activities, especially #include , which is making the industry more welcoming and inclusive. Since 1986 she and her husband have run Gregory Consulting, helping clients worldwide become more effective.









