C++11之前使用NULL表示空指针,C++11后改用nullptr表示空指针,因为NULL其实是常量0,会引起歧义。
看下面的例子:
#include<iostream>
using namespace std;
//定义fun函数
void func(char *str){
cout<<"char * func"<<endl;
}
//重载
void func(int val){
cout<<"int func"<<endl;
}
void test01(){
//func(NULL); //引起歧义 因为NULL是常量0,上面两个函数都符合,因为C++11后使用nullptr
func(nullptr);//调用char*版本
}
int main(){
test01();
return 0;
}
当调用func(NULL)时编译器会报错,不知道调用哪个函数,因为NULL表示常量0,都符合上面两个函数的形参列表,
如果使用func(nullptr)就不会出现这个问题