Inline Variable(內嵌變數)是 C++ 17 新增的功能。Inline Variable 與 Inline Function(內嵌函式)相似,能讓我們在多個 Translation Unit(編譯單元)定義同樣的變數[1]。鏈結器(Linker …
Author | Logan
-
-
C++ 17 constexpr 與 Lambda 表達式
C++ 17 將 Lambda Expression 納入常數表達式(
constexpr
)的範疇,所以我們也能在只接受編譯期常數的地方呼叫 Lambda Expression 定義的 Lambda Function:void test() { auto f = [](int a, int …
-
C++ 17 在 Lambda Expression 捕捉 *this
如果一個成員函式(Member Function)有 Lambda Expression 而且該 Lambda Expression 有指定預設補捉模式(不論是傳值或傳參考)。當 Lambda Expression 內有程式碼指稱「成員函式 …
-
C++ 17 if constexpr 述句
C++ 17 新增的 if constexpr 述句能讓我們用更簡潔的方式編寫樣版特化(Template Specialization)。本文會介紹它的語法與應用。
語法
if constexpr 述句的語法與 …
-
C++ 17 類別樣版參數推導
今天我想要介紹 C++ 17 的類別樣版參數推導(Class Template Argument Deduction)。在 C++ 17 之前,樣版參數推導(Template Argument Deduction)只會被施行於「函式樣版(Function Template)」。以
std …
-
C++ 17 折疊表達式
C++ 11 引入了 Variadic Template,讓我們得以宣告任意個數的樣版參數。C++ 標準函式庫的
std::make_tuple
就是一個典型的例子:#include <tuple> int main() { auto a = std::make …
-
C++ 17 選擇述句與初始化述句
C++ 98 程式語言標準將 if、switch、while 與 for 述句的文法依序定義為:
if (condition) statementif (condition) statement else statementswitch (condition) statementwhile (condition) statementfor (for-init-statement conditionopt; expression) statement其中,我們能在 …
-
C++ 17: 以 std::scoped_lock 避免 Dead Lock
最佳化多執行緒程式時,為了減少非必要阻塞(Blocking),常見作法是將一個 Mutex 依照保護對象拆分為多個 Mutex。如此一來,一個執行緒 …
-
C++ 17 結構化綁定
今天我想要介紹 C++ 17 新增的 Structured Binding(結構化綁定)。以
std::pair
為例,Structured Binding 能讓我們能直接將std::pair
的內容綁定到我們指定的識別字 … -
漫談 C/C++ 巨集展開規則
最近工作上遇到一個和 C/C++ 巨集有關的問題。我想要使用巨集將原本呼叫
bcopy
的程式碼導向另一個實作__bionic_bcopy
。所以我寫出 …