所以,和整数大家族相关,请用0(或自己重新定义的NULL,因为某些工程/实现可能把NULL定义成nullptr或者(void*) 0),和指针大家族相关,请用nullptr,这样才能写出尽量不出意外的程序。 NULL 和 0 其实NULL和0的关系在上面已经讲的差不多了,因为C++中不能将void *类型的指针隐式转换成其他指针类型,而又为了解决空指针...
NULL在C++中就是0,这是因为在C++中void* 类型是不允许隐式转换成其他类型的,所以之前C++中用0来代表空指针,但是在重载整形的情况下,会出现上述的问题。所以,C++11加入了nullptr,可以保证在任何情况下都代表空指针,而不会出现上述的情况,因此,建议以后还是都用nullptr替代NULL吧,而NULL就当做0使用。 其他:在没有...
nullptr:nullptr是 C++11 中引入的一个关键字,专门用于表示空指针。它是一个类型安全的指针常量,具有明确的指针类型 (std::nullptr_t),并且不能隐式转换为整数类型。 nullptr_t nullptr具有明确的类型std::nullptr_t,并且只能用于指针类型。 编译器能够识别nullptr并明确区分它与其他类型(如整数或枚举)。 2. 类型...
nullptr更加明确地表示空指针的概念,使代码更易读,更容易理解。 NULL可能在某些上下文中引起歧义,因为它只是一个宏,其实际值可以是0或其它。 重载决议: 如果一个函数有重载版本,其中一个接受指针类型的参数,使用nullptr可以避免重载决议的歧义问题。因为nullptr有独立的类型,可以更容易地选择正确的重载版本。 NULL在某些...
nullptr nullptr并非整型类别,甚至也不是指针类型,但是能转换成任意指针类型。nullptr的实际类型是std:nullptr_t。 来源:公众号【编程珠玑】,专注但不限于分享计算机编程基础,Linux,C语言,C++,数据结构与算法,工具,资源等编程相关[原创]技术文章。博客:https://www.yanbinghu.com/2019/08/25/36794.html ...
NULL,0,nullptr值都是0,但是类型不同,但是由于C头文件中NULL定义宏混乱,可能是int 0,也可能是(void*)0; 所以在C++11及以后的标准中引入新的空指针nullptr,nullptr就是(void*)0,所以在C++中空指针统一用nullptr。 2.NULL的详细解释 NULL 实际是一个宏,在传统的 C 头文件 (stddef.h) 中,可以看到如下代码...
2. nullptr C++11关键字,它是一个特殊的空指针常量,用于明确表示一个指针为空。在C++中,nullptr_t 是一个空指针常量的类型,可以用于初始化指针、进行空指针比较等操作。 C++NULL作为函数参数,会被编译器推导为int,而nullptr不是一个指针,但能自动转换成任意指针类型。由于类型安全性,使用 nullptr 是推荐的做法。
在上面的示例中,使用nullptr明确地调用了接受指针参数的foo函数,避免了可能产生的歧义和编译错误。 总结 综上所述,尽管C++已经有了NULL来表示空指针,但引入nullptr提供了更高的类型安全性、避免了函数重载时的歧义,并增加了代码的清晰性和可读性。因此,在现代C++编程中,推荐使用nullptr来代替NULL表示空指针。
NULL 和 nullptr 根据上面,我们知道了NULL本身是符号,只是不同编译器给出了不同的定义。刚刚看到了vs的定义,下面看下gcc对NULL的定义: 1) 如果gcc是c 语言模式而且gcc版本低于3.0,那么定义NULL 为 void* 类型 2) 如果gcc是c++ 语言模式,而且是32位,那么定义NULL 为无类型的0 ...
C++中NULL和nullptr的区别 在编写C程序的时候只看到过NULL,而在C++的编程中,我们可以看到NULL和nullptr两种关键字,其实nullptr是C++11版本中新加入的,它的出现是为了解决NULL表示空指针在C++中具有二义性的问题,为了弄明白这个问题,我查找了一些资料,总结如下。