c++ - 如何将指针初始化为空

标签 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) 设置为可隐式转换为任何指针类型的有效空指针常量

int *p = NULL;

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

  • 是否存在每种方法都被认为最合适的用例?

最佳答案

Stroustroup 总是告诉我们告诉我们

 TYPE *var = 0 ;

在过去的 C++ 时代,库几乎没有标准化。做

TYPE *var = NULL ; 

当 NULL 的定义未标准化时,通常会给出不同的结果。一些编译器选择了 C 定义。

需要C++

#define NULL (0)

在 C 头文件通常有的情况下正常工作

#define NULL ((void*)0)

因此,0成为设置空指针的公认方法。

随着标准的改变,可能会转向 nullptr。

关于c++ - 如何将指针初始化为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25452285/

相关文章:

c++ - ICMPv6 - 无法读取任何路由器通告消息

c++ - 如何刷新gtk小部件(gtk_widget_queue_draw错误)

c++ - 语句 block 的原子执行

c++ - 具有多个数组的类的构造函数初始化列表(C++11 可以,boost 和 std::vector 不行)

c++ - 原始 UDP 套接字卡在 recvfrom 上

c++ - 示例 Web 服务器和字节序

c++ - LAPACK 矩阵乘法与 C++

c++ - 如何将一个或多个(未定义的数字)参数传递给函数?

c++ - 为什么 clang 3.4 以如此奇怪的方式实现 `std::function`?

c++11 - 关于在 C++11 中初始化向量