在编程逻辑世界,有因必有果,如果一个结果含糊不定(二义性),显然是我们不想要的。C++11中引入nullptr是为了解决NULL的二义性问题。
void func(int) {}
void func(int *) {}
先看C++对NULL的定义:
#if defined(__cplusplus)
# define NULL 0 /* C++中使用0作为NULL的值 */
#else
# define NULL ((void *)0) /* C中使用((void *)0)作为NULL的值 */
#endif
我们可以看到C++的NULL被宏定义为0,所以函数func(NULL)
会因为NULL为0而导致调用func(int)
函数,这是我们不想要的结果。
使用nullptr(空指针常量),当函数调用func(nullptr)
时则会调用func(int *)
函数。