C++11 的新特性
1 變量和基本類型
1.1 long long 類型
擴展精度浮點數,10位有效數字
1.2 列表初始化
初始化的幾種不同形式,其中用花括號來初始化變量稱為列表初始化;
比如:
int i = 0;
int i = {0};
int i{0};
int i(0);
需要注意的是,當用于內置類型的變量時,這種初始化形式有一個重要的特點:如果我們使用初始化且初始值存在丟失信息的風險,則編譯器報錯;
例如:
long double ld = 3.1414141414;
int a{ld}, b = {ld}; //報錯
int c(ld), d = ld; //正確
cout << "a:" << a << "b:" << b << "c:" << c << "d" << d << endl;
運行的時候,a,b則會提示報錯信息:error: type 'long double' cannot be narrowed to 'int' in initializer list [-Wc++11-narrowing],這是因為使用long double的值初始化int變量時可能會丟失數據,所以拒絕a和b的初始化請求;雖然c,d雖然沒有報錯,但是確實丟失了數據;
[這是為什么?]
1.3 nullptr 常量
有幾種生成空指針的方法:
int *p1 = nullptr; // 等價于int *p1 = 0;
int *p2 = 0;
int *p3 = NULL; // 等價于int *p3 = 0;
在新標準下,建議盡量使用新標準nullptr,nullptr是一種特殊類型的字面值,它可以被轉換成任意其它的指針類型,雖然其它的方式也是可以的;
1.4 constexpr 變量
將變量聲明為constexpr類型以便由編譯器來驗證變量的值是否是一個常量表達式;
聲明為constexpr的變量一定是一個常量,而且必須用常量表達式來初始化,比如說下面的情況則是不正確的:
int t = 10;
constexpr int q = t + 20;
cout << "q" << q << endl;
需要將t聲明為 const 才是正確的;
一般來說,如果你認定變量是一個常量表達式,那就把它聲明為constexpr類型;
1.5 類型別名聲明
使用類型別名可以使復雜的類型名字變得更簡單明了,易于理解和使用;
現在有兩種方法可以用來定義類型別名,一種是 typedef ,另一種則是新標準中的 using
本文來自博客園,作者:七星落地,轉載請注明原文鏈接:http://www.rzrgm.cn/dwx-bzdcxy/p/14733377.html
浙公網安備 33010602011771號