چه کسانی این کتاب را می‌خوانند

دانشجوعلاقه‌مند یادگیری
کتابخوان حرفه‌ایلذت مطالعه
نویسندهالهام‌گیری

C++ Move Semantics - The Complete Guide

Nicolai M. Josuttis

قیمت نهایی

۴۰٬۰۰۰ تومان۴۹٬۰۰۰ تومان۱۸٪ تخفیف
  • تخفیف زمان‌دار−۹٬۰۰۰ تومان

۹٬۰۰۰ تومان صرفه‌جویی نسبت به قیمت اصلی

نسخه اصلی و اورجینال

بلافاصله پس از خرید، فایل کتاب روی دستگاه شما آمادهٔ دانلود است.

تحویل فوری
پرداخت امن
ضمانت فایل
پشتیبانی

مشخصات کتاب

نویسنده
Nicolai M. Josuttis
ناشر
Leanpub
سال انتشار
۲۰۲۲
فرمت
PDF
زبان
انگلیسی
حجم فایل
۴٫۱ مگابایت

دربارهٔ کتاب

Move semantics, introduced with C++11, has become a hallmark of modern C++ programming. However, it also complicates the language in many ways. Even after several years of support, experienced programmers struggle with all the details of move semantics, style guides still recommend different consequences for programming even of trivial classes, and we still discuss semantic details in the C++ standards committee. Whenever I have taught what I have learned about C++ move semantics so far, I have said, “Somebody has to write a book about all this,” and the usual answer was: “Yes, please do!” So, I finally did. As always when writing a book about C++, I was surprised about the number of aspects to be taught, the situations to be clarified, and the consequences to be described. It really was time to write a book about all aspects of move semantics, covering all C++ versions from C++11 up to C++20. I learned a lot and I am sure you will too. C++ Move Semantics Contents Preface An Experiment Versions of this Book Acknowledgments About This Book What You Should Know Before Reading This Book Overall Structure of the Book How to Read This Book The Way I Implement Initializations Error Terminology Code Simplifications The C++ Standards Example Code and Additional Information Feedback Part I: Basic Features of Move Semantics 1 The Power of Move Semantics 1.1 Motivation for Move Semantics 1.1.1 Example with C++03 (Before Move Semantics) 1.1.2 Example Since C++11 (Using Move Semantics) 1.2 Implementing Move Semantics 1.2.1 Using the Copy Constructor 1.2.2 Using the Move Constructor 1.3 Copying as a Fallback 1.4 Move Semantics for const Objects 1.4.1 const Return Values 1.5 Summary 2 Core Features of Move Semantics 2.1 Rvalue References 2.1.1 Rvalue References in Detail 2.1.2 Rvalue References as Parameters 2.2 std::move() 2.2.1 Header File for std::move() 2.2.2 Implementation of std::move() 2.3 Moved-From Objects 2.3.1 Valid but Unspecified State 2.3.2 Reusing Moved-From Objects 2.3.3 Move Assignments of Objects to Themselves 2.4 Overloading by Different References 2.4.1 const Rvalue References 2.5 Passing by Value 2.6 Summary 3 Move Semantics in Classes 3.1 Move Semantics in Ordinary Classes 3.1.1 When is Move Semantics Automatically Enabled in Classes? 3.1.2 When Generated Move Operations Are Broken 3.2 Implementing Special Copy/Move Member Functions 3.2.1 Copy Constructor 3.2.2 Move Constructor 3.2.3 Copy Assignment Operator 3.2.4 Move Assignment Operator 3.2.5 Using the Special Copy/Move Member Functions 3.3 Rules for Special Member Functions 3.3.1 Special Member Functions 3.3.2 By Default, We Have Copying and Moving 3.3.3 Declared Copying Disables Moving (Fallback Enabled) 3.3.4 Declared Moving Disables Copying 3.3.5 Deleting Moving Makes No Sense 3.3.6 Disabling Move Semantics with Enabled Copy Semantics 3.3.7 Moving for Members with Disabled Move Semantics 3.3.8 Exact Rules for Generated Special Member Functions 3.4 The Rule of Five or Three 3.5 Summary 4 How to Benefit From Move Semantics 4.1 Avoid Objects with Names 4.1.1 When You Cannot Avoid Using Names 4.2 Avoid Unnecessary std::move() 4.3 Initialize Members with Move Semantics 4.3.1 Initialize Members the Classical Way 4.3.2 Initialize Members via Moved Parameters Passed by Value 4.3.3 Initialize Members via Rvalue References 4.3.4 Compare the Different Approaches 4.3.5 Summary for Member Initialization 4.3.6 Should We Now Always Pass by Value and Move? 4.4 Move Semantics in Class Hierarchies 4.4.1 Implementing a Polymorphic Base Class 4.4.2 Implementing a Polymorphic Derived Class 4.5 Summary 5 Overloading on Reference Qualifiers 5.1 Return Type of Getters 5.1.1 Return by Value 5.1.2 Return by Reference 5.1.3 Using Move Semantics to Solve the Dilemma 5.2 Overloading on Qualifiers 5.3 When to Use Reference Qualifiers 5.3.1 Reference Qualifiers for Assignment Operators 5.3.2 Reference Qualifiers for Other Member Functions 5.4 Summary 6 Moved-From States 6.1 Required and Guaranteed States of Moved-From Objects 6.1.1 Required States of Moved-From Objects 6.1.2 Guaranteed States of Moved-From Objects 6.1.3 Broken Invariants 6.2 Destructible and Assignable 6.2.1 Assignable and Destructible Moved-From Objects 6.2.2 Non-Destructible Moved-From Objects 6.3 Dealing with Broken Invariants 6.3.1 Breaking Invariants Due to a Moved Value Member 6.3.2 Breaking Invariants Due to Moved Consistent Value Members 6.3.3 Breaking Invariants Due to Moved Pointer-Like Members 6.4 Summary 7 Move Semantics and noexcept 7.1 Move Constructors with and without noexcept 7.1.1 Move Constructors without noexcept 7.1.2 Move Constructors with noexcept 7.1.3 Is noexcept Worth It? 7.2 Details of noexcept Declarations 7.2.1 Rules for Declaring Functions with noexcept 7.2.2 noexcept for Special Member Functions 7.3 noexcept Declarations in Class Hierarchies 7.3.1 Checking for noexcept Move Constructors in Abstract Base Classes 7.4 When and Where to Use noexcept 7.5 Summary 8 Value Categories 8.1 Value Categories 8.1.1 History of Value Categories 8.1.2 Value Categories Since C++11 8.1.3 Value Categories Since C++17 8.2 Special Rules for Value Categories 8.2.1 Value Category of Functions 8.2.2 Value Category of Data Members 8.3 Impact of Value Categories When Binding References 8.3.1 Overload Resolution with Rvalue References 8.3.2 Overloading by Reference and Value 8.4 When Lvalues become Rvalues 8.5 When Rvalues become Lvalues 8.6 Checking Value Categories with decltype 8.6.1 Using decltype to Check the Type of Names 8.6.2 Using decltype to Check the Value Category 8.7 Summary Part II: Move Semantics in Generic Code 9 Perfect Forwarding 9.1 Motivation for Perfect Forwarding 9.1.1 What we Need to Perfectly Forward Arguments 9.2 Implementing Perfect Forwarding 9.2.1 Universal (or Forwarding) References 9.2.2 std::forward() 9.2.3 The Effect of Perfect Forwarding 9.3 Rvalue References versus Universal References 9.3.1 Rvalue References of Actual Types 9.3.2 Rvalue References of Function Template Parameters 9.4 Overload Resolution with Universal References 9.4.1 Fixing Overload Resolution with Universal References 9.5 Perfect Forwarding in Lambdas 9.6 Summary 10 Tricky Details of Perfect Forwarding 10.1 Universal References as Non-Forwarding References 10.1.1 Universal References and const 10.1.2 Universal References in Detail 10.1.3 Universal References of Specific Types 10.2 Universal or Ordinary Rvalue Reference? 10.2.1 Rvalue References of Members of Generic Types 10.2.2 Rvalue References of Parameters in Class Templates 10.2.3 Rvalue References of Parameters in Full Specializations 10.3 How the Standard Specifies Perfect Forwarding 10.3.1 Explicit Specification of Types for Universal References 10.3.2 Conflicting Template Parameter Deduction with Universal References 10.3.3 Pure RValue References of Generic Types 10.4 Nasty Details of Perfect Forwarding 10.4.1 ``Universal'' versus ``Forwarding'' Reference 10.4.2 Why && for Both Ordinary Rvalues and Universal References? 10.5 Summary 11 Perfect Passing with auto&& 11.1 Default Perfect Passing 11.1.1 Default Perfect Passing in Detail 11.2 Universal References with auto&& 11.2.1 Type Deduction of auto&& 11.2.2 Perfectly Forwarding an auto&& Reference 11.3 auto&& as Non-Forwarding Reference 11.3.1 Universal References and the Range-Based for Loop 11.4 Perfect Forwarding in Lambdas 11.5 Using auto&& in C++20 Function Declarations 11.6 Summary 12 Perfect Returning with decltype(auto) 12.1 Perfect Returning 12.2 decltype(auto) 12.2.1 Return Type decltype(auto) 12.2.2 Deferred Perfect Returning 12.2.3 Perfect Forwarding and Returning with Lambdas 12.3 Summary Part III: Move Semantics in the C++ Standard Library 13 Move-Only Types 13.1 Declaring and Using Move-Only Types 13.1.1 Declaring Move-Only Types 13.1.2 Using Move-Only Types 13.1.3 Passing Move-Only Objects as Arguments 13.1.4 Returning Move-Only Objects by Value 13.1.5 Moved-From States of Move-Only Objects 13.2 Summary 14 Moving Algorithms and Iterators 14.1 Moving Algorithms 14.2 Removing Algorithms 14.3 Move Iterators 14.3.1 Move Iterators in Algorithms 14.3.2 Move Iterators in Constructors and Member Functions 14.4 Summary 15 Move Semantics in Types of the C++ Standard Library 15.1 Move Semantics for Strings 15.1.1 String Assignments and Capacity 15.2 Move Semantics for Containers 15.2.1 Basic Move Support for Containers as a Whole 15.2.2 Insert and Emplace Functions 15.2.3 Move Semantics for std::array 15.3 Move Semantics for Vocabulary Types 15.3.1 Move Semantics for Pairs 15.3.2 Move Semantics for std::optional 15.4 Move Semantics for Smart Pointers 15.4.1 Move Semantics for std::shared_ptr 15.4.2 Move Semantics for std::unique_ptr 15.5 Move Semantics for IOStreams 15.5.1 Moving IOStream Objects 15.5.2 Using Temporary IOStreams 15.6 Move Semantics for Multithreading 15.6.1 std::thread and std::jthread 15.6.2 Futures, Promises, and Packaged Tasks 15.7 Summary Glossary C F G H I L N P R S T U V X Index A B C D E F G H I J L M N O P R S T U V W X

قیمت نهایی

۴۰٬۰۰۰ تومان