在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Qt 图形界面开发 → C++17 In Detail.pdf

C++17 In Detail.pdf

Qt 图形界面开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:1.02M
  • 下载次数:41
  • 浏览次数:280
  • 发布时间:2020-11-21
  • 实例类别:Qt 图形界面开发
  • 发 布 人:张世友
  • 文件格式:.pdf
  • 所需积分:2
 相关标签: C++17

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】

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

实例下载地址

C++17 In Detail.pdf

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警