C++14 到 C++17 的變化


這篇是參考《Changes between C++14 and C++17 DIS》,他主要是在描述 C++14 到 C++17 的變化;雖然由於 C++17 其實還是草案,所以很多東西都還有變數。不過由於他這邊整理的滿清楚的,所以這邊就稍微紀錄一下。

這篇文章,基本上把 C++14 到 C++17 的變化,整理出幾個部分:

  1. Removed or deprecated features(移除與已棄用的功能)
  2. New core language features with global / local applicability (新的核心語言功能)
  3. New library features(新的函式庫功能)
  4. Modifications to existing features(現有功能的修改)
  5. 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_viewanyvariantoptional 這些在某些情況下,算是滿實用的類別,如果有需要的話,應該也是很實用的。


這邊大概就這樣了。

當然,C++17 裡面還有很多東西,有興趣就建議直接去看原文吧~

對「C++14 到 C++17 的變化」的想法

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料