C Prime decltype型別指示符

2022-03-15 05:46:00 字數 1133 閱讀 7480

decltype作用是選擇並返回運算元的資料型別。

decltype(f()) sum = x;  // sum的型別就是函式f的返回型別

如果decltype使用的表示式是乙個變數,則decltype返回該變數的型別(包括頂層const和const在內):

const

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