mirror of
https://github.com/changkun/modern-cpp-tutorial.git
synced 2025-12-17 04:34:40 +03:00
see #12: translation of preface and chapter 01
This commit is contained in:
@@ -8,19 +8,19 @@ order: 1
|
||||
|
||||
[TOC]
|
||||
|
||||
**编译环境**:本书将使用 `clang++` 作为唯一使用的编译器,同时总是在代码中使用 `-std=c++17` 编译标志。
|
||||
**编译环境**:本书将使用 `clang++` 作为唯一使用的编译器,同时总是在代码中使用 `-std=c++2a` 编译标志。
|
||||
|
||||
```bash
|
||||
→ clang++ -v
|
||||
Apple LLVM version 9.1.0 (clang-902.0.39.1)
|
||||
Target: x86_64-apple-darwin17.5.0
|
||||
$ clang++ -v
|
||||
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
|
||||
Target: x86_64-apple-darwin18.6.0
|
||||
Thread model: posix
|
||||
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
|
||||
```
|
||||
|
||||
## 1.1 被弃用的特性
|
||||
|
||||
在学习 C++1x 之前,我们先了解一下从 C++11 开始,被弃用的主要特性:
|
||||
在学习现代 C++ 之前,我们先了解一下从 C++11 开始,被弃用的主要特性:
|
||||
|
||||
> **注意**:弃用并非彻底不能用,只是用于暗示程序员这些特性将从未来的标准中消失,应该尽量避免使用。但是,已弃用的特性依然是标准库的一部分,并且出于兼容性的考虑,大部分特性其实会『永久』保留。
|
||||
|
||||
@@ -49,7 +49,7 @@ InstalledDir: /Library/Developer/CommandLineTools/usr/bin
|
||||
|
||||
## 1.2 与 C 的兼容性
|
||||
|
||||
出于一些不可抗力、历史原因,我们不得不在 C++ 中使用一些 C 语言代码(甚至古老的 C 语言代码),例如 Linux 系统调用。在 C++1x 出现之前,大部分人当谈及『C 与 C++ 的区别是什么』时,普遍除了回答面向对象的类特性、泛型编程的模板特性外,就没有其他的看法了,甚至直接回答『差不多』,也是大有人在。图 1.2 中的韦恩图大致上回答了 C 和 C++ 相关的兼容情况。
|
||||
出于一些不可抗力、历史原因,我们不得不在 C++ 中使用一些 C 语言代码(甚至古老的 C 语言代码),例如 Linux 系统调用。在现代 C++ 出现之前,大部分人当谈及『C 与 C++ 的区别是什么』时,普遍除了回答面向对象的类特性、泛型编程的模板特性外,就没有其他的看法了,甚至直接回答『差不多』,也是大有人在。图 1.2 中的韦恩图大致上回答了 C 和 C++ 相关的兼容情况。
|
||||
|
||||

|
||||
|
||||
@@ -91,10 +91,10 @@ int main() {
|
||||
gcc -c foo.c
|
||||
```
|
||||
|
||||
编译出 foo.o 文件,再使用 `clang++` 将 C++代码和 `.o` 文件链接起来(或者都编译为 `.o` 再统一链接):
|
||||
编译出 `foo.o` 文件,再使用 `clang++` 将 C++代码和 `.o` 文件链接起来(或者都编译为 `.o` 再统一链接):
|
||||
|
||||
```bash
|
||||
clang++ 1.1.cpp foo.o -std=c++17 -o 1.1
|
||||
clang++ 1.1.cpp foo.o -std=c++2a -o 1.1
|
||||
```
|
||||
|
||||
当然,你可以使用 `Makefile` 来编译上面的代码:
|
||||
@@ -109,7 +109,7 @@ OBJECTS_C = foo.o
|
||||
SOURCE_CXX = 1.1.cpp
|
||||
|
||||
TARGET = 1.1
|
||||
LDFLAGS_COMMON = -std=c++17
|
||||
LDFLAGS_COMMON = -std=c++2a
|
||||
|
||||
all:
|
||||
$(C) -c $(SOURCE_C)
|
||||
@@ -118,9 +118,9 @@ clean:
|
||||
rm -rf *.o $(TARGET)
|
||||
```
|
||||
|
||||
> 注意:Makefile 中的缩进是制表符而不是空格符,如果你直接复制这段代码到你的编辑器中,制表符可能会被自动替换掉,请自行确保在 Makefile 中的缩进是由制表符完成的。
|
||||
> 注意:`Makefile` 中的缩进是制表符而不是空格符,如果你直接复制这段代码到你的编辑器中,制表符可能会被自动替换掉,请自行确保在 `Makefile` 中的缩进是由制表符完成的。
|
||||
>
|
||||
> 如果你还不知道 Makefile 的使用也没有关系,本教程中不会构建过于复杂的代码,简单的在命令行中使用 `clang++ -std=c++17` 也可以阅读本书。
|
||||
> 如果你还不知道 Makefile 的使用也没有关系,本教程中不会构建过于复杂的代码,简单的在命令行中使用 `clang++ -std=c++2a` 也可以阅读本书。
|
||||
|
||||
如果你是首次接触现代 C++,那么你很可能还看不懂上面的那一小段代码,即:
|
||||
|
||||
@@ -136,10 +136,10 @@ clean:
|
||||
|
||||
## 进一步阅读的参考文献
|
||||
|
||||
1. [C++ 语言导学. Bjarne Stroustrup](https://www.amazon.cn/dp/B00WUBYBYS/ref=sr_1_1?ie=UTF8&qid=1522400738&sr=8-1&keywords=C%2B%2B+%E8%AF%AD%E8%A8%80%E5%AF%BC%E5%AD%A6)
|
||||
2. [C++ 历史](http://en.cppreference.com/w/cpp/language/history)
|
||||
3. [C++ 1x 特性在 GCC/Clang 等编译器中的支持情况](http://en.cppreference.com/w/cpp/compiler_support)
|
||||
4. [C++98 与 C99 之间的区别](http://david.tribble.com/text/cdiffs.htm#C99-vs-CPP98)
|
||||
- [C++ 语言导学. Bjarne Stroustrup](https://www.amazon.cn/dp/B00WUBYBYS/ref=sr_1_1?ie=UTF8&qid=1522400738&sr=8-1&keywords=C%2B%2B+%E8%AF%AD%E8%A8%80%E5%AF%BC%E5%AD%A6)
|
||||
- [C++ 历史](http://en.cppreference.com/w/cpp/language/history)
|
||||
- [C++ 特性在 GCC/Clang 等编译器中的支持情况](http://en.cppreference.com/w/cpp/compiler_support)
|
||||
- [C++98 与 C99 之间的区别](http://david.tribble.com/text/cdiffs.htm#C99-vs-CPP98)
|
||||
|
||||
## 许可
|
||||
|
||||
|
||||
Reference in New Issue
Block a user