首页 > 编程知识 正文

nullptr是什么意思,nullptr未定义报错

时间:2023-05-04 05:45:52 阅读:42156 作者:2415

NULL来自c语言,通常由宏定义实现,nullptr是由c添加的关键字。

在c语言中,NULL定义为[void*]0,在c语言中,NULL定义为整数0。

编译器定义如下

# ifdef _ _ cplusplus # define null0# else # define null () void* )0) #endif必须用c在指针上定义明确的类型。 但是,将NULL定义为0带来的另一个问题是无法与整数0区分。 因为c允许函数重载,所以请考虑以下函数定义:

# includeiostreamusingnamespacestd; voidfun(char*p ) { cout'char*'endl; }voidfun(intp ) { cout'int'endl; }int main () fun ) ) null; 返回0; //输出结果:在int中,传递NULL参数时将NULL视为整数0。 如果参数想调用指针的函数该怎么办?nullptr在C++11被引入用于解决这一问题,nullptr可以明确区分整型和指针类型,能够根据环境自动转换成相应的指针类型,但不会被转换为任何整型,所以不会造成参数传递错误。

nullptr的一种实现方法如下:

constclassnullptr _ t { public : templateclasstinlineoperatort * (const { return 0; }模板类c,classtinlineoperatortc :3360 * (const { return 0; } private : void操作器() const; }nullptr={}; 以上通过模板类和运算符重载实例化不同类型的指针,解决了(void* )指针参数类型未知的问题。 此外,nullptr是显式指针类型,因此不会与整形变量混淆。 但是,nullptr仍然存在问题。 示例:

# includeiostreamusingnamespacestd; voidfun(char*p ) {cout'char* p'endl; }voidfun(int*p ) {cout'int* p'endl; }voidfun(intp ) {cout'int p'endl; (}int main ) ) fun((char* ) nullptr ); //文1fun(nullptr ); //语句2fun(null ); //文3返回0; //执行结果://语句1:char* p//语句2:报告错误,如果存在多个与//3:int p匹配的函数,则存在指向不同指针类型的函数重载,在这种情况下,当传递空指针时在这种情况下,还存在要显示的指定参数类型。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。