File tree 6 files changed +55
-63
lines changed
6 files changed +55
-63
lines changed Original file line number Diff line number Diff line change 21
21
22
22
- [ 前言] ( #前言 )
23
23
- [ ` 01 ` 实现管道运算符] ( #01-实现管道运算符 )
24
- - [ 运行结果] ( #运行结果 )
25
- - [ 群友提交] ( #群友提交 )
26
- - [ 标准答案] ( #标准答案 )
27
- - [ 解析] ( #解析 )
24
+ + [ 运行结果] ( #运行结果 )
25
+ + [ 群友提交] ( #群友提交-0 )
26
+ + [ 标准答案] ( #标准答案-0 )
27
+ + [ 解析] ( #解析-0 )
28
28
- [ ` 02 ` 实现自定义字面量 ` _f ` ] ( #02-实现自定义字面量-_f )
29
- - [ 运行结果] ( #运行结果-1 )
30
- - [ 群友提交] ( #群友提交-1 )
31
- - [ 标准答案] ( #标准答案-1 )
32
- - [ 解析] ( #解析-1 )
29
+ + [ 运行结果] ( #运行结果-1 )
30
+ + [ 群友提交] ( #群友提交-1 )
31
+ + [ 标准答案] ( #标准答案-1 )
32
+ + [ 解析] ( #解析-1 )
33
33
- [ ` 03 ` 实现 ` print ` 以及特化 ` std::formatter ` ] ( #03-实现-print-以及特化-stdformatter )
34
- - [ 运行结果] ( #运行结果-2 )
35
- - [ 群友提交] ( #群友提交-2 )
36
- - [ 标准答案] ( #标准答案-2 )
37
- - [ 解析] ( #解析-2 )
34
+ + [ 运行结果] ( #运行结果-2 )
35
+ + [ 群友提交] ( #群友提交-2 )
36
+ + [ 标准答案] ( #标准答案-2 )
37
+ + [ 解析] ( #解析-2 )
38
38
- [ ` 04 ` 给定类模板修改,让其对每一个不同类型实例化有不同 ID] ( #04-给定类模板修改让其对每一个不同类型实例化有不同-id )
39
- - [ 运行结果] ( #运行结果-3 )
40
- - [ 群友提交] ( #群友提交-3 )
41
- - [ 标准答案] ( #标准答案-3 )
39
+ + [ 运行结果] ( #运行结果-3 )
40
+ + [ 群友提交] ( #群友提交-3 )
41
+ + [ 标准答案] ( #标准答案-3 )
42
42
- [ ` 05 ` 实现 ` scope_guard ` 类型] ( #05-实现-scope_guard-类型 )
43
- - [ 运行结果] ( #运行结果-4 )
44
- - [ 群友提交] ( #群友提交-4 )
45
- - [ 标准答案] ( #标准答案-4 )
43
+ + [ 运行结果] ( #运行结果-4 )
44
+ + [ 群友提交] ( #群友提交-4 )
45
+ + [ 标准答案] ( #标准答案-4 )
46
46
- [ ` 06 ` 解释 ` std::atomic ` 初始化] ( #06-解释-stdatomic-初始化 )
47
- - [ 群友提交] ( #群友提交-5 )
48
- - [ 标准答案] ( #标准答案-5 )
47
+ + [ 群友提交] ( #群友提交-5 )
48
+ + [ 标准答案] ( #标准答案-5 )
49
49
- [ ` 07 ` ` throw new MyException ` ] ( #07-throw-new-myexception )
50
- - [ 运行结果] ( #运行结果-5 )
51
- - [ 群友提交] ( #群友提交-6 )
52
- - [ 标准答案] ( #标准答案-6 )
50
+ + [ 运行结果] ( #运行结果-5 )
51
+ + [ 群友提交] ( #群友提交-6 )
52
+ + [ 标准答案] ( #标准答案-6 )
53
53
- [ ` 08 ` 定义` array ` 推导指引] ( #08-定义array推导指引 )
54
- - [ 运行结果] ( #运行结果-6 )
55
- - [ 群友提交] ( #群友提交-7 )
56
- - [ 标准答案] ( #标准答案-7 )
54
+ + [ 运行结果] ( #运行结果-6 )
55
+ + [ 群友提交] ( #群友提交-7 )
56
+ + [ 标准答案] ( #标准答案-7 )
57
57
- [ ` 09 ` 名字查找的问题] ( #09-名字查找的问题 )
58
- - [ 运行结果] ( #运行结果-7 )
59
- - [ 群友提交] ( #群友提交-8 )
60
- - [ 标准答案] ( #标准答案-8 )
58
+ + [ 运行结果] ( #运行结果-7 )
59
+ + [ 群友提交] ( #群友提交-8 )
60
+ + [ 标准答案] ( #标准答案-8 )
61
61
- [ ` 10 ` 遍历任意类数据成员] ( #10-遍历任意类数据成员 )
62
- - [ 运行结果] ( #运行结果-8 )
63
- - [ 群友提交] ( #群友提交-9 )
64
- - [ 标准答案] ( #标准答案-9 )
62
+ + [ 运行结果] ( #运行结果-8 )
63
+ + [ 群友提交] ( #群友提交-9 )
64
+ + [ 标准答案] ( #标准答案-9 )
65
65
- [ ` C++17 ` 写法] ( #c17-写法 )
66
66
- [ ` C++20 ` 写法] ( #c20-写法 )
67
- - [ 无法处理引用类型以及不可移动类型] ( #无法处理引用类型以及不可移动类型 )
68
- - [ 补充说明] ( #补充说明 )
67
+ + [ 补充说明] ( #补充说明-0 )
69
68
- [ ` 11 ` ` emplace_back() ` 的问题] ( #11-emplace_back-的问题 )
70
- - [ 群友提交] ( #群友提交-10 )
71
- - [ 标准答案] ( #标准答案-10 )
69
+ + [ 群友提交] ( #群友提交-10 )
70
+ + [ 标准答案] ( #标准答案-10 )
72
71
- [ ` 12 ` 实现` make_vector() ` ] ( #12-实现make_vector )
73
- - [ 运行结果] ( #运行结果-9 )
74
- - [ 群友提交] ( #群友提交-11 )
75
- - [ 标准答案] ( #标准答案-11 )
72
+ + [ 运行结果] ( #运行结果-9 )
73
+ + [ 群友提交] ( #群友提交-11 )
74
+ + [ 标准答案] ( #标准答案-11 )
76
75
- [ 运行结果] ( #运行结果-10 )
77
76
- [ ` 13 ` 关于 ` return std::move ` ] ( #13-关于-return-stdmove )
78
- - [ 群友提交] ( #群友提交-12 )
79
- - [ 标准答案] ( #标准答案-12 )
77
+ + [ 群友提交] ( #群友提交-12 )
78
+ + [ 标准答案] ( #标准答案-12 )
80
79
- [ ` 14 ` 以特殊方法修改命名空间中声明的对象] ( #14-以特殊方法修改命名空间中声明的对象 )
81
- - [ 运行结果] ( #运行结果-11 )
82
- - [ 群友提交] ( #群友提交-13 )
83
- - [ 标准答案] ( #标准答案-13 )
80
+ + [ 运行结果] ( #运行结果-11 )
81
+ + [ 群友提交] ( #群友提交-13 )
82
+ + [ 标准答案] ( #标准答案-13 )
84
83
- [ 利用符号来解决] ( #利用符号来解决 )
85
84
- [ 直接修改内存] ( #直接修改内存 )
86
85
- [ 利用名字查找规则] ( #利用名字查找规则 )
87
86
- [ ` 15 ` 表达式模板] ( #15-表达式模板 )
88
- - [ 运行结果] ( #运行结果-12 )
89
- - [ 群友提交] ( #群友提交-14 )
90
- - [ 标准答案] ( #标准答案-14 )
91
- - [ ` 16 ` 制造传递函数模板的宏] ( #16-制造传递函数模板的宏 )
92
- - [ 群友提交] ( #群友提交-15 )
93
- - [ 标准答案] ( #标准答案-15 )
87
+ + [ 群友提交] ( #群友提交-14 )
88
+ + [ 标准答案] ( #标准答案-14 )
89
+ - [ ` 16 ` 通透函数宏] ( #16-制造传递函数模板的宏 )
90
+ + [ 群友提交] ( #群友提交-15 )
91
+ + [ 标准答案] ( #标准答案-15 )
94
92
95
93
</details >
96
94
@@ -441,7 +439,7 @@ impl::Helper operator""_f(const char* s, std::size_t len) noexcept {
441
439
}
442
440
```
443
441
444
- `operator""_f` 本身非常简单,只是用来把传入的参数(格式字符串)和长度,构造 `mpl ::Helper` 对象再返回。`Helper` 类型使用了一个 `string_veiw ` 作为数据成员,存储了格式字符串,以供后面格式化使用。
442
+ `operator""_f` 本身非常简单,只是用来把传入的参数(格式字符串)和长度,构造 `impl ::Helper` 对象再返回。`Helper` 类型使用了一个 `string_view ` 作为数据成员,存储了格式字符串,以供后面格式化使用。
445
443
446
444
**重点只在于 `operator()`。** 它是一个变参模板,用来接取我们传入的任意类型和个数的参数,然后返回格式化后的字符串。
447
445
Original file line number Diff line number Diff line change @@ -10,14 +10,12 @@ void print(std::string_view format_str, Args const&... args) {
10
10
std::cout << std::vformat (format_str, std::make_format_args (std::forward<decltype (args)>(args)...));
11
11
}
12
12
13
- namespace std {
14
- template <>
15
- struct formatter <Frac> : formatter<string> {
16
- auto format (Frac const & f, format_context& ctx) const {
17
- return format_to (ctx.out (), " {}/{}" , f.a , f.b );
18
- }
19
- };
20
- }
13
+ template <>
14
+ struct std ::formatter<Frac> : std::formatter<string> {
15
+ auto format (Frac const & f, format_context& ctx) const {
16
+ return std::format_to (ctx.out (), " {}/{}" , f.a , f.b );
17
+ }
18
+ };
21
19
22
20
int main () {
23
21
const Frac f{ 1 , 10 };
Original file line number Diff line number Diff line change @@ -17,4 +17,3 @@ std::atomic<int> n = std::atomic<int>(6);
17
17
因此在 C++17 之前的版本,理所应当应该查找检测复制/移动 构造函数,满足要求才可以通过编译。但是实际上 ` atomic ` 的复制构造被删除(因为三/五/零法则,移动构造也被抑制生成)了,所以自然而然地不允许。
18
18
19
19
然而在 C++17 起,复制消除变为强制要求。纯右值表达式作为构造对象的参数,不会再调用移动构造,也不会去检测,而是原位构造。
20
-
Original file line number Diff line number Diff line change 11
11
` t() ` 中的 ` this->f() ` 是无限定的待决调用,会在明确它的模板实参之时再次进行关于 ` f ` 的名字查找,并且会查找基类,因此找到了基类的成员函数 ` f() ` 。
12
12
13
13
` t2() ` 中的 ` f() ` 是无限定的非待决调用,检查该模板的定义时将进行关于 ` f ` 的无限定的名字查找(无法查找父类的定义),按照正常的查看顺序,先类内(查找不到),然后全局(找到)。
14
-
Original file line number Diff line number Diff line change 1
1
C++20 前不允许使用 ` () ` 初始化聚合体。
2
-
Original file line number Diff line number Diff line change 1
1
1 . ` std::move() ` 个 jb 啊,不 move 也能复制消除,move 还可能影响优化。
2
2
2 . 有问题,悬垂引用。
3
3
3 . 没有问题,类数据成员不是隐式可移动实体,需要通过 ` std::move ` 让重载决议选择移动构造。
4
-
You can’t perform that action at this time.
0 commit comments