对于有经验的C ++和那些了解现代C ++编程语言的人来说,C ++中的nullptr到底是什么,这将是非常简单的问题。但是nullptr不仅是C
++中的编程语言,而且为了解释这一点,我们先了解一下NULL的问题,然后我们将深入研究nullptr的简单实现以及nullptr的一些用例。为什么我们需要nullptr?区分整数0(零)(即NULL)和类型指针的实际null。
nullptr与NULL
NULL为0(零),即将C样式类型转换为void
*的整数常数为零,而nullptr是nullptr_t类型的prvalue,该值是整数常量,其值为零。
对于那些相信NULL相同的人,即C和C ++中的(void *)0。想澄清的是,不是:
NULL-cppreference.com (C)
NULL-cppreference.com (C ++)
C ++要求将宏NULL定义为值为0的整数常量表达式。因此与C语言不同,在C ++标准库中不能将NULL定义为(void *)0。
NULL问题
1.隐式转换
char *str = NULL; // Implicit conversion from void * to char *
int i = NULL; // OK, but `i` is not pointer type
2.函数调用歧义
void func(int) {}
void func(int*){}
void func(bool){}
func(NULL); // Which one to call?
编译会产生以下错误:
error: call to 'func' is ambiguous
func(NULL);
^~~~
note: candidate functio