初探C++11

【引言】學了那麼長時間的C++98,是時候進入新世界(C++11)的大門了! ————致敬C++

一、新增的類型
c++11新增了 long long int 和unsigned long long int 支持64位或者更寬的整數;
新增了char16_t , char32_t來支持16位和32位的字符表示;
二、統一的初始化
C++增強了{ }的能力,加大了它的使用範圍。
可以這樣:int num={5}; double num1 {0.33};
甚至可以這樣:int * point = new int[3] {1,6,8};
其中等號都可有可無;
在創建對象時候,花括號還可以當構造函數的參數傳遞部分
例如:

class test
{
public:
    test(int x, int y) :_x(x), _y(y){}
private:
    int _x;
    int _y;
};
int main()
{
    test t1{ 1, 2 };//用花括號來傳遞參數
    return 0;
}


三、新關鍵字
1.auto,以前這個關鍵字是一個存儲類型說明符;
現在的auto能進行類型自動推斷功能;

double fun(double, int);
int main()
{
    auto a = 10;//自動推斷a爲int
    auto pa = &a;//自動推斷pa爲int*
    auto pf = fun;//自動推斷pf爲函數指針
    return 0;
}

注意,auto還能簡化模板聲明,

for (vector<int>::iterator p = v.begin(); p != v.end(); p++);
    for (auto p = v.begin(); p != v.end(); p++);

上面的部分可以替換成下面所示;
2.decltype將變量定義爲表達指定的類型
用法 decltype(表達式) 變量;

    int a = 0;
    double b = 2;
    decltype (a*b)  ab;//ab爲a*b的類型 也就是double
    decltype (&a) p1;//p1爲&a的類型 也就是int*

四、新的聲明
1.返回值後置
C++11設置的一種新語法在函數名和參數後面設置返回值而不是在前面;
這種方法其實看似好像是倒退,但是爲了強行配合decltype的使用;我就是這麼理解的
我們甚至可以吧函數模板寫成下面這種形式,在語法上是通過的

template<class T,class U>
auto fun(T t, U u)->decltype(U*T)
{
    ...
}

2.模板別名using=
對於模板而言,雖然泛型編程的優勢玲離盡致,但是有些缺點卻不能不說,冗長而且複雜的標示符常常讓我們難以啓齒,爲此我們創建了模板的別名using =

//舊的定義方法
typedef std::vector<int>::iterator itType;
//新的
using itType= std::vector<int>::iterator;

這種語法和typedef的區別在於他不能部分實例化;
3.空指針nullptr
C++11中的新定義的nullptr表示空指針,但也還是允許用0來代表空指針,nullptr不能轉化爲整型,但是可以向後兼容nullptr==0是真。
4.智能指針
C++11拋棄了auto_ptr,加入了shared_ptr、unique_ptr、weak_ptr;這個接觸到多;
5.新的作用域枚舉
6.新的異常規定:
委員會指出了新的函數可能拋出的異常,並且添加了noexcept關鍵字在函數後面;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章