考虑以下代码简单的代码,向my函数传递NULL会发生什么问题?
#include <bits/stdc++.h>
using namespace std;
int my(int n){
cout<<"my(int)"<<endl;
};
int my(char* s){
cout<<"func(char*)"<<endl;
};
int main(void){
func(NULL);
return 0;
}
编译无法通过,这里发生什么问题呢?
NULL在C中实际上被定义为(void*)0,并且在某些C编译中允许将NULL转化为整数类型,但在新版的C++编译器中这是不允许的。
因此函数调用my(NULL)会另C++编译器非常困扰,因为你提供的my函数原型跟你调用中提供的参数类型无法匹配。
解决方法
nullptr是可在所有预期为NULL的地方使用的关键字。 像NULL一样,nullptr可以隐式转换并且可以与任何指针类型进行比较,与NULL不同,它不能隐式转换或与整数类型进行比较。并且nullptr可转换为bool
网友评论