這一講是課前必讀,主要說明術語發音和環境要求的問題,希望能幫助你更好地學習和實踐本專欄的內容。
### 術語發音列表
C++ 里有些術語不是標準的英文單詞。在本專欄中使用下面的發音表:

注意這些發音并沒有標準化,列出來只是為了避免發生誤解。你不一定必須按照我的讀法來。
### 環境要求
在專欄中,我大部分時間都會使用不超過 C++17 標準的語言特性。而要編譯示例代碼,需要以下所列的至少一種編譯器:
* GCC 7 或更新版本
* Clang 5 或更新版本
* Visual Studio 2017 15.9 (MSVC 19.16) 或更新版本
以上三種編譯器應當都能夠工作——但我無法保證。如果遇到問題的話,請升級到跟我的 測試環境相同的版本:
* GCC 8.3
* Clang 9.0
* Visual Studio 2019 16.3 (MSVC 19.23)
如果你對跨平臺性不那么講究的話,推薦使用你的操作系統里最常用的編譯器。也就是:
* 用 Windows 的話,使用 MSVC
* 用 Linux 的話,使用 GCC
* 用 macOS 的話,使用 Clang(但如果操作系統比 Mojave 老的話,蘋果提供的開發工具不能完整支持 C++17;你需要升級操作系統,或者使用非蘋果的編譯器——如Homebrew 提供的 gcc 和 llvm [1])
對在 Windows 上使用 GCC 的開發者,我要特別提醒一句:要獲得最全面的功能,你應當使用 MinGW-w64 的 POSIX 線程版本,這樣才能完整使用 C++ 標準里的功能。當前版本可從參考資料 [2] 的鏈接下載。
使用穩定發布版(如 CentOS)的 Linux 用戶也需要檢查一下,你的 GCC 版本有可能比較老。如果早于 GCC 7 的話,建議你安裝一個新版本的 GCC(不需要覆蓋系統的 GCC)。比如,對于 CentOS 7,系統安裝的 GCC 版本是 4.8,太老,你可以通過安裝 centosrelease-scl 和 devtoolset-7-gcc-c++ 兩個包來獲得 GCC 7;隨后,可以使用命令 sclenable devtoolset-7 bash 或 . /opt/rh/devtoolset-7/enable 來啟用 GCC7。
稍需注意的是,最后在講到 C++20 新特性時,某些實驗功能可能會要求某個特定的編譯器。這種情況下,你可能就需要安裝、使用非默認的編譯器了。不過,只有少數幾講需要這么做,不用擔心。
由于專欄涉及到的都是較短的代碼,我不會提供工程文件。建議你熟悉編譯器的命令行,來快速編譯代碼。使用 GCC 的話,推薦使用下面的命令行:
```
g++ -std=c++17 -W -Wall -Wfatal-errors 文件名
```
Clang 的話也比較類似:
```
clang++ -std=c++17 -W -Wall -Wfatal-errors 文件名
```
MSVC 的命令行風格有點不同,一般需要下面這樣子:
```
cl /std:c++17 /EHsc /W3 文件名
```
另外,即使不用較新的 C++ 特性,你也一定要用比較新的編譯器。單單是輸出錯誤信息的友好程度,老版本和新版本就是沒法比的。
以 GCC 為例,老版本輸出錯誤信息是單色的,在碰到有模板的代碼時,錯誤信息動輒幾百行,以致那時有人專門開發了軟件來讓錯誤信息更可讀 [3]。幸運的是,我們今天不再需要這類軟件了,編譯器的輸出比之前友好得多,GCC 和 Clang 還會使用顏色來展示問題的重點。下面這張圖,就是 GCC 9.2 的輸出。

明確好以上內容,我們就要正式開始了,你準備好了嗎?
### 參考資料
[1] Homebrew. https://brew.sh/
[2] MinGW-w64 GCC-8.1.0. https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/8.1.0/threads-posix/dwarf/
[3] Leor Zolman, “STLFilt: An STL error message decryptor for C++”. https://www.bdsoft.com/tools/stlfilt.html