有三种方法(我很清楚)初始化一个指向空值的指针:
T a = T(); // T is a pointer type
T a{}; // brace initializers don't suffer from the most vexing parse
即使需要typedef
,也可以在非通用代码中使用此表单,例如
typedef int* ip;
int *p = ip();
nullptr
int *p = nullptr;
int *p = NULL;
每种方法的优缺点是什么?
是否存在使用每种方法最合适的用例?
答案 0 :(得分:4)
Stroustroup总是把我们告诉我们
TYPE *var = 0 ;
在C ++的日子里,几乎没有图书馆的标准化。做
TYPE *var = NULL ;
当NULL的定义未标准化时,通常会给出不同的结果。一些编译器选择了C定义。
需要C ++
#define NULL (0)
在C标题通常
时正常工作#define NULL ((void*)0)
因此,0成为设置空指针的可接受方法。
通过标准更改,可能会转移到nullptr。
答案 1 :(得分:3)
使用
int *p = nullptr;
我认为是最好的。
使用typedef
时,可以使用值初始化。但是,你不能使用:
int *p = int*{};
或
int *p = int*();
但是,您可以使用:
int* p = nullptr;
ip q = nullptr;
使用nullptr
初始化在两种形式中都有效。因此,最好用它来初始化指针。