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 那样隐式转换为整数类型。
广告