- 本文介紹一些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; }