mirror of
https://github.com/changkun/modern-cpp-tutorial.git
synced 2025-12-17 04:34:40 +03:00
resolve #10, 修复 typo 错误
This commit is contained in:
@@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
笔者时间和水平有限,如果读者发现书中内容的错误,欢迎提 [issue](https://github.com/changkun/cpp1x-tutorial/issues)。并感谢以下读者指出本书中出现的错误:
|
笔者时间和水平有限,如果读者发现书中内容的错误,欢迎提 [issue](https://github.com/changkun/cpp1x-tutorial/issues)。并感谢以下读者指出本书中出现的错误:
|
||||||
|
|
||||||
[Recolic Keghart](https://www.gitbook.com/@recolic), [sinomiko](https://www.gitbook.com/@sinomiko), [Wang Zhenhua](https://www.gitbook.com/@jackwish), [asm warrior](https://www.gitbook.com/@asmwarrior), [garicc](https://www.gitbook.com/@ihpy), [Wenhan Jiang](https://www.gitbook.com/@jiangwenhan), [liang xiao](https://www.gitbook.com/@liangx8), [slivermeteor](https://github.com/slivermeteor), [inkedawn](https://github.com/inkedawn), [zhaoyao73](https://github.com/zhaoyao73)
|
[Recolic Keghart](https://www.gitbook.com/@recolic), [sinomiko](https://www.gitbook.com/@sinomiko), [Wang Zhenhua](https://www.gitbook.com/@jackwish), [asm warrior](https://www.gitbook.com/@asmwarrior), [garicc](https://www.gitbook.com/@ihpy), [Wenhan Jiang](https://www.gitbook.com/@jiangwenhan), [liang xiao](https://www.gitbook.com/@liangx8), [slivermeteor](https://github.com/slivermeteor), [inkedawn](https://github.com/inkedawn), [zhaoyao73](https://github.com/zhaoyao73), [sundy-li](https://github.com/sundy-li), [dontpanic92](https://github.com/dontpanic92)
|
||||||
|
|
||||||
## 许可
|
## 许可
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ void foo(char*);
|
|||||||
void foo(int);
|
void foo(int);
|
||||||
```
|
```
|
||||||
|
|
||||||
那么 `foo(NULL);` 这个语句将会去调用 `foo(int)`,从而导致代码违反直观。
|
那么 `foo(NULL);` 这个语句将会去调用 `foo(int)`,从而导致代码违反直觉。
|
||||||
|
|
||||||
为了解决这个问题,C++11 引入了 `nullptr` 关键字,专门用来区分空指针、0。而 `nullptr` 的类型为 `nullptr_t`,能够隐式的转换为任何指针或成员指针的类型,也能和他们进行相等或者不等的比较。
|
为了解决这个问题,C++11 引入了 `nullptr` 关键字,专门用来区分空指针、0。而 `nullptr` 的类型为 `nullptr_t`,能够隐式的转换为任何指针或成员指针的类型,也能和他们进行相等或者不等的比较。
|
||||||
|
|
||||||
@@ -111,7 +111,7 @@ int main() {
|
|||||||
|
|
||||||
在 C++11 之前,可以在常量表达式中使用的变量必须被声明为 `const`,在上面代码中,`len_2` 被定义成了常量,因此 `len_2` 是一个常量表达式,所以能够合法的分配一个数组;而对于 `arr_5` 来说,C++98 之前的编译器无法得知 `len_foo()` 在运行期实际上是返回一个常数,这也就导致了非法的产生。
|
在 C++11 之前,可以在常量表达式中使用的变量必须被声明为 `const`,在上面代码中,`len_2` 被定义成了常量,因此 `len_2` 是一个常量表达式,所以能够合法的分配一个数组;而对于 `arr_5` 来说,C++98 之前的编译器无法得知 `len_foo()` 在运行期实际上是返回一个常数,这也就导致了非法的产生。
|
||||||
|
|
||||||
> 注意,现在大部分编译器其实都带有自身编译优化,很多非法行为在编译器优化的加持下回变得合法,若需重现编译报错的现象需要使用老版本的编译器。
|
> 注意,现在大部分编译器其实都带有自身编译优化,很多非法行为在编译器优化的加持下会变得合法,若需重现编译报错的现象需要使用老版本的编译器。
|
||||||
|
|
||||||
|
|
||||||
C++11 提供了 `constexpr` 让用户显式的声明函数或对象构造函数在编译器会成为常数,这个关键字明确的告诉编译器应该去验证 `len_foo` 在编译器就应该是一个常数。
|
C++11 提供了 `constexpr` 让用户显式的声明函数或对象构造函数在编译器会成为常数,这个关键字明确的告诉编译器应该去验证 `len_foo` 在编译器就应该是一个常数。
|
||||||
@@ -716,7 +716,7 @@ void printf(T0 t0, T... t) {
|
|||||||
|
|
||||||
**2. 初始化列表展开**
|
**2. 初始化列表展开**
|
||||||
|
|
||||||
> 这个方法需要之后介绍的知识,读者可以简单阅读以下,将这个代码段保存,在后面的内容了解过了之后再回过头来阅读此处方法会大有收获。
|
> 这个方法需要之后介绍的知识,读者可以简单阅读一下,将这个代码段保存,在后面的内容了解过了之后再回过头来阅读此处方法会大有收获。
|
||||||
|
|
||||||
递归模板函数是一种标准的做法,但缺点显而易见的在于必须定义一个终止递归的函数。
|
递归模板函数是一种标准的做法,但缺点显而易见的在于必须定义一个终止递归的函数。
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user