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 关键字不是一种类型,也不支持用于:

  • sizeof

  • typeid

  • throw nullptr(尽管 throw (Object^)nullptr; 可以正常发挥作用)

nullptr 关键字可用于初始化以下指针类型:

  • 本机指针

  • Windows 运行时句柄

  • 托管句柄

  • 托管内部指针

nullptr 关键字可用于在使用指针或句柄引用之前,先测试引用是否为空。

应正确解释使用空指针值进行错误检查的语言之间的函数调用。

无法将句柄初始化为 0;只能使用 nullptr。 将常数 0 赋给对象句柄会生成装箱的 Int32,并强制转换为 Object^

//https://docs.microsoft.com/zh-cn/cpp/extensions/nullptr-cpp-component-extensions?view=vs-2019

原文地址:https://www.cnblogs.com/YZFHKMS-X/p/11805652.html