From 888f8d07944afc9f56743b6546fe8d0a63c0420f Mon Sep 17 00:00:00 2001 From: Changkun Ou Date: Fri, 30 Mar 2018 14:39:30 +0200 Subject: [PATCH] =?UTF-8?q?revision:=20#2:=20=E5=A2=9E=E5=8A=A0=E9=9A=8F?= =?UTF-8?q?=E4=B9=A6=E4=BB=A3=E7=A0=81=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 ++++++++++++++++------------ book/0-preface.md | 20 ++++++++++++-------- book/toc.md | 2 +- code/1/1.1 | Bin 15596 -> 0 bytes code/1/1.1.cpp | 1 + code/1/foo.c | 1 + 6 files changed, 31 insertions(+), 21 deletions(-) delete mode 100755 code/1/1.1 diff --git a/README.md b/README.md index 5b28267..3946a81 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,34 @@ # 《高速上手 C++11/14/17》 -> 本教程正在向全面介绍 C++17 特性的内容过度,尽请期待。 +> 本书正在向全面介绍 C++17 特性的内容过度,尽请期待。 ![](assets/cover-2nd.png) ## 本书目的 -本教程号称高速上手教程,从内容上对二十一世纪二十年代之前产生 C++ 的相关特性做了非常相对全面的介绍,读者可以自行根据下面的目录选取感兴趣的内容进行学习,快速熟悉需要了解的内容。这些特性并不需要全部掌握,只需针对自己的使用需求和特定的应用场景,学习、查阅最适合自己的新特性即可。 +本书号称『高速上手』,从内容上对二十一世纪二十年代之前产生 C++ 的相关特性做了非常相对全面的介绍,读者可以自行根据下面的目录选取感兴趣的内容进行学习,快速熟悉需要了解的内容。这些特性并不需要全部掌握,只需针对自己的使用需求和特定的应用场景,学习、查阅最适合自己的新特性即可。 -同时,本教程在介绍这些特性的过程中,尽可能简单明了的介绍了这些特性产生的历史背景和技术需求,这为理解这些特性、运用这些特性提供了很大的帮助。 +同时,本书在介绍这些特性的过程中,尽可能简单明了的介绍了这些特性产生的历史背景和技术需求,这为理解这些特性、运用这些特性提供了很大的帮助。 -此外,本教程希望读者在阅读本书后,能够努力在新项目中直接使用 C++17,并努力将旧项目逐步迁移到 C++17。也算是笔者为推进现代 C++ 的普及贡献了一些绵薄之力。 +此外,笔者希望读者在阅读本书后,能够努力在新项目中直接使用 C++17,并努力将旧项目逐步迁移到 C++17。也算是笔者为推进现代 C++ 的普及贡献了一些绵薄之力。 ## 目标读者 -1. 本教程假定读者已经熟悉了传统 C++ ,至少在阅读传统 C++ 代码上不具备任何困难。换句话说,那些已经学习过或者长期使用传统 C++进行编码的人、渴望在短时间内迅速了解**现代 C++** 特性的人非常适合阅读本书; -2. 本教程一定程度上介绍了一些现代 C++ 的**黑魔法**,但这些魔法毕竟有限,不适合希望进阶学习现代 C++ 的读者,本教程的定位系**现代 C++ 的快速上手**。当然,希望进阶学习的读者可以使用本书来回顾并检验自己对 **现代 C++** 的熟悉度。 +1. 本书假定读者已经熟悉了传统 C++ ,至少在阅读传统 C++ 代码上不具备任何困难。换句话说,那些长期使用传统 C++进行编码的人、渴望在短时间内迅速了解**现代 C++** 特性的人非常适合阅读本书; +2. 本书一定程度上介绍了一些现代 C++ 的**黑魔法**,但这些魔法毕竟有限,不适合希望进阶学习现代 C++ 的读者,本书的定位系**现代 C++ 的快速上手**。当然,希望进阶学习的读者可以使用本书来回顾并检验自己对 **现代 C++** 的熟悉度。 -## 目录 +## 开始阅读 -从[这里](book/toc.md)开始阅读。 +你可以从[这里](book/toc.md)开始阅读本书。 + +## 相关代码 + +本书每章中都出现了大量的代码,如果你在跟随本书介绍特性的思路编写自己的代码遇到问题时,不妨读一读随书附上的源码,你可以在[这里](code)中找到书中介绍过的全部的源码,所有代码按章节组织,文件夹名称为章节序号。 ## 交流 -1. 笔者时间和水平有限,如果读者发现教程中内容的错误,欢迎提 [issue](https://github.com/changkun/cpp1x-tutorial/issues); -3. 本教程有以下交流群,有兴趣的读者可以加入,加群请注明 `github`: +1. 笔者时间和水平有限,如果读者发现书中内容的错误,欢迎提 [issue](https://github.com/changkun/cpp1x-tutorial/issues); +2. 本书有以下读者交流群,有兴趣的读者可以加入,加群需正确回答加群密码 `github`: ![](assets/qq-group.png) @@ -36,7 +40,7 @@ ## 赞助 -如果你认为本教程对你起到了帮助并希望赞助作者,可以通过下面的二维码给予支持。 +如果你认为本书对你起到了帮助,并希望赞助作者,可以通过下面的二维码给予支持: |微信|支付宝| |:--:|:--:| @@ -46,4 +50,4 @@ 知识共享许可协议 -本教程由[欧长坤](https://github.com/changkun)撰写,采用[知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议](http://creativecommons.org/licenses/by-nc-nd/4.0/)许可。项目中代码使用 MIT 协议开源,参见[许可](./LICENSE)。 +本书系[欧长坤](https://github.com/changkun)著,采用[知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议](http://creativecommons.org/licenses/by-nc-nd/4.0/)许可。项目中代码使用 MIT 协议开源,参见[许可](./LICENSE)。 diff --git a/book/0-preface.md b/book/0-preface.md index c2592e0..53bcf94 100644 --- a/book/0-preface.md +++ b/book/0-preface.md @@ -3,9 +3,9 @@ ## 引言 C++ 是一个用户群体相当大的语言。从 C++98 的出现到 C++11 的正式定稿经历了长达十年多之久的积累。C++14/17 则是作为对 C++11 的重要补充和优化,所有这些新标准中扩充的特性,给 C++ 这门语言注入了新的活力。 -那些还在坚持使用**传统 C++**(本教程把 C++98 及其之前的 C++ 特性均称之为传统 C++)而未接触过 C++11/14/17 的 C++ 程序员在见到诸如 Lambda 表达式这类全新特性时,甚至会流露出『学的不是同一门语言』的惊叹之情。 +那些还在坚持使用**传统 C++**(本书把 C++98 及其之前的 C++ 特性均称之为传统 C++)而未接触过 C++11/14/17 的 C++ 程序员在见到诸如 Lambda 表达式这类全新特性时,甚至会流露出『学的不是同一门语言』的惊叹之情。 -**C++1x** (或**现代 C++**,本教程中均指 C++11/14/17) 为传统 C++ 注入的大量特性使得整个 C++ 变得更加像一门现代化的语言。C++1x 不仅仅增强了 C++ 语言自身的可用性,`auto` 关键字语义的修改使得我们更加有信心来操控极度复杂的模板类型。同时还对语言运行期进行了大量的强化,Lambda 表达式的出现让 C++ 具有了『匿名函数』的『闭包』特性,而这一特性几乎在现代的编程语言(诸如 Python/Swift/... )中已经司空见惯,右值引用的出现解决了 C++ 长期以来被人诟病的临时对象效率问题等等。 +**C++1x** (或**现代 C++**,本书中均指 C++11/14/17) 为传统 C++ 注入的大量特性使得整个 C++ 变得更加像一门现代化的语言。C++1x 不仅仅增强了 C++ 语言自身的可用性,`auto` 关键字语义的修改使得我们更加有信心来操控极度复杂的模板类型。同时还对语言运行期进行了大量的强化,Lambda 表达式的出现让 C++ 具有了『匿名函数』的『闭包』特性,而这一特性几乎在现代的编程语言(诸如 Python/Swift/... )中已经司空见惯,右值引用的出现解决了 C++ 长期以来被人诟病的临时对象效率问题等等。 C++17 则是近三年依赖 C++ 社区一致推进的方向,也指出了**现代C++**编程的一个重要发展方向。尽管它的出现并不如 C++11 的分量之重,但它包含了大量小而美的语言与特性(例如结构化绑定),这些特性的出现再一次修正了我们在 C++ 中的编程范式。 @@ -15,16 +15,20 @@ C++17 则是近三年依赖 C++ 社区一致推进的方向,也指出了**现 ## 目标读者 -1. 本教程假定读者已经熟悉了传统 C++ ,至少在阅读传统 C++ 代码上不具备任何困难。换句话说,那些长期使用传统 C++进行编码的人、渴望在短时间内迅速了解**现代 C++** 特性的人非常适合阅读本书; -2. 本教程一定程度上介绍了一些现代 C++ 的**黑魔法**,但这些魔法毕竟有限,不适合希望进阶学习现代 C++ 的读者,本教程的定位系**现代 C++ 的快速上手**。当然,希望进阶学习的读者可以使用本书来回顾并检验自己对 **现代 C++** 的熟悉度。 +1. 本书假定读者已经熟悉了传统 C++ ,至少在阅读传统 C++ 代码上不具备任何困难。换句话说,那些长期使用传统 C++进行编码的人、渴望在短时间内迅速了解**现代 C++** 特性的人非常适合阅读本书; +2. 本书一定程度上介绍了一些现代 C++ 的**黑魔法**,但这些魔法毕竟有限,不适合希望进阶学习现代 C++ 的读者,本书的定位系**现代 C++ 的快速上手**。当然,希望进阶学习的读者可以使用本书来回顾并检验自己对 **现代 C++** 的熟悉度。 ## 本书目的 -本教程号称高速上手教程,从内容上对二十一世纪二十年代之前产生 C++ 的相关特性做了非常相对全面的介绍,读者可以自行根据下面的目录选取感兴趣的内容进行学习,快速熟悉需要了解的内容。这些特性并不需要全部掌握,只需针对自己的使用需求和特定的应用场景,学习、查阅最适合自己的新特性即可。 +本书号称『高速上手』,从内容上对二十一世纪二十年代之前产生 C++ 的相关特性做了非常相对全面的介绍,读者可以自行根据下面的目录选取感兴趣的内容进行学习,快速熟悉需要了解的内容。这些特性并不需要全部掌握,只需针对自己的使用需求和特定的应用场景,学习、查阅最适合自己的新特性即可。 -同时,本教程在介绍这些特性的过程中,尽可能简单明了的介绍了这些特性产生的历史背景和技术需求,这为理解这些特性、运用这些特性提供了很大的帮助。 +同时,本书在介绍这些特性的过程中,尽可能简单明了的介绍了这些特性产生的历史背景和技术需求,这为理解这些特性、运用这些特性提供了很大的帮助。 -此外,本教程希望读者在阅读本书后,能够努力在新项目中直接使用 C++17,并努力将旧项目逐步迁移到 C++17。也算是笔者为推进现代 C++ 的普及贡献了一些绵薄之力。 +此外,笔者希望读者在阅读本书后,能够努力在新项目中直接使用 C++17,并努力将旧项目逐步迁移到 C++17。也算是笔者为推进现代 C++ 的普及贡献了一些绵薄之力。 + +## 相关代码 + +本书每章中都出现了大量的代码,如果你在跟随本书介绍特性的思路编写自己的代码遇到问题时,不妨读一读随书附上的源码,你可以在[这里](../code)中找到书中介绍过的全部的源码,所有代码按章节组织,文件夹名称为章节序号。 [返回目录](./toc.md) | 上一章 | [下一章](./1-intro.md) @@ -32,4 +36,4 @@ C++17 则是近三年依赖 C++ 社区一致推进的方向,也指出了**现 知识共享许可协议 -本教程由[欧长坤](https://github.com/changkun)撰写,采用[知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议](http://creativecommons.org/licenses/by-nc-nd/4.0/)许可。项目中代码使用 MIT 协议开源,参见[许可](../LICENSE)。 \ No newline at end of file +本书由[欧长坤](https://github.com/changkun)撰写,采用[知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议](http://creativecommons.org/licenses/by-nc-nd/4.0/)许可。项目中代码使用 MIT 协议开源,参见[许可](../LICENSE)。 \ No newline at end of file diff --git a/book/toc.md b/book/toc.md index d231fcc..203ab0f 100644 --- a/book/toc.md +++ b/book/toc.md @@ -4,7 +4,7 @@ ## 目录 -- [序言](./0-preface.md) +- [**序言**](./0-preface.md) - [**第 1 章 迈向 C++11/14/17**](./1-intro.md) + 1.1 被弃用的特性 + 1.2 与 C 的兼容性 diff --git a/code/1/1.1 b/code/1/1.1 deleted file mode 100755 index 01ef1334a7a2ec00c1560dae294632adef24191d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15596 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 diff --git a/code/1/1.1.cpp b/code/1/1.1.cpp index e4956d7..9a6690f 100644 --- a/code/1/1.1.cpp +++ b/code/1/1.1.cpp @@ -12,6 +12,7 @@ #include int main() { + // 使用 lambda 表达式 [out = std::ref(std::cout << "Result from C code: " << add(1, 2))](){ out.get() << ".\n"; }(); diff --git a/code/1/foo.c b/code/1/foo.c index f1fab42..f16fca9 100644 --- a/code/1/foo.c +++ b/code/1/foo.c @@ -9,6 +9,7 @@ #include "foo.h" +// C 语言代码 int add(int x, int y) { return x+y; }