template
sum(t1 & t1,t2 &t2)
doubel foo();
float * bar();
const
auto a = foo();//const double
volatile
auto &b = bar();//volatile float *
auto d = a;//double
auto &e = a;//const double &
int i;
decltype(i) a;//int a
decltype((i)) b;// 編譯失敗
編譯器在進行型別推導是很複雜的,對於decltype(e),按照以下四個順序判斷
1. 如果e是沒有括號的標記表示式(id-expression)或類成員訪問表示式,那麼decltype(e)就是e命名的實體型別。
2. 否則,假設e型別是t,如果e是乙個將亡值(xvalue),則decltype(e)是t&&
3. 否則,假設e型別是t,如果e是乙個左值(lvalue),則decltype(e)是t&
4. 否則,假設e型別是t,則decltype(e)是t。
int i=4;
int arr[5]=;
int*ptr=arr;
struct ss;
void overloaded(int);
void overloaded(char);//過載的函式
int&&rvalref();
const
bool func(int);
//規則1:單個標記符表示式以及訪問類成員,推導為本型別
decltype(arr)var1;//int[5],標記符表示式
decltype(ptr)var2;//int*,標記符表示式
decltype(s.d)var4;//double,成員訪問表示式
decltype(overloaded)var5;//無法通過編譯,是個過載的函式
//規則2:將亡值,推導為型別的右值引用
decltype(rvalref())var6=1;//int&&
//規則3:左值,推導為型別的引用
decltype(true?i:i)var7=i;//int&,三元運算子,這裡返回乙個i的左值
decltype((i))var8=i;//int&,帶圓括號的左值
decltype(++i)var9=i;//int&,++i返回i的左值
decltype(arr[3])var10=i;//int&操作返回左值
decltype(*ptr)var11=i;//int&*操作返回左值
decltype("lval")var12="lval";//const char(&)[9],字串字面常量為左值
//規則4:以上都不是,推導為本型別
decltype(1)var13;//int,除字串外字面常量為右值
decltype(i++)var14;//int,i++返回右值
decltype((func(1)))var15;//const bool,圓括號可以忽略
//編譯選項:g++ -std=c++11-c 4-3-10.cpp
#include <type_traits>
#include <iostream>
using
namespace
std;
int i=1;
int&j=i;
int*p=&i;
const
int k=1;
int main()
//編譯選項:g++ -std=c++11 4-3-13.cpp
template
decltype(t1+t2) sum(t1 t1,t2 t2)
這種寫法有問題,編譯器在推導decltype(t1+t2)時,表示式t1和t2都沒有宣告(編譯器只會從左往右讀符號),c++編譯器規則變數使用前必須宣告,因此c++11引入新語法,追蹤返回型別,來宣告這類函式。
template
auto sum(t1 t1,t2 t2)->decltype(t1+t2)
對於stl裡的有明確範圍的集合,可以使用for加冒號直接遍歷迴圈
vector
v = ;
for(auto i:v)
C 11特性 《深入理解C 11 讀書筆記
新增關鍵字 struct alignas 32 colorvector 沒有alignas關鍵字的話,對齊到8位,加上的話,對齊到32位,能提公升效率。對齊的資料在讀寫上會有效能上的優勢。比如頻繁使用的資料如果與處理器的快取記憶體器大小對齊,有可能提高快取的效能。而資料不對齊可能造成一些不良的後果,...
《深入理解C 11 新特性解析與應用》 讀書筆記
第六章 在 c 11中,nullptr 是乙個所謂的 指標空值型別 的常量,指標空值型別被命名為nullptr t。nullptr 是有型別的,且可以被隱式地轉化為指標型別。第二章異常機制會帶來一些額外開銷,比如函式丟擲異常,會導致函式棧被依次地展開,並依幀呼叫在本幀中已構造的自動變數的析構函式等。...
讀書筆記 深入理解Python特性(四)
目錄 1.例項方法 類方法和靜態方法 2.字典 也稱為對映 雜湊表 查詢表 關聯陣列 3.陣列資料結構 4.記錄 結構體和純資料物件 import collections collections.ordereddict one 1,two 2,three 3 import collections d...