C++ 中的 nullptr 究竟是什么?


在本节中,我们将看到 C++ 中的 nullptr。nullptr 表示指针字面量。它是 std::nullptr_t 类型的 prvalue。它具有从 nullptr 到任何指针类型的 null 指针值和任何指针到成员类型的隐式转换属性。让我们看一个程序来理解这个概念。

示例

#include<iostream>
using namespace std;
int my_func(int N){ //function with integer type parameter
   cout << "Calling function my_func(int)";
}
int my_func(char* str) { //overloaded function with char* type parameter
   cout << "calling function my_func(char *)";
}
int main() {
   my_func(NULL); //it will call my_func(char *), but will generate compiler error
}

输出

[Error] call of overloaded 'my_func(NULL)' is ambiguous
[Note] candidates are:
[Note] int my_func(int)
[Note] int my_func(char*)

那么上面程序中的问题是什么?NULL 通常定义为 (void*)0。我们允许将 NULL 转换为整数类型。因此,my_func(NULL) 的函数调用是模棱两可的。

如果我们使用 nullptr 代替 NULL,我们将会获得以下结果 -

示例

#include<iostream>
using namespace std;
int my_func(int N){ //function with integer type parameter
   cout << "Calling function my_func(int)";
}
int my_func(char* str) { //overloaded function with char* type parameter
   cout << "calling function my_func(char *)";
}
int main() {
   my_func(nullptr); //it will call my_func(char *), but will generate compiler error
}

输出

calling function my_func(char *)

我们可以在预期 NULL 的所有地方使用 nullptr。像 NULL 一样,nullptr 也可以转换为任何指针类型。但它无法像 NULL 那样隐式转换为整数类型。

更新时间: 30-Jul-2019

222 次浏览

开启你的职业

通过完成课程获得认证

开始
广告