我們知道在編程的世界里,0有雙重的角色,可以表示整數零,也可以表示一個空指針。
在C語言中,通過預編譯宏NULL,可以區分0表示的是零還是(void*)0.
但是,在C++的世界中,這樣是不可以的。C++中允許函數重載。例如:
~~~
void foo(char *);
void foo(int);
~~~
如果把NULL定義為0,那么foo(NULL)將調用哪個函數呢?
這樣的話,編譯器不會知道調用哪個函數。
所以C++11引入了另一個關鍵字nullptr,作為一個空指針。
~~~
char *pc = nullptr; // OK
int *pi = nullptr; // OK
bool b = nullptr; // OK. b is false.
int i = nullptr; // error
foo(nullptr); // calls foo(char *), not foo(int);
~~~
- 前言
- 吐血整理C++11新特性
- C++11新特性之std::function
- c++11特性之正則表達式
- c++11特性之Lambda表達式
- c++11特性之override和final關鍵字
- c++11特性之std::thread--初識
- c++11特性之std::thread--初識二
- c++11特性之initializer_list
- c++11特性之std::thread--進階
- c++11特性之std::thread--進階二
- C++11新特性之 CALLBACKS
- C++11新特性之 std::array container
- C++11新特性之 nullptr
- C++11新特性之 rvalue Reference(右值引用)
- C++11新特性之 Move semantics(移動語義)
- C++11新特性之 default and delete specifiers
- C++11新特性之 Static assertions 和constructor delegation
- 開始使用C++11的幾個理由
- C++11新特性之 std::future and std::async