decltype作用是選擇並返回運算元的資料型別。
decltype(f()) sum = x; // sum的型別就是函式f的返回型別
如果decltype使用的表示式是乙個變數,則decltype返回該變數的型別(包括頂層const和const在內):
constint ci=0, &cj =ci;
decltype(ci) x = 0; //
x的型別是const int
decltype(cj) y = x; //
y的型別是const int&,y繫結到變數x
decltype(cj) z; //
錯誤,z是乙個引用,必須初始化
如果decltype使用的表示式不是乙個變數,則decltype返回表示式結果對應的型別。
//decltype的結果可以是引用型別
int i = 42, *p = &i, &r =i;
decltype(r+0) b; //
正確,加法的結果是int,因此b是乙個未初始化的int
decltype(*p) c; //
錯誤,c是int&,必須初始化
因為r是乙個引用,因此decltype(r)的結果是引用型別。如果想讓結果型別是r所指的型別,可以把r作為表示式的一部分,如r+0,顯然這個表示式的結果將是乙個具體值而非是乙個引用。
另一方面,如果表示式的內容是解引用操作,則decltype將得到引用型別。因此decltype(*p)的結果型別就是int&,而非int。
對於decltype所用的表示式來說,如果變數名加上了一對括號,則得到的型別和不加括號時有所不同。如果decltype使用的是乙個不加括號的變數,則得到的結果就是該變數的型別;如果給變數加上了一層括號或者多層括號,編譯器就會當成乙個表示式。變數是一種可以作為賦值語句左值的特殊表示式,所以這樣的decltype就會得到引用型別:
//decltype的表示式如果加上了括號的變數,結果將是引用
decltype((i)) d; //
錯誤,d是int&,必須初始化
decltype(i) e; //
正確,e是乙個未初始化的int
類值類與類指標類
類值類 行為像值的 class a a const a a ps new string a.ps i a.i 每個類物件有自己的乙份資源拷貝 a operator const a rhs a private string ps int i 一種優化拷貝賦值運算子的方法 copy and swap c...
巢狀類 匿名類 密封類
巢狀類 在c 中可以將乙個類定義在另乙個類的內部,外部的叫外部類,內部的巢狀類 namespace 27 set public void hello 巢狀類 public class web webname,weburl class program 匿名類 如果某個類的例項物件只會使用到一次,可以使...
點類,圓類,圓柱類
print?copyright c 2012,煙台大學計算機學院 all rights reserved.檔名稱 text.cpp 作 者 胡穎 完成日期 2013年5月20日 版 本 號 v1.0 輸入描述 無 問題描述 1 先建立乙個point 點 類,包含資料成員x,y 座標點 2 以poin...