Skip to content

Commit

Permalink
Fix all MD044 violation
Browse files Browse the repository at this point in the history
  • Loading branch information
rsp4jack committed Feb 3, 2024
1 parent 31759fb commit 76957b9
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 8 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ std::vector<U>& operator|(std::vector<U>& v1, const F f) {

同样的我们可以不使用范围 for 而是更简单的 `std::ranges::for_each(v1, f);` 即同上一样对范围 v1内的每个元素,应用一次函数 **f**

对于使用模板的形式,我们可以使用 c++20 的简写函数模板;简而言之,在函数形参列表中 auto 占位符会为模板形参列表追加一个虚设的模板形参。最开始的模板形式可以写成
对于使用模板的形式,我们可以使用 C++20 的简写函数模板;简而言之,在函数形参列表中 auto 占位符会为模板形参列表追加一个虚设的模板形参。最开始的模板形式可以写成

```c++
std::vector<int>& operator|(auto& v1, const auto& f)
Expand Down Expand Up @@ -1004,7 +1004,7 @@ this->f();
1. `this->f()` **是待决名**,所以它的查找会推迟到得知它模板实参之时(届时可以确定父类是否有 `f` 函数)。
2. `f()` **是非待决名**,检查该模板的定义时将进行无限定的名字查找(无法查找父类的定义),按照正常的查看顺序,先类内(查找不到),然后全局(找到)。

>补充:如果是 `msvc` 的某些早期版本,或者 c++版本设置在 c++20之前,会打印 `X` `X`。这是因为 `msvc`不支持 [`Two-phase name lookup`](https://learn.microsoft.com/zh-cn/archive/blogs/c/msvc%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81two-phase-name-lookup)。
>补充:如果是 `msvc` 的某些早期版本,或者 c++版本设置在 C++20之前,会打印 `X` `X`。这是因为 `msvc`不支持 [`Two-phase name lookup`](https://learn.microsoft.com/zh-cn/archive/blogs/c/msvc%E5%B7%B2%E7%BB%8F%E6%94%AF%E6%8C%81two-phase-name-lookup)。
详细的可以看看文档。实测 `Microsoft Visual Studio 17.6.4` 设置 `C++20` 之前的版本都无法得到正确结果。

---
Expand Down
4 changes: 2 additions & 2 deletions src/群友提交/第06题/loser_linker.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
6能转换为 std::atomic<int>,
是因为调用了`constexpr atomic(T) noexcept;`用户自定义转换构造函数,
相当于`std::atomic<int> n = std::atomic<int>(6);`
c++17之前的版本,通过调用复制或移动构造函数来完成 n 的初始化,
C++17之前的版本,通过调用复制或移动构造函数来完成 n 的初始化,
标准规定 std::atomic 既不可复制亦不可移动,所以编译失败。
c++17标准以后,复制清除变成强制要求,与此同时,用右值初始化对象不会再调用移动构造,而是直接原位构造,所以通过编译。
C++17标准以后,复制清除变成强制要求,与此同时,用右值初始化对象不会再调用移动构造,而是直接原位构造,所以通过编译。
4 changes: 2 additions & 2 deletions src/群友提交/第10题/yuzhiy.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ constexpr size_t size()
```

2.结构化绑定解包结构体,对每个成员分别调用函数 f()
获取完结构体成员数量就可以用`if constexpr`[c++17的结构化绑定](https://zh.cppreference.com/w/cpp/language/structured_binding)**绑定指定名称到初始化器的子对象或元素。类似引用,结构化绑定是既存对象的别名。不同于引用的是,结构化绑定的类型不必为引用类型**
获取完结构体成员数量就可以用`if constexpr`[C++17的结构化绑定](https://zh.cppreference.com/w/cpp/language/structured_binding)**绑定指定名称到初始化器的子对象或元素。类似引用,结构化绑定是既存对象的别名。不同于引用的是,结构化绑定的类型不必为引用类型**

```c++
template <typename T, typename F>
Expand Down Expand Up @@ -85,4 +85,4 @@ void for_each_member(T const& v, F&& f) {
## 后记
白老师你这题就是你那个知乎文章吧,我也看了你 c++20的写法,主要区别还是获取成员数量的写法,感觉那个写法比这个打表适用性强,这 tm 结构题成员越多还要写更多重载。
白老师你这题就是你那个知乎文章吧,我也看了你 C++20的写法,主要区别还是获取成员数量的写法,感觉那个写法比这个打表适用性强,这 tm 结构题成员越多还要写更多重载。
4 changes: 2 additions & 2 deletions src/群友提交/第11题/loser_linker.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,5 @@ constexpr reference emplace_back(Args&&... args)

emplace_back 通过 std::allocator_traits::construct 构造,它典型地用布置 new 于容器所提供的位置原位构造元素。
参数 args... 以 std::forward<Args>(args)... 转发到构造函数。
c++20前,聚合体类型只能使用{}进行聚合初始化,但 c++20以后,也允许使用()进行聚合初始化,所以 c++20前,emplace_back 找不到构造函数,c++20以后可以找到聚合初始化,所以可以通过编译,
也就是说 c++20以后,`Pos p(1,2);` 等同于之前的`Pos p{ 1,2 };`
C++20前,聚合体类型只能使用{}进行聚合初始化,但 C++20以后,也允许使用()进行聚合初始化,所以 C++20前,emplace_back 找不到构造函数,C++20以后可以找到聚合初始化,所以可以通过编译,
也就是说 C++20以后,`Pos p(1,2);` 等同于之前的`Pos p{ 1,2 };`

0 comments on commit 76957b9

Please sign in to comment.