Embracing Modern C++ Safely, 1st edition
Tổng quan sách
Tối đa hóa phần thưởng và giảm thiểu rủi ro với C++ hiện đạiÔm lấy C++ hiện đại Một cách an toàn chỉ cho học sinh cách sử dụng hiệu quả các tính năng ngôn ngữ mới và nâng cao của C++ hiện đại mà không trở thành nạn nhân của những cạm bẫy tiềm ẩn.Dựa trên kinh nghiệm nhiều năm của họ với các dự án lớn, quan trọng, bốn cơ quan quản lý C++ hàng đầu chia các tính năng của ngôn ngữ C++ 11/14 thành ba loại: An toàn, An toàn có điều kiện và Không an toàn. Các tính năng an toàn mang lại giá trị hấp dẫn, dễ sử dụng hiệu quả và tương đối khó sử dụng sai mục đích. Các tính năng An toàn có điều kiện mang lại giá trị đáng kể nhưng đi kèm với những rủi ro đòi hỏi kiến thức chuyên môn và sự quen thuộc đáng kể trước khi sử dụng. Các tính năng không an toàn có tỷ lệ rủi ro/phần thưởng đặc biệt kém, dễ bị lạm dụng và chỉ có lợi trong những trường hợp đặc biệt nhất.Cuốn sách này chắt lọc kinh nghiệm nhiều năm áp dụng các tính năng của C++ 11 và C++ 14 của cộng đồng C++, đồng thời sẽ giúp sinh viên đưa ra các quyết định thiết kế hiệu quả và an toàn phản ánh sự cân bằng kỹ thuật kinh tế, trong thế giới thực trong môi trường phát triển phần mềm đa dạng, quy mô lớn. Các tác giả sử dụng các ví dụ lấy từ cơ sở mã thực để minh họa mọi phát hiện một cách khách quan và làm sáng tỏ các vấn đề chính. Mỗi tính năng xác định các trường hợp sử dụng âm thanh, những cạm bẫy tiềm ẩn và những thiếu sót của tính năng ngôn ngữ đó. Sau khi đọc cuốn sách này, học sinh sẽ:Hiểu từng tính năng của C++ 11/14 làm gì và nó hoạt động tốt nhất ở đâuNhận biết cách giải quyết các cạm bẫy khi dừng chiếu và các trường hợp góc khó chịuBiết những tính năng nào cần đào tạo thêm, kinh nghiệm và đánh giá ngang hàngĐạt được những hiểu biết sâu sắc để chuẩn bị các tiêu chuẩn mã hóa và hướng dẫn phong cách phù hợp với nhu cầu của tổ chứcĐược trang bị để giới thiệu C++ hiện đại một cách tuần tự và thận trọng vào các cơ sở mã đã được thiết lậpCác nhà phát triển C++ dày dạn kinh nghiệm, trưởng nhóm và quản lý kỹ thuật muốn cải thiện năng suất, chất lượng mã và khả năng bảo trì sẽ nhận thấy những hiểu biết sâu sắc trong tài liệu tham khảo được sắp xếp tỉ mỉ, mô-đun này là không thể thiếu.Đăng ký cuốn sách này để có quyền truy cập thuận tiện vào các bản tải xuống, cập nhật và/hoặc chỉnh sửa khi chúng có sẵn. Xem sách bên trong để biết chi tiết.
- Foreword by Shawn Edwards xiiiForeword by Andrei Alexandrescu xvAcknowledgments xixAbout the Authors xxv
- Chapter 0: Introduction 1What Makes This Book Different 1Scope for the First Edition 2The EMC++S Guiding Principles 3What Do We Mean by Safely? 4A Safe Feature 5A Conditionally Safe Feature 5An Unsafe Feature 6Modern C++ Feature Catalog 6How to Use This Book 8
- Chapter 1: Safe Features 111.1 C++11 11Attribute Syntax | Generalized Attribute Support 12Consecutive >s | Consecutive Right-Angle Brackets 21decltype | Operator for Extracting Expression Types 25Defaulted Functions | Using = default for Special Member Functions 33Delegating Ctors | Constructors Calling Other Constructors 46Deleted Functions | Using = delete for Arbitrary Functions 53explicit Operators | Explicit Conversion Operators 61Function static '11 | Thread-Safe Function-Scope static Variables 68Local Types '11 | Local/Unnamed Types as Template Arguments 83long long | The long long (≥64 bits) Integral Type 89noreturn | The [[noreturn]] Attribute 95nullptr | The Null-Pointer-Literal Keyword 99override | The override Member-Function Specifier 104Raw String Literals | Syntax for Unprocessed String Contents 108static_assert | Compile-Time Assertions 115Trailing Return | Trailing Function Return Types 124Unicode Literals | Unicode String Literals 129using Aliases | Type/Template Aliases (Extended typedef) 1331.2 C++14 138Aggregate Init '14 | Aggregates Having Default Member Initializers 138Binary Literals | Binary Literals: The 0b Prefix 142deprecated | The [[deprecated]] Attribute 147Digit Separators | The Digit Separator (') 152Variable Templates | Templated Variable Declarations/Definitions 157
- Chapter 2: Conditionally Safe Features 1672.1 C++11 167alignas | The alignas Specifier 168alignof | The alignof Operator 184auto Variables | Variables of Automatically Deduced Type 195Braced Init | Braced-Initialization Syntax: {} 215constexpr Functions | Compile-Time Invocable Functions 257constexpr Variables | Compile-Time Accessible Variables 302Default Member Init | Default class/union Member Initializers 318enum class | Strongly Typed, Scoped Enumerations 332extern template | Explicit-Instantiation Declarations 353Forwarding References | Forwarding References (T&&) 377Generalized PODs '11 | Trivial and Standard-Layout Types 401Inheriting Ctors | Inheriting Base-Class Constructors 535initializer_list | List Initialization: std::initializer_list 553Lambdas | Anonymous Function Objects (Closures) 573noexcept Operator | Asking if an Expression Cannot throw 615Opaque enums | Opaque Enumeration Declarations 660Range for | Range-Based for Loops 679Rvalue References | Move Semantics and Rvalue References (&&) 710Underlying Type '11 | Explicit Enumeration Underlying Type 829User-Defined Literals | User-Defined Literal Operators 835Variadic Templates | Variable-Argument-Count Templates 8732.2 C++14 958constexpr Functions '14 | Relaxed Restrictions on constexpr Functions 959Generic Lambdas | Lambdas Having a Templated Call Operator 968Lambda Captures | Lambda-Capture Expressions 986
- Chapter 3: Unsafe Features 9973.1 C++11 997carries_dependency | The [[carries_dependency]] Attribute 998final | Prohibiting Overriding and Derivation 1007friend '11 | Extended friend Declarations 1031inline namespace | Transparently Nested Namespaces 1055noexcept Specifier | The noexcept Function Specification 1085Ref-Qualifiers | Reference-Qualified Member Functions 1153union '11 | Unions Having Non-Trivial Members 11743.2 C++14 1182auto Return | Function (auto) Return-Type Deduction 1182decltype(auto) | Deducing Types Using decltype Semantics 1205Afterword: Looking Back and Looking Forward 1215Glossary 1217Bibliography 1281Index 1305
