我们知道在编程的世界里,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