摘自:深入應用c++11:**優化與工程級應用
auto並不能代表乙個實際的型別宣告,只是乙個型別宣告的「佔位符」。
使用auto宣告的變數必須馬上初始化,以讓編譯器推斷出它的實際型別,並在編譯時將auto佔位符替換為真正的型別。
當不宣告為指標或引用時,auto的推導結果和初始化表示式拋棄引用和cv限定符型別一致。
當宣告為指標或引用時,auto的推導結果將保持初始化表示式的cv屬性。(取決於其指向的型別)。
【cv限定符】是const和volatile限定符的統稱。
auto不能用於函式引數(gcc上可以作為函式引數)。
auto不能用於非靜態成員變數,可以用於帶const屬性的靜態成員變數。iso c++禁止在類內初始化non-const static成員。
不能定義auto型別的陣列,除非使用列表初始化該陣列。
auto不能推導出模板的引數。
型別宣告過於冗長時簡化**。
decltype通過表示式得到型別,可以保留住表示式的引用及const限定符。
exp是識別符號、類訪問表示式,decltype(exp)和exp的型別一致。
exp是函式呼叫,decltype(exp)的返回值的型別一致。
若exp是乙個左值,則decltype(exp)是exp型別的左值引用,否則和exp型別一致。
在c++11中所有的值必屬於左值、右值兩者之一,右值又可以細分為純右值、將亡值。
在c++11中可以取位址的、有名字的就是左值,反之,不能取位址的、沒有名字的就是右值(將亡值或純右值)。
左值引用就是對乙個左值進行引用的型別。
decltype多用於泛型程式設計中。如:
vector
vectornum;decltype(vectornum.begin()) it=vectornum.begin();
decltype用於抽取變數表示式的型別。
decltype可以用於定義型別。如:
typedef
decltype(nullptr) nullptr_t;
返回值型別後置語法,是為了解決函式返回值型別依賴於引數而導致難以確定返回值型別的問題。
例如:
template
auto add(t t,u u) -> decltype (t+u)
c primer讀書筆記 4 11 型別轉換
c 不會直接將兩個不同型別的值進行運算,而是先根據型別轉換規則設法將運算物件的型別同一後再求值,上述的型別轉換時自動執行的,被稱作隱式轉換。算術轉換的一般性原則是是運算不損失精度,所以通常運算子的運算物件會被轉換為最寬的型別。所以int與double型別相加時,int會被轉換為double型別。如果...
讀書筆記《c語言深入剖析》
第一章 關鍵字 1.1 register register 變數可能不存放與記憶體中,因此,不能使用 來對訪問變數的位址。1.2 static 靜態全域性變數 作用域僅限於所定義的檔案中,其他檔案使用extern關鍵字也無法訪問 靜態區域性變數 函式體內定義的static變數,儲存於靜態儲存區,只能...
C深入 4 型別轉換
type value 強制型別轉換的結果 目標型別能夠容納目標值 結果不變 目標型別不能容納目標值 結果將產生截斷 注意 不是所有的強制型別轉換都能成功,當不能進行強制型別轉換時,編譯器將產生錯誤資訊。char c 0 變數c占用1個位元組 short s c c 到 s 隱式型別轉換 int i ...