Description

Book Synopsis
Dr. John Lakos is a senior architect and mentor for software development at Bloomberg LP, where he created the BDE team (c. 2001), which maintains Bloomberg's open-source foundation libraries for C++ development worldwide. He is the author of Large-Scale C++ Software Design and Large-Scale C++ Volume I: Process and Architecture (both from Addison-Wesley), and is an active voting member of the C++ Standards Committee.

Vittorio Romeo is a senior software engineer at Bloomberg, building mission-critical C++ middleware and training colleagues on modern C++. He is also the creator of many open-source C++ libraries and games.

Dr. Rostislav Khlebnikov is a team lead and senior software engineer in Bloomberg's BDE team, where he directs the development of high-performance C++ foundation software.

Alisdair Meredith is a senior software engineer in Bloomberg's BDE team and a long-standing member of the C++ Standards Committe

Table of Contents

Foreword by Shawn Edwards xiii
Foreword by Andrei Alexandrescu xv
Acknowledgments xix
About the Authors xxv

Chapter 0: Introduction 1

What Makes This Book Different 1
Scope for the First Edition 2
The EMC++S Guiding Principles 3
What Do We Mean by Safely? 4
A Safe Feature 5
A Conditionally Safe Feature 5
An Unsafe Feature 6
Modern C++ Feature Catalog 6
How to Use This Book 8

Chapter 1: Safe Features 11

1.1 C++11 11
Attribute Syntax | Generalized Attribute Support 12
Consecutive >s | Consecutive Right-Angle Brackets 21
decltype | Operator for Extracting Expression Types 25
Defaulted Functions | Using = default for Special Member Functions 33
Delegating Ctors | Constructors Calling Other Constructors 46
Deleted Functions | Using = delete for Arbitrary Functions 53
explicit Operators | Explicit Conversion Operators 61
Function static '11 | Thread-Safe Function-Scope static Variables 68
Local Types '11 | Local/Unnamed Types as Template Arguments 83
long long | The long long (≥64 bits) Integral Type 89
noreturn | The [[noreturn]] Attribute 95
nullptr | The Null-Pointer-Literal Keyword 99
override | The override Member-Function Specifier 104
Raw String Literals | Syntax for Unprocessed String Contents 108
static_assert | Compile-Time Assertions 115
Trailing Return | Trailing Function Return Types 124
Unicode Literals | Unicode String Literals 129
using Aliases | Type/Template Aliases (Extended typedef) 133

