c 11語言新特性

2021-09-25 13:12:40 字數 1689 閱讀 5334

模板的閉符之間不需要空格:vector> 等同於 vector>

nullptr取代0或者null

以auto完成型別自動推導

一致性初始化與初值列;使用大括號進行初始化動作,如: int values  vectorv;初值列如:int j{}--j is initialized by 0; int*p{}--q is initialized by nullptr;

range-based for ; 如 for(auto i: list/range/array/collection)

move/rvalue reference

用以避免非必要拷貝(copy)和臨時物件(temporary)

std::move() 意味著「呼叫move()語義(若有提供的話),否則呼叫copy語義」

c++標準庫的class保證了,在一次move之後,物件處於有效但不確定的狀態。也就是說,你可以在move之後對它賦予新值,但當前值是不確定的。stl容器則保證了,被搬移內容者,搬移後其值為空

新式的字串字面常量。raw string literal--r"\\\n"; 編碼的(encoded)string literal--u8"lsdkf" u「dd」 u"kk" l"hello"

noexcept--給編譯器更大的優化空間。然而,並不是加上noexcept就能提高效率,步子邁大了也容易扯著蛋。防止異常擴散

用來指明莫哥函式無法或不打算丟擲異常

constexpr--讓表示式核定於編譯期

constexpr int square(int x)

float a[square(9)]; // ok since c++11 : a has 81 elements

------------

std::numeric_limits::max() == int_max

嶄新的template特性

可以接受個數不定之template實參--variadic template;

void print()

templatevoid print(const t& first,const types&... args)

decltype--可以讓編譯器找出表示式型別

其實就是常被要求的typeof的特性表現。只不過原有的typeof缺乏一致性又不安全,c++11才引入這麼乙個關鍵字

用途 宣告返回值型別

templatedecltype(x+y) add(t1 x,t2 y)

---------------

templateauto add(t1 x,t2 y)->decltype(x+y)

在metaprogramming(元程式設計)或用來傳遞乙個lambda型別

class person

auto hash = (const person& p)

auto eq = (const person& p1,const person& p2)

unordered_setpset(10,hash,eq);

新的函式宣告語法

templatedecltype(x+y) add(t1 x,t2 y);

templateauto add(t1 x,t2 y) -> decltype(x+y);

C 11新特性學習

lambda表示式用於建立匿名的函式物件,語法為 函式可訪問的的外部變數 函式引數 返回值型別 如 int a 1,b 2 int c b int x int b 表示函式中可以訪問外部變數b,而且引數b是按值傳遞,b 表示引數b是按引用傳遞,表示可以訪問所有外部變數,並且是用按值傳遞方式,類似,也...

C 11 新特性試用

在c 11之前,auto關鍵字用來指定儲存期。在新標準中,它的功能變為型別推斷。auto現在成了乙個型別的佔位符,通知編譯器去根據初始化 推斷所宣告變數的真實型別。各種作用域內宣告變數都可以用到它。例如,名空間中,程式塊中,或是for迴圈的初始化語句中。auto i 42 i is an int a...

C 11 新特性總結

vs2012以上版本支援 一.auto的使用 auto func less 自動表示函式指標 auto ite vector a.begin 自動表示stl的迭代器 auto p new foo 自動表示變數指標等變數 二.decltype int x 3 decltype x y x 從變數或表示...