Skip to content

Commit

Permalink
Merge pull request #210 from zzwxh/main
Browse files Browse the repository at this point in the history
添加ci检查非法文件
  • Loading branch information
Mq-b authored Dec 27, 2023
2 parents 5d5cacd + e81b5e2 commit 229475a
Show file tree
Hide file tree
Showing 29 changed files with 237 additions and 88 deletions.
29 changes: 29 additions & 0 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Check

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Cache
id: cache
uses: actions/cache@v3
with:
path: check/target/release/check
key: check-build-cache-0001

- name: Build
if: steps.cache.outputs.cache-hit != 'true'
run: |
cd check
cargo build --release
- name: Check
run: check/target/release/check
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,6 @@
*.out
*.pygstyle
*.pygtex
*.toc
*.toc
/check/target
/check/Cargo.lock
2 changes: 1 addition & 1 deletion C++CoreGuidelines/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

它并不适合完全0基础,虽然书籍自称自己的目标读者群是:**所有 C++ 程序员,包括可能考虑使用 C 语言的程序员。**

如果你能在阅读的同时学习现代C++,倒也无所谓了,虽然它涉及到的远不止单纯的语言层面。
如果你能在阅读的同时学习现代 C++,倒也无所谓了,虽然它涉及到的远不止单纯的语言层面。

同时,本书有很多有意思的 **C++金句**,我们会进行特殊标注(斜体)。比如

Expand Down
6 changes: 3 additions & 3 deletions C++CoreGuidelines/第3章-接口.md
Original file line number Diff line number Diff line change
Expand Up @@ -203,11 +203,11 @@ void showRectangle(Point top_left, Point bottom_right); // 好

尽管函数 showRectangle 本应当只显示一个矩形,但修改了它的参数。实质上它有两个目的,因此,它的名字有误导性(I.1)。另外,函数签名没有提供关于参数应该是什么的任何信息,也没有关于应该以什么顺序提供参数的信息(I.23 和 I.24)。此外,参数是没有取值范围约束的双精度浮点数。因此,这种约束必须在函数中确立(I.4)。对比而言,第二个 showRectangle 函数接受两个具体的点对象(Point)。

- *检查 Point是否合法值是 Point 构造函数的工作。这种检查工作本来就不是函数 showRectangle 的职责*
- *检查 Point 是否合法值是 Point 构造函数的工作。这种检查工作本来就不是函数 showRectangle 的职责*

