OSDN Git Service

style: format markdown files with remark-lint
author24OI-bot <15963390+24OI-bot@users.noreply.github.com>
Fri, 6 Sep 2019 04:31:25 +0000 (00:31 -0400)
committer24OI-bot <15963390+24OI-bot@users.noreply.github.com>
Fri, 6 Sep 2019 04:31:25 +0000 (00:31 -0400)
docs/lang/c-cpp.md
docs/lang/const.md
docs/lang/csl/algorithm.md

index c1abf04..8b20ec8 100644 (file)
@@ -1,4 +1,4 @@
-本文介绍 C 与 C++ 之间重要的或者容易忽略的区别。尽管 C++ 几乎是 C 的超集,C/C++ 代码混用一般也没什么问题,但是了解 C/C++ 间比较重要区别可以避免碰到一些奇怪的bug。如果你是以 C 为主力语言的OIer,那么本文也能让你更顺利地上手 C++。C++ 相比 C 增加的独特特性可以阅读 [C++ 进阶](https://oi-wiki.org/lang/class/)部分的教程。
+本文介绍 C 与 C++ 之间重要的或者容易忽略的区别。尽管 C++ 几乎是 C 的超集,C/C++ 代码混用一般也没什么问题,但是了解 C/C++ 间比较重要区别可以避免碰到一些奇怪的 bug。如果你是以 C 为主力语言的 OIer,那么本文也能让你更顺利地上手 C++。C++ 相比 C 增加的独特特性可以阅读 [C++ 进阶](https://oi-wiki.org/lang/class/) 部分的教程。
 
 ## 宏与模板
 
@@ -6,18 +6,18 @@ C++ 的模板在设计之初的一个用途就是用来替换宏定义。学会
 
 ## 指针与引用
 
-C++ 中你仍然可以使用 C 风格的指针,但是对于变量传递而言,更推荐使用 C++ 的[引用](./reference.md)特性来实现类似的功能。由于引用指向的对象不能为空,因此可以避免一些空地址访问的问题。不过指针由于其灵活性,也仍然有其用武之处。值得一提的是,C 中的 `NULL` 空指针在 C++ 中有类型安全的替代品 `nullptr`。引用和指针之间可以通过 [`*` 和 `&` 运算符](./op.md)相互转换。
+C++ 中你仍然可以使用 C 风格的指针,但是对于变量传递而言,更推荐使用 C++ 的 [引用](./reference.md) 特性来实现类似的功能。由于引用指向的对象不能为空,因此可以避免一些空地址访问的问题。不过指针由于其灵活性,也仍然有其用武之处。值得一提的是,C 中的 `NULL` 空指针在 C++ 中有类型安全的替代品 `nullptr` 。引用和指针之间可以通过 [ `*` 和 `&` 运算符](./op.md) 相互转换。
 
 ## struct
 
-尽管在 C 和 C++ 中都有struct的概念,但是他们对应的东西是不能混用的!C 中的 struct 用来描述一种固定的内存组织结构,而 C++ 中的 struct 就是一种类,**唯一的区别就是它的成员默认是 public 的**,而一般类的默认成员是 private 的。这一点在写 C/C++ 混合代码时尤其致命。
+尽管在 C 和 C++ 中都有 struct 的概念,但是他们对应的东西是不能混用的!C 中的 struct 用来描述一种固定的内存组织结构,而 C++ 中的 struct 就是一种类, **唯一的区别就是它的成员默认是 public 的** ,而一般类的默认成员是 private 的。这一点在写 C/C++ 混合代码时尤其致命。
 
 ## const
 
-const 在 C 中只有限定变量不能修改的功能,而在 C++ 中,由于大量新特性的出现,const 也被赋予的更多用法。C 中的 const 在 C++ 中的继任者是 constexpr,而 C++ 中的 const 的用法请参见[常值](./const.md)页面的说明。
+const 在 C 中只有限定变量不能修改的功能,而在 C++ 中,由于大量新特性的出现,const 也被赋予的更多用法。C 中的 const 在 C++ 中的继任者是 constexpr,而 C++ 中的 const 的用法请参见 [常值](./const.md) 页面的说明。
 
 ## 内存分配
 
-C++ 中新增了 new 和 delete 关键字用来在“自由存储区”上分配空间,这个自由存储区可以是堆也可以是静态存储区,他们是为了配合“类”而出现的。其中 `detele[]` 关键字还能够直接动态分配数组,非常方便。new 和 delete 关键字会调用类型的构造函数和析构函数,相比 C 中的 `malloc()`、`realloc()`、`free()`函数,他们对类型有更完善的支持,但是效率也不如 C 中的这些函数。
+C++ 中新增了 new 和 delete 关键字用来在“自由存储区”上分配空间,这个自由存储区可以是堆也可以是静态存储区,他们是为了配合“类”而出现的。其中 `detele[]` 关键字还能够直接动态分配数组,非常方便。new 和 delete 关键字会调用类型的构造函数和析构函数,相比 C 中的 `malloc()` 、 `realloc()` 、 `free()` 函数,他们对类型有更完善的支持,但是效率也不如 C 中的这些函数。
 
-简而言之,如果你需要动态分配内存的对象是基础类型或他们的数组,那么你可以使用`malloc()`进行更高效的内存分配;但如果你新建的对象是非基础的类型,那么建议使用 `new` 以获得安全性检查。值得注意的是尽管 new 和 `malloc()` 都能给返回指针,但是 new 出来的指针**只能用 delete 回收**,而 `malloc()` 出来的指针也只能用 `free()` 回收,否则会有内存泄漏的风险。
+简而言之,如果你需要动态分配内存的对象是基础类型或他们的数组,那么你可以使用 `malloc()` 进行更高效的内存分配;但如果你新建的对象是非基础的类型,那么建议使用 `new` 以获得安全性检查。值得注意的是尽管 new 和 `malloc()` 都能给返回指针,但是 new 出来的指针 **只能用 delete 回收** ,而 `malloc()` 出来的指针也只能用 `free()` 回收,否则会有内存泄漏的风险。
index 587b970..6de9ff1 100644 (file)
@@ -42,18 +42,18 @@ const int &r4 = b;
 另外需要区分开的是“常类型指针”和“常指针变量”(即常指针、指针常量),例如下列声明
 
 ```cpp
-int* const p1; // 类型为int的常指针,需要初始化
-const int* p2; // 类型为const int的指针
-const int* const p3; // 类型为const int的常指针
+int* const p1;        // 类型为int的常指针,需要初始化
+const int* p2;        // 类型为const int的指针
+const int* const p3;  // 类型为const int的常指针
 
-int (*f1)(int); // 普通的函数指针
+int (*f1)(int);  // 普通的函数指针
 // int (const *f2)(int); // 指向常函数的指针,不可行
-int (*const f3)(int) = some_func; // 指向函数的常指针,需要初始化
-int const *(*f4)(int); // 指向返回常指针的函数指针
-int const *(*const f5)(int) = some_func; // 指向返回常指针的函数的常指针
+int (*const f3)(int) = some_func;  // 指向函数的常指针,需要初始化
+int const* (*f4)(int);             // 指向返回常指针的函数指针
+int const* (*const f5)(int) = some_func;  // 指向返回常指针的函数的常指针
 ```
 
-我们把常类型指针又称**底层指针**、常指针变量又称**顶层指针**。另外,C++中还提供了 `const_cast` 运算符来强行去掉或者增加引用或指针类型的 const 限定,不到万不得已的时候请不要使用这个关键字。
+我们把常类型指针又称 **底层指针** 、常指针变量又称 **顶层指针** 。另外,C++ 中还提供了 `const_cast` 运算符来强行去掉或者增加引用或指针类型的 const 限定,不到万不得已的时候请不要使用这个关键字。
 
 ### 常参数
 
index d2e2fdf..bc7c5b5 100644 (file)
@@ -1,4 +1,4 @@
-STL 提供了大约 100 个实现算法的模版函数,基本都包含在 `<algorithm>` 之中,还有一部分包含在 `<numeric>` 和 `<functional>` 。完备的函数列表请 [参见参考手册](https://zh.cppreference.com/w/cpp/algorithm),排序相关的可以参考[排序内容的对应页面](../../basic/stl-sort.md)
+STL 提供了大约 100 个实现算法的模版函数,基本都包含在 `<algorithm>` 之中,还有一部分包含在 `<numeric>` 和 `<functional>` 。完备的函数列表请 [参见参考手册](https://zh.cppreference.com/w/cpp/algorithm) ,排序相关的可以参考 [排序内容的对应页面](../../basic/stl-sort.md) 
 
 -    `find` :顺序查找。 `find(v.begin(), v.end(), value)` ,其中 `value` 为需要查找的值。
 -    `find_end` :逆序查找。 `find_end(v.begin(), v.end(), value)` 。