最近在編寫單元測試的時候,我需要一個將浮點數「四捨六入五成雙」的函式。一開始我想:這很容易:只要把整數部分和小數 …
Category | 2020
-
-
C++ 17 對例外處理規格的改動
今天我想要介紹 C++ 17 對「例外處理規格(Exception Specification)」的二個改動:
- 移除
throw (ClassName)
- 將
noexcept
納入型別系統(Type System)
移除 throw (ClassName) 例外處理規格
在 C++ 98 …
- 移除
-
C++ 17 fallthrough、nodiscard、maybe_unused 屬性
C++ 17 新增三個標準屬性(Attribute):
- [[fallthrough]] 用以標記接續執行下一個 switch case 的意圖。
- [[nodiscard]] 用以提醒函式呼叫者檢查回傳值。
- [[maybe_unused]] 用以標記可能 …
-
C++ 17 template <auto> 非型別樣版參數型別推導
在 C++ 17 標準下,我們能以
auto
關鍵字宣告非型別樣版參數(Non-Type Template Argument)。編譯器會以「樣版的實際參數」推導「樣版參數」的型別:template <auto Arg …
-
C++ 17 __has_include 前置處理表達式
__has_include
是 C++ 17 加進前置處理器(Preprocessor)的新功能。我們能以__has_include
表達式偵測某個標頭檔(Header File)是否存在。如果前置處理器能找到指定的 … -
C++ 17 Inline Variable
Inline Variable(內嵌變數)是 C++ 17 新增的功能。Inline Variable 與 Inline Function(內嵌函式)相似,能讓我們在多個 Translation Unit(編譯單元)定義同樣的變數[1]。鏈結器(Linker …
-
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 …