进一步阐述规则 **I.23****I.24** 以及标准模板库(STL)中的函数 [**`std::transform_reduce`**](https://zh.cppreference.com/w/cpp/algorithm/transform_reduce)。首先,需要定义属于“[可调用](https://zh.cppreference.com/w/cpp/named_req/Callable)”(callable)。可调用实体是在行为上像函数的东西。它可以是函数,也可以是函数对象,或者是 lambda 表达式。如果可调用实体接受一个参数,它就是一元可调用实体;如果它接受两个参数,则称为二元可调用实体。

std::transform_reduce 先将一元可调用实体应用到一个范围或将二元可调用实体应用在两个范围,然后将二元可调用实体应用到前一步的结果的范围上。当你使用一个一元 lambda 表达式调用 std::transform_reduce时,这种调用易于正确使用。
std::transform_reduce 先将一元可调用实体应用到一个范围或将二元可调用实体应用在两个范围,然后将二元可调用实体应用到前一步的结果的范围上。当你使用一个一元 lambda 表达式调用 std::transform_reduce 时,这种调用易于正确使用。

```cpp
std::vector<std::string>strVec{"Only", "for", "testing", "purpose"};
Expand All @@ -221,7 +221,7 @@ std::size_t res = std::transform_reduce(
```
> 事实上原书给的上面这段代码是有问题的,无法在 `msvc` 通过编译,这里使用的是 **`0`** 做初始值,有窄化转换,[msvc 使用的是 `{}` 初始化](https://github.com/microsoft/STL/blob/adea8d5ae280cafb91ae69b8dfaecd1c37a847d9/stl/inc/execution#L4235)。,检测到了,于是编译错误。(但是需要注意,不是简单的 `{}` 检测的问题,msvc 的实现和其他 stl 从根本上就不一样)
> 这里其实可以算作是 msvc 的bug,这个场景需要良构 这里应该把 0 换成 `Oull` (基于当前 64 位环境),或者标准够高使用 `0uz`,再或者直接 `std::size_t{0}`。
> 这里其实可以算作是 msvc 的 bug,这个场景需要良构 这里应该把 0 换成 `Oull` (基于当前 64 位环境),或者标准够高使用 `0uz`,再或者直接 `std::size_t{0}`。
函数 `std::transform_reduce` 先将每个字符串变换为它的长度 `[](std::string s) {return s.size(); }` , 并将二元可调用实体 `[](std::size_t a, std::size_t b) {return a + b; },` 应用到结果的范围上。求和的初始值是 0。整个计算是并行的 `std::execution::par`。
Expand Down
4 changes: 2 additions & 2 deletions C++CoreGuidelines/第4章-函数.md
Original file line number Diff line number Diff line change
Expand Up @@ -653,7 +653,7 @@ double* ptr = new double[5];
func(ptr);
```
关键问题是,谁是资源的所有者?是使用该数组的 func 中的被调用方,还是创建该数组的 func 的调用方?如果 func 是所有者,那么它必须释放该资源。如果不是,则func 不可以释放资源。这种情况不能令人满意。如果 func 不释放资源,可能会发生内存泄露。如果 func 释放了资源,可能会导致未定义行为。
关键问题是,谁是资源的所有者?是使用该数组的 func 中的被调用方,还是创建该数组的 func 的调用方?如果 func 是所有者,那么它必须释放该资源。如果不是,则 func 不可以释放资源。这种情况不能令人满意。如果 func 不释放资源,可能会发生内存泄露。如果 func 释放了资源,可能会导致未定义行为。
因此,所有权需要记录在文档中。使用现代 C++ 中的类型系统来定义所有权的契约是朝正确方向迈出的一大步,可以消除文档的模糊性。
Expand Down Expand Up @@ -1035,7 +1035,7 @@ sum 是一个变参数函数。它的第一个参数是需要被求和的参数
请阅读 cppreference.com 中关于[变参数函数](https://zh.cppreference.com/w/cpp/language/variadic_arguments)的部分来获取进一步的信息。
代码行(1)和(2)中出了些状况。(1)中参数 num 的数量是错的;(2)中我提供了一个 double 而不是一个int。[输出结果](https://godbolt.org/z/nch8fjdf5)显示了这两个问题。(1)中的最后一个元素丢失了,而 double 被解释为 int(2)。
代码行(1)和(2)中出了些状况。(1)中参数 num 的数量是错的;(2)中我提供了一个 double 而不是一个 int。[输出结果](https://godbolt.org/z/nch8fjdf5)显示了这两个问题。(1)中的最后一个元素丢失了,而 double 被解释为 int(2)。
```txt
sum(1, 5): 5
Expand Down
8 changes: 4 additions & 4 deletions C++CoreGuidelines/第5章-类和类层次结构.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ Guidelines 先给出了一些概要规则,然后深入讨论了下面的特殊

概要规则相当简短,没有涉及太多细节。它们对类概括提供了有价值的深刻见解。

> **class(类)和struct(结构体)之间的语法差异**
> **class(类)和 struct(结构体)之间的语法差异**
> 本节经常提到类和结构体之间的**语义**区别。首先。**语法**上的差异是什么?差异很小,但很重要:
> - 在结构体中,所有成员默认为 public(公开);类为(private)私有。
> - 继承情况也是如此。结构体默认继承权限为 public,类为 private。
Expand Down Expand Up @@ -240,7 +240,7 @@ Date date{ /*...*/ };
长话短说:应用 [KISS](https://en.wikipedia.org/wiki/KISS_principle) 原则(“keep it simple,stupid”原则,保持简单,让傻瓜都能理解)。你的类型行为像普通数值一样。
[^5]: mq白注:原文写的是“运行期开销”,英文原文是“`run-time overhead`”,不好,改掉。
[^5]: mq 白注:原文写的是“运行期开销”,英文原文是“`run-time overhead`”,不好,改掉。
### C.11 让具体类型规范化
Expand Down Expand Up @@ -438,9 +438,9 @@ double free or corruption (!prev)
Program terminated with signal: SIGSEGV
```

[^1]: mq白注:在当前版本的 [C++Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c21-if-you-define-or-delete-any-copy-move-or-destructor-function-define-or-delete-them-all) 里,C.21 已经把“默认操作”改成了“拷贝、移动、析构函数”,明确剔除了默认构造函数。
[^1]: mq 白注:在当前版本的 [C++Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c21-if-you-define-or-delete-any-copy-move-or-destructor-function-define-or-delete-them-all) 里,C.21 已经把“默认操作”改成了“拷贝、移动、析构函数”,明确剔除了默认构造函数。

[^2]: mq白注`=delete` 就是表格中 “弃置” 的意思。
[^2]: mq 白注`=delete` 就是表格中 “弃置” 的意思。

### C.22 让默认操作保持一致

Expand Down
10 changes: 5 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

如果你想要在题库中**添加一道题目**,请遵循如下指南:

1. 为了便于管理,题号由负责合并pr的管理人员添加,并按照pr合并时的序号递增。出题人可以不写序号,或随便写一个占位;
1. 为了便于管理,题号由负责合并 pr 的管理人员添加,并按照 pr 合并时的序号递增。出题人可以不写序号,或随便写一个占位;
2. 题目需要有一个简单的标题,说明题目的大体内容,设置为二级标题;
3. 题目需要包含日期和出题人ID,日期和时间均需要前后加反引号并加粗,日期按照 `年/月/日` 格式排列,示例:**`2023/7/21`****`mq白`**;
4. 题目的代码部分需要以代码块的形式给出,并注明编程语言(本仓库中一般应为c++);
3. 题目需要包含日期和出题人 ID,日期和时间均需要前后加反引号并加粗,日期按照 `年/月/日` 格式排列,示例:**`2023/7/21`****`mq白`**;
4. 题目的代码部分需要以代码块的形式给出,并注明编程语言(本仓库中一般应为 c++);
5. 题目中应当包含示例运行结果,同样以代码块的形式给出;
6. 难度部分可以省略,或者按照主观判断添加。题目添加后仓库管理人员可能会酌情修改;
7. github的markdown语法在换行时需要在行末添加两个空格,请在fork的仓库中确认好格式正常后再提交pr
7. github 的 markdown 语法在换行时需要在行末添加两个空格,请在 fork 的仓库中确认好格式正常后再提交 pr

**太麻烦了你直接看第一题是个啥形式就可以了。**

P.S. 指南内容还在更新中,提交pr前请注意关注该指南是否有更新
P.S. 指南内容还在更新中,提交 pr 前请注意关注该指南是否有更新
Loading

0 comments on commit 229475a

Please sign in to comment.