From 68db38ccb70b129ecdd045201a6cb852f3948f23 Mon Sep 17 00:00:00 2001 From: Changkun Ou Date: Mon, 2 Apr 2018 00:24:57 +0200 Subject: [PATCH] =?UTF-8?q?revision=20#1:=20=E5=A2=9E=E5=8A=A0=E4=B9=A0?= =?UTF-8?q?=E9=A2=98=E8=AF=B4=E6=98=8E=EF=BC=8C=E4=BF=AE=E6=AD=A3=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- book/0-preface.md | 4 ++-- book/1-intro.md | 22 ++++++++++++---------- book/toc.md | 8 ++++---- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 6cf90a7..69ba456 100644 --- a/README.md +++ b/README.md @@ -19,12 +19,16 @@ ## 开始阅读 -你可以从[这里](book/toc.md)开始阅读本书。 +你可以从[这里](book/toc)开始阅读本书。 ## 相关代码 本书每章中都出现了大量的代码,如果你在跟随本书介绍特性的思路编写自己的代码遇到问题时,不妨读一读随书附上的源码,你可以在[这里](code)中找到书中介绍过的全部的源码,所有代码按章节组织,文件夹名称为章节序号。 +## 随书习题 + +本书每章最后还加入了少量难度极小的习题,仅用于检验你是否能混合运用当前章节中的知识点。你可以在[这里](exercises)找到习题的答案,文件夹名称为章节序号。 + ## 交流 1. 笔者时间和水平有限,如果读者发现书中内容的错误,欢迎提 [issue](https://github.com/changkun/cpp1x-tutorial/issues); diff --git a/book/0-preface.md b/book/0-preface.md index 62cdd78..6cf1ee7 100644 --- a/book/0-preface.md +++ b/book/0-preface.md @@ -1,4 +1,4 @@ -# 高速上手现代 C++ 11/14/17 +# 高速上手 C++ 11/14/17 ## 引言 @@ -30,7 +30,7 @@ C++17 则是近三年依赖 C++ 社区一致推进的方向,也指出了**现 本书每章中都出现了大量的代码,如果你在跟随本书介绍特性的思路编写自己的代码遇到问题时,不妨读一读随书附上的源码,你可以在[这里](../code)中找到书中介绍过的全部的源码,所有代码按章节组织,文件夹名称为章节序号。 -[返回目录](./toc.md) | 上一章 | [下一章:迈向 C++11/14/17](./1-intro.md) +[返回目录](./toc) | 上一章 | [下一章:迈向 C++11/14/17](./1-intro) ## 许可 diff --git a/book/1-intro.md b/book/1-intro.md index 0cf0cde..4149b23 100644 --- a/book/1-intro.md +++ b/book/1-intro.md @@ -1,6 +1,8 @@ # 第 1 章 迈向 C++11/14/17 -[TOC] + + +本书将使用 `clang++` 作为唯一使用的编译器,同时总是在代码中使用 `-std=c++17` 编译标志。 ## 1.1 被弃用的特性 @@ -37,7 +39,7 @@ ![图 1.2: C 和 C++ 互相兼容情况](../assets/comparison.png) -从现在开始,你的脑子里应该树立**『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 // foo.h @@ -75,17 +77,17 @@ int main() { gcc -c foo.c ``` -编译出 foo.o 文件,再使用 `g++` 将 C++代码和 `.o` 文件链接起来(或者都编译为 `.o` 再统一链接): +编译出 foo.o 文件,再使用 `clang++` 将 C++代码和 `.o` 文件链接起来(或者都编译为 `.o` 再统一链接): ```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 C = gcc -CXX = g++ +CXX = clang++ SOURCE_C = foo.c OBJECTS_C = foo.o @@ -93,7 +95,7 @@ OBJECTS_C = foo.o SOURCE_CXX = 1.1.cpp TARGET = 1.1 -LDFLAGS_COMMON = -std=c++1z +LDFLAGS_COMMON = -std=c++17 all: $(C) -c $(SOURCE_C) @@ -102,21 +104,21 @@ clean: rm -rf *.o $(TARGET) ``` -> 注意,Makefile 中的缩进是制表符而不是空格符,如果你直接复制这段代码到你的编辑器中,制表符可能会被自动替换掉,请自行确保在 Makefile 中的缩进是由制表符完成的。 +> 注意:Makefile 中的缩进是制表符而不是空格符,如果你直接复制这段代码到你的编辑器中,制表符可能会被自动替换掉,请自行确保在 Makefile 中的缩进是由制表符完成的。 > -> 如果你还不知道 Makefile 的使用也没有关系,本教程中不会构建过于复杂的代码,简单的在命令行中使用 `g++ -std=c++1z` 也可以阅读本书。 +> 如果你还不知道 Makefile 的使用也没有关系,本教程中不会构建过于复杂的代码,简单的在命令行中使用 `clang++ -std=c++17` 也可以阅读本书。 如果你是首次接触现代 C++,那么你很可能还看不懂上面的那一小段代码,即: ```cpp [out = std::ref(std::cout << "Result from C code: " << add(1, 2))](){ - out.get() << ".\n"; + out.get() << ".\n"; }(); ``` 不必担心,本书的后续章节将为你介绍这一切。 -[返回目录](./toc.md) | [上一章](./0-preface.md) | [下一章:语言可用性强化](./2-usability.md) +[返回目录](./toc) | [上一章](./0-preface) | [下一章:语言可用性强化](./2-usability) ## 进一步阅读的参考文献 diff --git a/book/toc.md b/book/toc.md index bd4a7ef..ddff65c 100644 --- a/book/toc.md +++ b/book/toc.md @@ -4,13 +4,13 @@ ## 目录 -- [**序言**](./0-preface.md) -- [**第 1 章 迈向 C++11/14/17**](./1-intro.md) +- [**序言**](./0-preface) +- [**第 1 章 迈向 C++11/14/17**](./1-intro) + 1.1 被弃用的特性 + 1.2 与 C 的兼容性 + 进一步阅读的参考文献 - **第二章 语言可用性的强化** - + `nullptr` 与 `constexpr` + + nullptr 与 constexpr + 类型推导 + `auto` + `decltype` @@ -98,7 +98,7 @@ + 未入选特性 + Concepts -返回目录 | 上一章 | [下一章:序言](./0-preface.md) +返回目录 | 上一章 | [下一章:序言](./0-preface) ## 许可