mirror of
https://github.com/changkun/modern-cpp-tutorial.git
synced 2025-12-17 04:34:40 +03:00
revision #1: 增加习题说明,修正部分格式问题
This commit is contained in:
@@ -19,12 +19,16 @@
|
|||||||
|
|
||||||
## 开始阅读
|
## 开始阅读
|
||||||
|
|
||||||
你可以从[这里](book/toc.md)开始阅读本书。
|
你可以从[这里](book/toc)开始阅读本书。
|
||||||
|
|
||||||
## 相关代码
|
## 相关代码
|
||||||
|
|
||||||
本书每章中都出现了大量的代码,如果你在跟随本书介绍特性的思路编写自己的代码遇到问题时,不妨读一读随书附上的源码,你可以在[这里](code)中找到书中介绍过的全部的源码,所有代码按章节组织,文件夹名称为章节序号。
|
本书每章中都出现了大量的代码,如果你在跟随本书介绍特性的思路编写自己的代码遇到问题时,不妨读一读随书附上的源码,你可以在[这里](code)中找到书中介绍过的全部的源码,所有代码按章节组织,文件夹名称为章节序号。
|
||||||
|
|
||||||
|
## 随书习题
|
||||||
|
|
||||||
|
本书每章最后还加入了少量难度极小的习题,仅用于检验你是否能混合运用当前章节中的知识点。你可以在[这里](exercises)找到习题的答案,文件夹名称为章节序号。
|
||||||
|
|
||||||
## 交流
|
## 交流
|
||||||
|
|
||||||
1. 笔者时间和水平有限,如果读者发现书中内容的错误,欢迎提 [issue](https://github.com/changkun/cpp1x-tutorial/issues);
|
1. 笔者时间和水平有限,如果读者发现书中内容的错误,欢迎提 [issue](https://github.com/changkun/cpp1x-tutorial/issues);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# 高速上手现代 C++ 11/14/17
|
# 高速上手 C++ 11/14/17
|
||||||
|
|
||||||
## 引言
|
## 引言
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ C++17 则是近三年依赖 C++ 社区一致推进的方向,也指出了**现
|
|||||||
|
|
||||||
本书每章中都出现了大量的代码,如果你在跟随本书介绍特性的思路编写自己的代码遇到问题时,不妨读一读随书附上的源码,你可以在[这里](../code)中找到书中介绍过的全部的源码,所有代码按章节组织,文件夹名称为章节序号。
|
本书每章中都出现了大量的代码,如果你在跟随本书介绍特性的思路编写自己的代码遇到问题时,不妨读一读随书附上的源码,你可以在[这里](../code)中找到书中介绍过的全部的源码,所有代码按章节组织,文件夹名称为章节序号。
|
||||||
|
|
||||||
[返回目录](./toc.md) | 上一章 | [下一章:迈向 C++11/14/17](./1-intro.md)
|
[返回目录](./toc) | 上一章 | [下一章:迈向 C++11/14/17](./1-intro)
|
||||||
|
|
||||||
## 许可
|
## 许可
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# 第 1 章 迈向 C++11/14/17
|
# 第 1 章 迈向 C++11/14/17
|
||||||
|
|
||||||
[TOC]
|
<!-- toc -->
|
||||||
|
|
||||||
|
本书将使用 `clang++` 作为唯一使用的编译器,同时总是在代码中使用 `-std=c++17` 编译标志。
|
||||||
|
|
||||||
## 1.1 被弃用的特性
|
## 1.1 被弃用的特性
|
||||||
|
|
||||||
@@ -37,7 +39,7 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
从现在开始,你的脑子里应该树立**『C++ 不是 C 的一个超集』**这个观念(而且从一开始就不是,后面的[进一步阅读的参考文献](#进一步阅读的参考文献)中给出了 C++98 和 C99 之间的区别)。在编写 C++ 时,也应该尽可能的避免使用诸如 `void*` 之类的程序风格。而在不得不使用 C 时,应该注意使用 `extern "C"` 这种特性,将 C 语言的代码与 C++代码进行分离编译,再统一链接这种做法,例如:
|
从现在开始,你的脑子里应该树立『**C++ 不是 C 的一个超集**』这个观念(而且从一开始就不是,后面的[进一步阅读的参考文献](#进一步阅读的参考文献)中给出了 C++98 和 C99 之间的区别)。在编写 C++ 时,也应该尽可能的避免使用诸如 `void*` 之类的程序风格。而在不得不使用 C 时,应该注意使用 `extern "C"` 这种特性,将 C 语言的代码与 C++代码进行分离编译,再统一链接这种做法,例如:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
// foo.h
|
// foo.h
|
||||||
@@ -75,17 +77,17 @@ int main() {
|
|||||||
gcc -c foo.c
|
gcc -c foo.c
|
||||||
```
|
```
|
||||||
|
|
||||||
编译出 foo.o 文件,再使用 `g++` 将 C++代码和 `.o` 文件链接起来(或者都编译为 `.o` 再统一链接):
|
编译出 foo.o 文件,再使用 `clang++` 将 C++代码和 `.o` 文件链接起来(或者都编译为 `.o` 再统一链接):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
g++ 1.1.cpp foo.o -std=c++1z -o 1.1
|
clang++ 1.1.cpp foo.o -std=c++17 -o 1.1
|
||||||
```
|
```
|
||||||
|
|
||||||
当然,你可以可以使用 `Makefile` 来编译上面的代码:
|
当然,你可以可以使用 `Makefile` 来编译上面的代码:
|
||||||
|
|
||||||
```makefile
|
```makefile
|
||||||
C = gcc
|
C = gcc
|
||||||
CXX = g++
|
CXX = clang++
|
||||||
|
|
||||||
SOURCE_C = foo.c
|
SOURCE_C = foo.c
|
||||||
OBJECTS_C = foo.o
|
OBJECTS_C = foo.o
|
||||||
@@ -93,7 +95,7 @@ OBJECTS_C = foo.o
|
|||||||
SOURCE_CXX = 1.1.cpp
|
SOURCE_CXX = 1.1.cpp
|
||||||
|
|
||||||
TARGET = 1.1
|
TARGET = 1.1
|
||||||
LDFLAGS_COMMON = -std=c++1z
|
LDFLAGS_COMMON = -std=c++17
|
||||||
|
|
||||||
all:
|
all:
|
||||||
$(C) -c $(SOURCE_C)
|
$(C) -c $(SOURCE_C)
|
||||||
@@ -102,9 +104,9 @@ clean:
|
|||||||
rm -rf *.o $(TARGET)
|
rm -rf *.o $(TARGET)
|
||||||
```
|
```
|
||||||
|
|
||||||
> 注意,Makefile 中的缩进是制表符而不是空格符,如果你直接复制这段代码到你的编辑器中,制表符可能会被自动替换掉,请自行确保在 Makefile 中的缩进是由制表符完成的。
|
> 注意:Makefile 中的缩进是制表符而不是空格符,如果你直接复制这段代码到你的编辑器中,制表符可能会被自动替换掉,请自行确保在 Makefile 中的缩进是由制表符完成的。
|
||||||
>
|
>
|
||||||
> 如果你还不知道 Makefile 的使用也没有关系,本教程中不会构建过于复杂的代码,简单的在命令行中使用 `g++ -std=c++1z` 也可以阅读本书。
|
> 如果你还不知道 Makefile 的使用也没有关系,本教程中不会构建过于复杂的代码,简单的在命令行中使用 `clang++ -std=c++17` 也可以阅读本书。
|
||||||
|
|
||||||
如果你是首次接触现代 C++,那么你很可能还看不懂上面的那一小段代码,即:
|
如果你是首次接触现代 C++,那么你很可能还看不懂上面的那一小段代码,即:
|
||||||
|
|
||||||
@@ -116,7 +118,7 @@ clean:
|
|||||||
|
|
||||||
不必担心,本书的后续章节将为你介绍这一切。
|
不必担心,本书的后续章节将为你介绍这一切。
|
||||||
|
|
||||||
[返回目录](./toc.md) | [上一章](./0-preface.md) | [下一章:语言可用性强化](./2-usability.md)
|
[返回目录](./toc) | [上一章](./0-preface) | [下一章:语言可用性强化](./2-usability)
|
||||||
|
|
||||||
## 进一步阅读的参考文献
|
## 进一步阅读的参考文献
|
||||||
|
|
||||||
|
|||||||
@@ -4,13 +4,13 @@
|
|||||||
|
|
||||||
## 目录
|
## 目录
|
||||||
|
|
||||||
- [**序言**](./0-preface.md)
|
- [**序言**](./0-preface)
|
||||||
- [**第 1 章 迈向 C++11/14/17**](./1-intro.md)
|
- [**第 1 章 迈向 C++11/14/17**](./1-intro)
|
||||||
+ 1.1 被弃用的特性
|
+ 1.1 被弃用的特性
|
||||||
+ 1.2 与 C 的兼容性
|
+ 1.2 与 C 的兼容性
|
||||||
+ 进一步阅读的参考文献
|
+ 进一步阅读的参考文献
|
||||||
- **第二章 语言可用性的强化**
|
- **第二章 语言可用性的强化**
|
||||||
+ `nullptr` 与 `constexpr`
|
+ nullptr 与 constexpr
|
||||||
+ 类型推导
|
+ 类型推导
|
||||||
+ `auto`
|
+ `auto`
|
||||||
+ `decltype`
|
+ `decltype`
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
+ 未入选特性
|
+ 未入选特性
|
||||||
+ Concepts
|
+ Concepts
|
||||||
|
|
||||||
返回目录 | 上一章 | [下一章:序言](./0-preface.md)
|
返回目录 | 上一章 | [下一章:序言](./0-preface)
|
||||||
|
|
||||||
## 许可
|
## 许可
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user