這篇是參考《Changes between C++14 and C++17 DIS》,他主要是在描述 C++14 到 C++17 的變化;雖然由於 C++17 其實還是草案,所以很多東西都還有變數。不過由於他這邊整理的滿清楚的,所以這邊就稍微紀錄一下。
這篇文章,基本上把 C++14 到 C++17 的變化,整理出幾個部分:
- Removed or deprecated features(移除與已棄用的功能)
- New core language features with global / local applicability (新的核心語言功能)
- New library features(新的函式庫功能)
- Modifications to existing features(現有功能的修改)
- Miscellaneous(雜項)
而 Heresy 這邊,則是把自己覺得比較有趣、有用的東西整理、紀錄一下。
Lambda expression 和 ths
C++11 加入的 lambda expression 在 Heresy 來看,是個很實用的功能,Heresy 目前也常常會用到它;在 C++14 中,讓 lambda expression 可以使用 auto 來做自動的型別判斷,更是增加了他使用的彈性(參考)。
而在 C++17 中,則是讓 lambda expression 捕捉 *this 時,更為簡單;在 C++14 如果希望在 class 裡面撰寫 lambda expression、並使用該類別的成員的話,需要寫成:
[self = *this]{ self.f(); }
而在 C++17 則可以簡單寫成:
[*this]{ f(); }
這樣一來,撰寫的便利性又更高了不少~
Filesystem 正式引進
Filesystem 的用處主要是幫助開發者處理檔案的路徑、並做系統檔案管理之用的函式庫,Heresy 從他還在 Boost 中的時候就在用了,有興趣的話可以參考《C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem》。
而在 C++17,似乎終於打算把這套函式庫正式加入標準函式庫了~所以如果以後要用 C++ 來處理檔案、目錄的話,就有一個標準的方案了~
平行化函式庫:Parallelism
在 C++ 撰寫需要大量計算的程式的時候,如果想要善用多核心處理器、想要平行化處理的話,以往大多是得使用其他標準(例如 OpenMP)、或是其他函式庫(例如 Intel Threading Building Blocks)來做輔助。
而在 C++17,則是引進了 Parallelism 這個函式庫,提供了一些演算法、以及函式,可以以 STL 的形式、快速地寫出平行化的程式。
以排序來說,只要寫:
vector<int> v = ... sort(par, v.begin(), v.end());
就可以平行地進行排序了~
這樣一來,對於要撰寫大量計算的程式的開發者來說,也會是相當方便的一件事。
不過,如果能把 GPGPU 也加進來,應該會更好吧~ :p
這部分可以參考《Visual C++ 2013 的 STL 平行化函示庫》。
shared_ptr 支援陣列
以往在如果要使用 shared_ptr 這個 smart pointer 來搭配傳統的陣列的話,基本上必須要自己指定釋放資源的方法(deleter),才可以正確地釋放資源。
下面就是 C++17 前的寫法:
std::shared_ptr<char> p(new char[N], std::default_delete<char[]>());
而 C++17 中,則是將它改成可以正確地對應陣列,所以不用再寫 deleter 了~
std::shared_ptr<char[]> p(new char[N]);
基本上,也是一個提昇便利性的改變了。
幾個新的類別
C++17 也加入了如 string_view、any、variant、optional 這些在某些情況下,算是滿實用的類別,如果有需要的話,應該也是很實用的。
這邊大概就這樣了。
當然,C++17 裡面還有很多東西,有興趣就建議直接去看原文吧~
[…] C++17 […]
讚讚
[…] lambda 處理器應該是有支援到 C++17 的標準,所以 C++14 的 generic lambda […]
讚讚
[…] bug,而是在 C++17 以前,C++ 並沒有針對一行程式(一個 […]
讚讚
[…] 的一些數值函式庫》,繼續來整理 C++17、C++20 […]
讚讚
[…] C++14 / C++17,也又針對 lambda 加入了一些新的功能、讓他更為強大。不管是 captures with an […]
讚讚
[…] 在繼 C++17 之後,下一個新的標準 C++20 終於定案了!Heresy 看到的主要是《2020-02 Prague […]
讚讚
[…] C++11 引進後,其實在後面的 C++14 和 C++17 中,也都有針對 lambda […]
讚讚
[…] C++17 裡面,又有另一個標準的選擇了!那就是 […]
讚讚
[…] 在某些狀況下,optional 算是一個很實用的容器,而實際上,在 C++17 也已經把他引入標準函式庫內了(參考)。 […]
讚讚
[…] 是 C++17 中,一個新加入標準函式庫的 template 容器;他的概念基本上是和 […]
讚讚