如何初始化指向null的指针

时间:2014-08-22 17:11:36

标签: c++ c++11

有三种方法(我很清楚)初始化一个指向空值的指针:

1)值初始化

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();

2)手动设置为nullptr

int *p = nullptr;

3)设置为有效的nullpointer-constant,可以隐式转换为任何指针类型

int *p = NULL;

  • 每种方法的优缺点是什么?

  • 是否存在使用每种方法最合适的用例?

2 个答案:

答案 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初始化在两种形式中都有效。因此,最好用它来初始化指针。