1.2 C++14 138
Aggregate Init '14 | Aggregates Having Default Member Initializers 138
Binary Literals | Binary Literals: The 0b Prefix 142
deprecated | The [[deprecated]] Attribute 147
Digit Separators | The Digit Separator (') 152
Variable Templates | Templated Variable Declarations/Definitions 157

Chapter 2: Conditionally Safe Features 167

2.1 C++11 167
alignas | The alignas Specifier 168
alignof | The alignof Operator 184
auto Variables | Variables of Automatically Deduced Type 195
Braced Init | Braced-Initialization Syntax: {} 215
constexpr Functions | Compile-Time Invocable Functions 257
constexpr Variables | Compile-Time Accessible Variables 302
Default Member Init | Default class/union Member Initializers 318
enum class | Strongly Typed, Scoped Enumerations 332
extern template | Explicit-Instantiation Declarations 353
Forwarding References | Forwarding References (T&&) 377
Generalized PODs '11 | Trivial and Standard-Layout Types 401
Inheriting Ctors | Inheriting Base-Class Constructors 535
initializer_list | List Initialization: std::initializer_list 553
Lambdas | Anonymous Function Objects (Closures) 573
noexcept Operator | Asking if an Expression Cannot throw 615
Opaque enums | Opaque Enumeration Declarations 660
Range for | Range-Based for Loops 679
Rvalue References | Move Semantics and Rvalue References (&&) 710
Underlying Type '11 | Explicit Enumeration Underlying Type 829
User-Defined Literals | User-Defined Literal Operators 835
Variadic Templates | Variable-Argument-Count Templates 873

2.2 C++14 958
constexpr Functions '14 | Relaxed Restrictions on constexpr Functions 959
Generic Lambdas | Lambdas Having a Templated Call Operator 968
Lambda Captures | Lambda-Capture Expressions 986

Chapter 3: Unsafe Features 997

3.1 C++11 997
carries_dependency | The [[carries_dependency]] Attribute 998
final | Prohibiting Overriding and Derivation 1007
friend '11 | Extended friend Declarations 1031
inline namespace | Transparently Nested Namespaces 1055
noexcept Specifier | The noexcept Function Specification 1085
Ref-Qualifiers | Reference-Qualified Member Functions 1153
union '11 | Unions Having Non-Trivial Members 1174

3.2 C++14 1182
auto Return | Function (auto) Return-Type Deduction 1182
decltype(auto) | Deducing Types Using decltype Semantics 1205

Afterword: Looking Back and Looking Forward 1215

Glossary 1217
Bibliography 1281
Index 1305

Embracing Modern C Safely

    Product form

    £39.89

    Includes FREE delivery

    RRP £41.99 – you save £2.10 (5%)

    Order before 4pm today for delivery by Tue 23 Jun 2026.

    A Paperback / softback by John Lakos, Vittorio Romeo, Rostislav Khlebnikov

    1 in stock

      Trusted by thousands of customers. See 2,385+ Customer Reviews

      View other formats and editions of Embracing Modern C Safely by John Lakos

      Publisher: Pearson Education (US)
      Publication Date: 09/02/2022
      ISBN13: 9780137380350, 978-0137380350
      ISBN10: 137380356

      Description

      Book Synopsis
      Dr. John Lakos is a senior architect and mentor for software development at Bloomberg LP, where he created the BDE team (c. 2001), which maintains Bloomberg's open-source foundation libraries for C++ development worldwide. He is the author of Large-Scale C++ Software Design and Large-Scale C++ Volume I: Process and Architecture (both from Addison-Wesley), and is an active voting member of the C++ Standards Committee.

      Vittorio Romeo is a senior software engineer at Bloomberg, building mission-critical C++ middleware and training colleagues on modern C++. He is also the creator of many open-source C++ libraries and games.

      Dr. Rostislav Khlebnikov is a team lead and senior software engineer in Bloomberg's BDE team, where he directs the development of high-performance C++ foundation software.

      Alisdair Meredith is a senior software engineer in Bloomberg's BDE team and a long-standing member of the C++ Standards Committe

      Table of Contents

      Foreword by Shawn Edwards xiii
      Foreword by Andrei Alexandrescu xv
      Acknowledgments xix
      About the Authors xxv

      Chapter 0: Introduction 1

      What Makes This Book Different 1
      Scope for the First Edition 2
      The EMC++S Guiding Principles 3
      What Do We Mean by Safely? 4
      A Safe Feature 5
      A Conditionally Safe Feature 5
      An Unsafe Feature 6
      Modern C++ Feature Catalog 6
      How to Use This Book 8

      Chapter 1: Safe Features 11

      1.1 C++11 11
      Attribute Syntax | Generalized Attribute Support 12
      Consecutive >s | Consecutive Right-Angle Brackets 21
      decltype | Operator for Extracting Expression Types 25
      Defaulted Functions | Using = default for Special Member Functions 33
      Delegating Ctors | Constructors Calling Other Constructors 46
      Deleted Functions | Using = delete for Arbitrary Functions 53
      explicit Operators | Explicit Conversion Operators 61
      Function static '11 | Thread-Safe Function-Scope static Variables 68
      Local Types '11 | Local/Unnamed Types as Template Arguments 83
      long long | The long long (≥64 bits) Integral Type 89
      noreturn | The [[noreturn]] Attribute 95
      nullptr | The Null-Pointer-Literal Keyword 99
      override | The override Member-Function Specifier 104
      Raw String Literals | Syntax for Unprocessed String Contents 108
      static_assert | Compile-Time Assertions 115
      Trailing Return | Trailing Function Return Types 124
      Unicode Literals | Unicode String Literals 129
      using Aliases | Type/Template Aliases (Extended typedef) 133

      1.2 C++14 138
      Aggregate Init '14 | Aggregates Having Default Member Initializers 138
      Binary Literals | Binary Literals: The 0b Prefix 142
      deprecated | The [[deprecated]] Attribute 147
      Digit Separators | The Digit Separator (') 152
      Variable Templates | Templated Variable Declarations/Definitions 157

      Chapter 2: Conditionally Safe Features 167

      2.1 C++11 167
      alignas | The alignas Specifier 168
      alignof | The alignof Operator 184
      auto Variables | Variables of Automatically Deduced Type 195
      Braced Init | Braced-Initialization Syntax: {} 215
      constexpr Functions | Compile-Time Invocable Functions 257
      constexpr Variables | Compile-Time Accessible Variables 302
      Default Member Init | Default class/union Member Initializers 318
      enum class | Strongly Typed, Scoped Enumerations 332
      extern template | Explicit-Instantiation Declarations 353
      Forwarding References | Forwarding References (T&&) 377
      Generalized PODs '11 | Trivial and Standard-Layout Types 401
      Inheriting Ctors | Inheriting Base-Class Constructors 535
      initializer_list | List Initialization: std::initializer_list 553
      Lambdas | Anonymous Function Objects (Closures) 573
      noexcept Operator | Asking if an Expression Cannot throw 615
      Opaque enums | Opaque Enumeration Declarations 660
      Range for | Range-Based for Loops 679
      Rvalue References | Move Semantics and Rvalue References (&&) 710
      Underlying Type '11 | Explicit Enumeration Underlying Type 829
      User-Defined Literals | User-Defined Literal Operators 835
      Variadic Templates | Variable-Argument-Count Templates 873

      2.2 C++14 958
      constexpr Functions '14 | Relaxed Restrictions on constexpr Functions 959
      Generic Lambdas | Lambdas Having a Templated Call Operator 968
      Lambda Captures | Lambda-Capture Expressions 986

      Chapter 3: Unsafe Features 997

      3.1 C++11 997
      carries_dependency | The [[carries_dependency]] Attribute 998
      final | Prohibiting Overriding and Derivation 1007
      friend '11 | Extended friend Declarations 1031
      inline namespace | Transparently Nested Namespaces 1055
      noexcept Specifier | The noexcept Function Specification 1085
      Ref-Qualifiers | Reference-Qualified Member Functions 1153
      union '11 | Unions Having Non-Trivial Members 1174

      3.2 C++14 1182
      auto Return | Function (auto) Return-Type Deduction 1182
      decltype(auto) | Deducing Types Using decltype Semantics 1205

      Afterword: Looking Back and Looking Forward 1215

      Glossary 1217
      Bibliography 1281
      Index 1305

      Recently viewed products

      © 2026 Book Curl

        • American Express
        • Apple Pay
        • Diners Club
        • Discover
        • Google Pay
        • Maestro
        • Mastercard
        • PayPal
        • Shop Pay
        • Union Pay
        • Visa

        Login

        Forgot your password?

        Don't have an account yet?
        Create account