C++11:一些微小的變化(新的數據類型、template表達式內的空格、nullptr、std::nullptr_t)

  • 本文介紹一些C++的兩個新特性,它們雖然微小,但對你的編程十分重要

一、新的數據類型

  • C++11添加的新的數據類型如下:
    • char16_t、char32_t
    • long long、unsigned long long
    • std::nullptr_t(下面詳細介紹)

二、Template表達式內的空格

  • C++11標準之前建議在“在兩個template表達式的閉符之間放一個空格”的要求已經過時了
  • 例如:
vector<list<int> >; //C++11之前

vector<list<int>>;  //C++11

三、nullptr

  • C++11允許你使用nullptr取代0或NULL,用來表示一個pointer(指針)指向所謂的no value
  • nullptr會被自動轉換爲各種pointer類型,但是不會被轉換爲任何證書類型

演示案例

void f(int);
void f(void*);

f(0);       //調用f(int)
f(NULL);    //如果NULL被視爲0,那麼調用的是f(int),可能與你的預期不符
f(nullptr); //調用f(void*)
  • 下面是在VS 2015上面的運行結果 

三、std::nullptr_t

  • std::nullptr_t是一種基礎數據類型,定義於<sctddef>中
  • std::nullptr_t定義的變量必須初始化
  • nullptr屬於一種常量,它是屬於std::nullptr_t數據類型的

演示案例

 

void f(int) {
    std::cout << "int" << std::endl;
}
void f(void*) {
    std::cout << "void*" << std::endl;
}
void f(std::nullptr_t) {
    std::cout << "std::nullptr_t" << std::endl;
}

int main()
{
    f(0);
    f(NULL);
    f(nullptr);

    //必須初始化
    std::nullptr_t t = nullptr;
    f(t);

    return 0;
}

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