C 11 14介紹(八) 其他雜項

2021-09-26 01:23:06 字數 1670 閱讀 5179

long long int 並不是 c++11 最先引入的,其實早在 c99,long long int 就已經被納入 c 標準中,所以大部分的編譯器早已支援。c++11 的工作則是正式把它納入標準庫,規定了乙個 long long int 型別至少具備 64 位的位元數。

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() noexcept? false

no_throw() noexcept? true

lmay_throw() noexcept? false

lno_throw() noexcept? true

捕獲異常, 來自 my_throw()

捕獲異常, 來自 non_block_throw()

原始字串字面量

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

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()

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

C 11 14介紹(四) 新增容器(一)

std array會在編譯時建立乙個固定大小的陣列,std array不能夠被隱式的轉換成指標,使用std array很簡單,只需指定其型別和大小即可 std arrayarr int len 4 std arrayarr 非法,陣列大小引數必須是常量表示式將其相容c風格的介面 void foo i...

C 11 14介紹(四) 新增容器(三)

傳統c 中的容器,除了std pair外,沒有現成的資料結構能用來存放不同型別的資料,但是std pair的缺陷是只能儲存 兩個元素。元組的使用有三個核心的函式 在c 14下執行 include include auto get student int id int main std get除了使用...

19 介紹C 所有的建構函式

預設建構函式 一般建構函式 拷貝建構函式 預設建構函式 無引數 如果建立乙個類你沒有寫任何建構函式,則系統會自動生成預設的建構函式,或者寫了乙個不帶任何形參的建構函式 一般建構函式 一般建構函式可以有各種引數形式,乙個類可以有多個一般建構函式,前提是引數的個數或者型別不同 基於c 的過載函式原理 拷...