【C++】C++的引用-四.nullptr

时间:2024-10-16 20:28:27

NULL实际是⼀个宏,在传统的C头⽂件(stddef.h)中,可以看到如下代码:

#ifndef NULL
	#ifdef __cplusplus
		#define NULL 0
	#else
		#define NULL ((void *)0)
	#endif
#endif

1.C++中NULL可能被定义为字面常量0,或者C中被定义为无类型指针(void*)的常量。不论采取何种定义,在使用空值的指针时,都不可避免的会遇到⼀些麻烦,本想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,调用了f(int x),因此与程序的初衷相悖。f((void*)NULL);调⽤会报错。

void Fun(int x)
{
	cout << "Fun(int x)" << endl;
}

void Fun(int* ptr)
{
	cout << "Fun(int* ptr)" << endl;
}

int main()
{
	Fun(0);
	Fun(NULL);
	return 0;
}

2.C++11中引入nullptr,nullptr是⼀个特殊的关键字,nullptr是⼀种特殊类型的字⾯量,它可以转换成任意其他类型的指针类型。使用nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被隐式地转换为指针类型,⽽不能被转换为整数类型。

int main()
{
	Fun(0);
	Fun(NULL);
	Fun(nullptr);
	return 0;
}