c++学习笔记2--constexpr,类型别名,auto
constexpr:修飾常量表達式,約定修飾對象不僅為常量,而且在編譯階段就能得到值。
與const不同的是,constexpr約束的是當事人,就是說,constexpr int *a=1;這樣的語句,a指針本身是const,并且右邊也足夠簡單,而const int*a;這樣的語句,則約定了a指向對象是const,這是不同點。constexpr直接限定為頂層const。
類型別名:傳統的是typedef,
typedef double a; a b = 1.1;
類似這樣的代碼么就是說a是一個double類型
c11新標準有新的類型別名定義:
using a = double;
關于指針的類型別名有個需要注意的點:
typedef char *a; const a cstr = 0 ;//cstr是char的常量指針 const a *p ; //p是指向char常量指針的 指針
如果直接字面替代理解typedef會得到錯誤的理解。
例如帶入以后得到這樣的代碼:const char *a = 0; 這是底層const,這種理解是錯誤的。
auto類型:c11新標準引入的類型。由編譯器幫助我們去判斷類型。
類似auto a = 1;則a是int型。
需要注意的是:
const int *a = NULL; auto b = a; const int c = 1; auto d = c;
b結果是一個指向int常量的指針,d只是普通的int型。
編譯器會放棄頂層const,而底層的const則會保留下來。
類似于:
auto a = 1,b=2;
這樣的代碼,必須保證a,和b是同一種類型。
否則會報錯。
decltype 類型指示符
c++11新標準的另一種指示符就是decltype類型指示符:
decltype(f()) sum = x;
它根據f()返回值限定類型,他處理頂層和底層const與auto不同,const會被保留,即使是頂層。
如:
const int i = 0;
decltype(i) a = 0;
a 也是const int.
解引用和()表達式最后也會返回引用。
總結
以上是生活随笔為你收集整理的c++学习笔记2--constexpr,类型别名,auto的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工行融e借申请技巧 需要注意这几个方面
- 下一篇: 精准信息是什么公司