可以用 auto 關鍵字定義變數,編譯器會自動判斷變數的型別。例如:
auto i =100; // i 是 int
auto p = new a(); // p 是 a*
auto k = 34343ll; // k 是 long long
有時,變數的型別名特別長,使用 auto 就會很方便。例如:
map >mp;
for( auto i = mp.begin(); i != mp.end(); ++i)
cout << i -> first << ", " << i -> second;
編譯器會自動判斷出 i 的型別是 map::iterator。
decltype 關鍵字可以用於求表示式的型別。例如:
int i;
double t;
struct a ;
const a* a = new a();
decltype(a) x1; //x1 是 a*
decltype(i) x2; //x2 是 int
decltype(a -> x) x3; // x3 是 double
在上面的例子中,編譯器自動將 decltype (a) 等價為a*,因為編譯器知道 a 的型別是a*。
auto 和 decltype 可以一起使用。例如:
#include using namespace std;
struct a
};a operator + (int n, const a & a)
template auto add(t1 x, t2 y) -> decltype(x + y)
int main()
程式的輸出結果如下:
101.5
101第 12 行告訴編譯器,add 的返回值型別是decltype(x+y),即返回值的型別和x+y這個表示式的型別一致。編譯器將 add 例項化時,會自動推斷出x+y的型別。
在 c++11 中,函式返回值若為 auto,則需要和 decltype 配合使用。在 c++14 中,則可以不用 decltype,例如下面的程式沒有問題:
auto add (int a, int b)
C 11 auto型別推斷和decltype
1.auto型別推斷 a.引入原因 程式設計時,經常需要將表示式的值賦給變數,這就要求我們在申明變數的時候,明確知道表示式的型別,然而要做到這一點並不容易,於是引入auto讓編譯器幫我們去做型別分析。b.使用注意事項const int const i 1,const ref const i auto...
C 11 auto自動型別推導
1.auto型別推導auto x 5 正確,x是int型別 auto pi new auto 1 正確,批是int const auto v x,u 6 正確,v是const int 型別,u是const int static auto y 0.0 正確,y是double型別 auto int r ...
C 11 auto與decltype關鍵字
在我們程式設計時候常常需要把表示式的值賦給變數,需要在宣告變數的時候清楚的知道變數是什麼型別。然而做到這一點並非那麼容易 特別是模板中 有時候根本做不到。為了解決這個問題,c 11新標準就引入了auto型別說明符,用它就能讓編譯器替我們去分析表示式所屬的型別。和原來那些只對應某種特定的型別說明符 例...