再提一嘴,我们在C++中,通常使用nullptr这个C++的关键字来表示空指针。再提一嘴?好!在ASCII字符-数值对照表中!有一个不可见字符~它就是: \0它表示空字符,即ASCII码值为0的字符。它在C语言中用于表示字符串的结束。那么它和NULL有关系嘛?没有!虽然貌似NULL和'\0'的值都是0,但它们的用途和含义是不同的。
NULL是一个宏定义,在c和c++中的定义不同,c中NULL为(void*)0,而c++中NULL为整数0 所以在c++中int *p=NULL; 实际表示将指针P的值赋为0,而c++中当一个指针的值为0时,认为指针为空指针 然后理解nullptr: nullptr是一个字面值常量,类型为std::nullptr_t,空指针常数可以转换为任意类型的指针类型。 在c++中(v...
NULL在C++中就是0,这是因为在C++中void* 类型是不允许隐式转换成其他类型的,所以之前C++中用0来代表空指针,但是在重载整形的情况下,会出现上述的问题。所以,C++11加入了nullptr,可以保证在任何情况下都代表空指针,而不会出现上述的情况,因此,建议以后还是都用nullptr替代NULL吧,而NULL就当做0使用。 其他:在没有...
nullptr 出现的目的是为了替代 NULL。在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0。 C++ 不允许直接将 void * 隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么...
nullptr 的超能力 让我们一起探索 nullptr 的三大核心优势,看看它如何让我们的代码更加安全可靠! (1) 类型安全 复制 // 🎯 nullptr 具有神奇的类型转换能力void*ptr=nullptr;// ✨ 通用指针类型int*iptr=nullptr;// 🔄 自动转换为 int 指针char*cptr=nullptr;// 📝 自动转换为 char 指针double*dptr=...
答:个人觉得由于(void*)0更能体现指针的意义,而常数0更多的时候是用作整数。因此,C语言中NULL定义选择了(void*)0。(仅供参考) 问题二:C++11中为什么要引入nullptr? 考虑着这样一个函数重载的情形: #include <stddef.h>voidfoo(int) {}//#1voidfoo(char*) {}//#2intmain() { ...
C语言我们用NULL作为指针变量的初始值,而在C++一般不建议这么做,C++中,如果想表示空指针,建议使用nullptr,而不是NULL。 NULL具有二义性,为了解决这种二义性,C++11标准引入了关键字nullptr作为空指针常量。 参考:再谈NULL和nullptr(C++11)区别...
C++中的nullptr相比C语言中的NULL具有更好的类型安全性。nullptr是一个强类型的指针空值,而NULL在C中通常被定义为0或(void*)0,这可能导致隐式类型转换的问题。使用nullptr可以避免这类问题,并且使代码更加清晰和易于理解。 关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/625622 ...
nullptr并非整型类别,甚至也不是指针类型,但是能转换成任意指针类型。nullptr的实际类型是std:nullptr_t。 来源:公众号【编程珠玑】,专注但不限于分享计算机编程基础,Linux,C语言,C++,数据结构与算法,工具,资源等编程相关[原创]技术文章。博客:https://www.yanbinghu.com/2019/08/25/36794.html ...
nullptr是一个字面值常量,类型为std::nullptr_t,空指针常数可以转换为任意类型的指针类型。 在c++中(void *)不能转化为任意类型的指针,即 intp=(void)是错误的,但int *p=nullptr是正确的,原因 对于函数重载:若c++中 (void *)支持任意类型转换,函数重载时将出现问题下列代码中fun(NULL)将不能判断调用哪个函数...