gpt4 book ai didi

c++ - 使用 nullptr 有什么好处?

转载 作者:IT老高 更新时间:2023-10-28 11:30:27 24 4
gpt4 key购买 nike

这段代码概念上对三个指针做了同样的事情(安全指针初始化):

int* p1 = nullptr;
int* p2 = NULL;
int* p3 = 0;

那么,分配指针 nullptr 比分配值 NULL0 有什么优势?

最佳答案

在该代码中,似乎没有优势。但请考虑以下重载函数:

void f(char const *ptr);
void f(int v);

f(NULL); //which function will be called?

将调用哪个函数?当然,这里的本意是调用f(char const *),但实际上会调用f(int)!这是个大问题1,不是吗?

所以,解决此类问题的方法是使用nullptr:

f(nullptr); //first function is called

当然,这不是 nullptr 的唯一优势。这是另一个:

template<typename T, T *ptr>
struct something{}; //primary template

template<>
struct something<nullptr_t, nullptr>{}; //partial specialization for nullptr

由于在模板中,nullptr的类型被推导出为nullptr_t,所以可以这样写:

template<typename T>
void f(T *ptr); //function to handle non-nullptr argument

void f(nullptr_t); //an overload to handle nullptr argument!!!

1.在C++中,NULL被定义为#define NULL 0,所以基本上是int,所以f(int) 被调用。

关于c++ - 使用 nullptr 有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13816385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com