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 的過載函式原理 拷...