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

£37.79

Includes FREE delivery

RRP £41.99 – you save £4.20 (10%)

Order before 4pm tomorrow for delivery by Fri 16 Jan 2026.

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

2 in stock


    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