C++学习笔记总结练习:nullptr、NULL、0

三者的区别

参考文献

1 说明

C中的NULL

  • C中使用 ((void*)0)表示空指针。NULL会被替换为 ((void*)0)

    int *i = NULL;
    foo_t *f = NULL;

    #define NULL ((void*)0)

C++中的NULL

  • C++中void* 不能进行强制类型转换成其他类型的NULL,所以int* 类型的空指针,不能使用void* 代替,则原来的宏定义无法使用。

  • C++中使用0,来表示空指针。

    #ifdef __cplusplus ---简称:cpp c++ 文件
    #define NULL 0
    #else
    #define NULL ((void *)0)
    #endif

C++中的0

  • 重载过程中会出现问题,因为空指针会被识别为整形的0,从而导致重载出现错误。
  • 0指针的二义性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P08a3sF5-1692607890743)(image/2021-03-05-17-00-11.png)

C++中的nullptr

  • nullptr 关键字,被自动转换为各种pointer类型。但他不会不转换为任何整型类型。防止null作为参数的时候出现函数重载的错误。

主要区别

  • nullptr关键字:nullptr是一种特殊类型的字面值,它可以被转换成任意其它的指针类型;而NULL一般被宏定义为0,在遇到重载时可能会出现问题。
相关推荐
暗然而日章9 分钟前
C++基础:Stanford CS106L学习笔记 13 特殊成员函数(SMFs)
c++·笔记·学习
小智RE0-走在路上13 分钟前
Python学习笔记(6)--列表,元组,字符串,序列切片
笔记·python·学习
云泽80814 分钟前
STL容器性能探秘:stack、queue、deque的实现与CPU缓存命中率优化
java·c++·缓存
J ..27 分钟前
C++ Lambda 表达式完全指南
c++
Qt程序员41 分钟前
从 C++11 到 C++23:枚举的原理升级与实践
c++·c++23
CC.GG43 分钟前
【C++】红黑树
java·开发语言·c++
d111111111d1 小时前
什么是内存对齐?在STM32上面如何通过编辑器指令来实现内存对齐。
笔记·stm32·单片机·嵌入式硬件·学习·编辑器
闻缺陷则喜何志丹1 小时前
【计算几何 线性代数】仿射矩阵的秩及行列式
c++·线性代数·数学·矩阵·计算几何·行列式·仿射矩阵得秩
xu_yule1 小时前
算法基础-背包问题(01背包问题)
数据结构·c++·算法·01背包
特立独行的猫a1 小时前
C++ Core Guidelines(C++核心准则):2025现代C++开发关键要点总结
c++·core guidelines·核心准测