深入理解C 11 讀書筆記 四 易於編碼的特性

2021-08-21 10:27:57 字數 2294 閱讀 6293

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...