noexcept 字面量 記憶體對齊

2022-09-22 02:27:11 字數 2391 閱讀 7984

c++ 相比於 c 的一大優勢就在於 c++ 本身就定義了一套完整的異常處理機制。 然而在 c++11 之前,幾乎沒有人去使用在函式名後書寫異常宣告表示式, 從 c++11 開始,這套機制被棄用,所以我們不去討論也不去介紹以前這套機制是如何工作如何使用, 你更不應該主動去了解它。

c++11 將異常的宣告簡化為以下兩種情況:

函式可能丟擲任何異常

函式不能丟擲任何異常

並使用noexcept對這兩種行為進行限制,例如:

void may_throw(); // 可能丟擲異常

void no_throw() noexcept; // 不可能丟擲異常

使用noexcept修飾過的函式如果丟擲異常,編譯器會使用std::terminate()來立即終止程式執行。

noexcept還能夠做操作符,用於操作乙個表示式,當表示式無異常時,返回true,否則返回false

#include void may_throw() 

auto non_block_throw = ;

void no_throw() noexcept

auto block_throw = () noexcept ;

int main()

noexcept修飾完乙個函式之後能夠起到封鎖異常擴散的功效,如果內部產生異常,外部也不會觸發。例如:

try  catch (...) 

try catch (...)

try catch (...)

最終輸出為:

捕獲異常, 來自 may_throw()

捕獲異常, 來自 non_block_throw()

傳統 c++ 裡面要編寫乙個充滿特殊字元的字串其實是非常痛苦的一件事情, 比如乙個包含 html 本體的字串需要新增大量的轉義符, 例如乙個windows 上的檔案路徑經常會:c:\\file\\to\\path

c++11 提供了原始字串字面量的寫法,可以在乙個字串前方使用r來修飾這個字串, 同時,將原始字串使用括號包裹,例如:

#include #include int main()
c++11 引進了自定義字面量的能力,通過過載雙引號字尾運算子實現:

// 字串字面量自定義必須設定如下的引數列表

std::string operator"" _wow1(const char *wow1, size_t len)

std::string operator"" _wow2 (unsigned long long i)

int main()

自定義字面量支援四種字面量:

整型字面量:過載時必須使用unsigned long longconst char *、模板字面量算符引數,在上面的**中使用的是前者;

浮點型字面量:過載時必須使用long doubleconst char *、模板字面量算符;

字串字面量:必須使用(const char *, size_t)形式的參數列;

字元字面量:引數只能是char,wchar_t,char16_t,char32_t這幾種型別。

c++ 11 引入了兩個新的關鍵字alignofalignas來支援對記憶體對齊進行控制。alignof關鍵字能夠獲得乙個與平台相關的std::size_t型別的值,用於查詢該平台的對齊方式。 當然我們有時候並不滿足於此,甚至希望自定定義結構的對齊方式,同樣,c++ 11 還引入了alignas來重新修飾某個結構的對齊方式。我們來看兩個例子:

#include #include struct storage ;

struct alignas(std::max_align_t) alignasstorage ;

int main()

其中std::max_align_t要求每個標量型別的對齊方式嚴格一樣,因此它幾乎是最大標量沒有差異, 進而大部分平台上得到的結果為long double,因此我們這裡得到的alignasstorage的對齊要求是 8 或 16。

字面量和整數字面量

字面量是指c c 源 中直接使用的常量,字面量的意思是 一眼看上去是什麼就是什麼 例如語句 int x 10 中10就是字面量,它相對於變數,只有乙個確定的值不能改變,這個值就是它看上去的值。c c 中的字面量有一下幾種 1.0和正整數,如10 123等 負整數不是字面量,因為加了 運算子 2.浮點...

Go字面量(字面常量)

目錄 字面量字面量型別 整型字面量 浮點型字面量 複數型別字面量 字元型字面量 字串字面量 程式語言源程式中表示固定值的符號叫做字面量,也稱字面常量。一般使用裸字串行來表示不同型別的值。字面量可以被程式語言編譯器直接轉換為某個型別的值。go的字面量可以出現在兩個地方 一是用於常量和變數的初始化,二是...

資料表示字面量整型字面量

編寫程式,首先面對的是資料。在程式中,資料該如何表示出來?根據表示的方式不同,資料通常有兩種表示方式 直觀表示和指代表示。本章將詳細講解這兩種表示方式本文選自明明白白學c 大學霸。在 編寫中,資料往往是可以直接寫到 中的。對於這些資料,人們可以通過字面所表達的意思,獲知其含義,所以它們也被稱為字面量...