C/C++ nullptr
nullptr 关键字表示空指针值。 空指针值可用于指明对象句柄、内部指针或本机指针类型不指向对象。
结合使用 nullptr 与托管代码或本机代码。 编译器为托管空指针值和本机空指针值发出相应但不同的指令。 若要了解如何使用此关键字的 ISO 标准 C++ 版本,请参阅 nullptr。
__nullptr 是 Microsoft 专用关键字,虽然与 nullptr 的含义相同,但仅适用于本机代码。 如果你将 nullptr 与本机 C/C++ 代码结合使用,然后使用 /clr 编译器选项进行编译,那么编译器便无法确定 nullptr 指明的是本机空指针值,还是托管空指针值。 若要向编译器明确表达你的意图,请使用 nullptr 来指定托管值,或使用 __nullptr 来指定本机值。
nullptr 关键字相当于 Visual Basic 中的“无”和 C# 中的“null”。
Nullptr中也定义关键字C++适用于 CLI 的托管代码应用程序和与 ISO 标准不可互换C++关键字。 如果你的代码可能会通过编译/clr编译器选项,以托管的代码为目标,然后使用__nullptr
代码,必须保证编译器使用本机 C++ 解释的任何行中。 有关详细信息,请参阅nullptr。
避免使用 NULL 或零 (0
) 为 null 指针常量;nullptr是不易被误用,在大多数情况下更好地工作。 例如,给定 func(std::pair<const char *, double>)
,那么调用 func(std::make_pair(NULL, 3.14))
会导致编译器错误。 宏 NULL 将扩展到 0
,以便调用 std::make_pair(0, 3.14)
将返回 std::pair<int, double>
,此结果不可转换为 func() 的 std::pair<const char *, double>
参数类型。 调用 func(std::make_pair(nullptr, 3.14))
将会成功编译,因为 std::make_pair(nullptr, 3.14)
返回 std::pair<std::nullptr_t, double>
,此结果可转换为 std::pair<const char *, double>
。
用法
nullptr 关键字可用于任何能使用句柄、本机指针或函数参数的位置。
nullptr 关键字不是一种类型,也不支持用于:
nullptr 关键字可用于初始化以下指针类型:
-
本机指针
-
Windows 运行时句柄
-
托管句柄
-
托管内部指针
nullptr 关键字可用于在使用指针或句柄引用之前,先测试引用是否为空。
应正确解释使用空指针值进行错误检查的语言之间的函数调用。
无法将句柄初始化为 0;只能使用 nullptr。 将常数 0 赋给对象句柄会生成装箱的 Int32
,并强制转换为 Object^
。
//https://docs.microsoft.com/zh-cn/cpp/extensions/nullptr-cpp-component-extensions?view=vs-2019
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律