Skip to main content

Published by Addison-Wesley Professional (January 13, 2022) © 2022

John Lakos | Vittorio Romeo | Rostislav Khlebnikov | Alisdair Meredith
    VitalSource eTextbook (Lifetime access)
    €64,99
    ISBN-13: 9780137380510

    Embracing Modern C++ Safely ,1st edition

    Access details

    • Instant access once purchased
    • Fulfilled by VitalSource

    Features

    • Add notes and highlights
    • Search by keyword or page

    Language: English

    Product Information

    Maximize Reward and Minimize Risk with Modern C++

    Embracing Modern C++ Safely shows you how to make effective use of the new and enhanced language features of modern C++ without falling victim to their potential pitfalls.

    Based on their years of experience with large, mission-critical projects, four leading C++ authorities divide C++11/14 language features into three categories: Safe, Conditionally Safe, and Unsafe. Safe features offer compelling value, are easy to use productively, and are relatively difficult to misuse. Conditionally safe features offer significant value but come with risks that require significant expertise and familiarity before use. Unsafe features have an especially poor risk/reward ratio, are easy to misuse, and are beneficial in only the most specialized circumstances.

    This book distills the C++ community's years of experience applying C++11 and C++14 features and will help you make effective and safe design decisions that reflect real-world, economic engineering tradeoffs in large-scale, diverse software development environments. The authors use examples derived from real code bases to illustrate every finding objectively and to illuminate key issues. Each feature identifies the sound use cases, hidden pitfalls, and shortcomings of that language feature. After reading this book, you will

    • Understand what each C++11/14 feature does and where it works best
    • Recognize how to work around show-stopping pitfalls and annoying corner cases
    • Know which features demand additional training, experience, and peer review
    • Gain insights for preparing coding standards and style guides that suit your organization's needs
    • Be equipped to introduce modern C++ incrementally and judiciously into established code bases

    Seasoned C++ developers, team leads, and technical managers who want to improve productivity, code quality, and maintainability will find the insights in this modular, meticulously organized reference indispensable.

    Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.

    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<T> 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

    Top