实例介绍
【实例截图】
【核心代码】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | Contents About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii Additional Reviewers & Supporters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii Revision History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi About the Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii Who This Book is For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii Overall Structure of the Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii Reader Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix Example Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix Part 1 - The Language Features . . . . . . . . . . . . . . . . . . . . . . . 1 Quick Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Fixes and Deprecation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Removed Things . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Fixes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Compiler support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2. Language Clarification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Stricter Expression Evaluation Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Guaranteed Copy Elision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Dynamic Memory Allocation for Over-Aligned Data . . . . . . . . . . . . . . . . . . . . . . . 24 Exception Specifications as Part of the Type System . . . . . . . . . . . . . . . . . . . . . . . . 25 Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3. General Language Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Structured Binding Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Init Statement for if and switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Inline Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 constexpr Lambda Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 CONTENTS Nested Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Compiler support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4. Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Template Argument Deduction for Class Templates . . . . . . . . . . . . . . . . . . . . . . . . 43 Fold Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 if constexpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Declaring Non-Type Template Parameters With auto . . . . . . . . . . . . . . . . . . . . . . 58 Other Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5. Standard Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Why Do We Need Attributes? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Before C 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Attributes in C 11 and C 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 C 17 additions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Section Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Compiler support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Part 2 - The Standard Library Changes . . . . . . . . . . . . . . 73 6. std::optional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 std::optional Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Returning std::optional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Accessing The Stored Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 std::optional Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Examples of std::optional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Performance & Memory Consideration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Migration from boost::optional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Special case: optional<bool> and optional<T*> . . . . . . . . . . . . . . . . . . . . . . . . 90 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 7. std::variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 std::variant Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Changing the Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Accessing the Stored Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Visitors for std::variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Other std::variant Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Exception Safety Guarantees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Performance & Memory Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 CONTENTS Migration From boost::variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Examples of std::variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Wrap Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 8. std::any . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 std::any Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Changing the Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Accessing The Stored Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Performance & Memory Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Migration from boost::any . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Examples of std::any . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Wrap Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 9. std::string_view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 The std::basic_string_view Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 std::string_view Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Other Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Risks Using string_view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Initializing string Members from string_view . . . . . . . . . . . . . . . . . . . . . . . . . 141 Handling Non-Null Terminated Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Performance & Memory Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Migration from boost::string_ref and boost::string_view . . . . . . . . . . . . . . . 148 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Wrap Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 10. String Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Elementary String Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Converting From Characters to Numbers: from_chars . . . . . . . . . . . . . . . . . . . . . 155 Converting Numbers into Characters: to_chars . . . . . . . . . . . . . . . . . . . . . . . . . . 158 The Benchmark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Compiler support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 11. Searchers & String Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Overview of String Matching Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 New Algorithms Available in C 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Compiler support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 CONTENTS 12. Filesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Filesystem Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 The Path Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 The Directory Entry & Directory Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Supporting Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Error Handling & File Races . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 13. Parallel STL Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Execution Policies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Algorithm Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 New Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Performance of Parallel Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 14. Other Changes In The Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 std::byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Improvements for Maps and Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Return Type of Emplace Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Sampling Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 New Mathematical Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Shared Pointers and Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Non-member size(), data() and empty() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 constexpr Additions to the Standard Library . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 std::scoped_lock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 std::iterator Is Deprecated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Polymorphic Allocator, pmr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Compiler support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Part 3 - More Examples and Use Cases . . . . . . . . . . . . . .255 15. Refactoring with std::optional and std::variant . . . . . . . . . . . . . . . . . . . . . 256 The Use Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 The Tuple Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 A Separate Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 With std::optional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 CONTENTS With std::variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Wrap up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 16. Enforcing Code Contracts With [[nodiscard]] . . . . . . . . . . . . . . . . . . . . . . . . 264 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Where Can It Be Used? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 How to Ignore [[nodiscard]] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Before C 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 17. Replacing enable_if with if constexpr - Factory with Variable Arguments . . . . . 270 The Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Before C 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 With if constexpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 18. How to Parallelise CSV Reader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 Introduction and Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 The Serial Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Using Parallel Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Wrap up & Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 Appendix A - Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Clang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 VisualStudio - MSVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Compiler Support of C 17 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 Appendix B - Resources and References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 |
标签: C++17
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论