C++ 基础知识 --- 如何正确使用 NULL 0 nullptr

如何正确使用 NULL 0 nullptr

1. 整体认识 ###

1.1 0:整形常量
1.2 NULL:预处理符号(宏) C++ 中声明如下:

#ifndef __cplusplus
#define NULL ((void *)0)
#else   /* C++ */
#define NULL 0

1.3 nullptr: C++ 11 出现的 空指针类型常量,是std::nullptr_t类型的纯右值

2. 为何需要增加nullptr

2.1 解决重载歧义

这是C11加入nullptr的主要原因,可能会有如下的重载歧义:

void foo(char* p)
void foo(int i)
int main()
{
    foo(NULL);  //匹配哪个版本的foo? 
}

3. 其他

3.1 特殊例子

union U {
    long i;
    std::nullptr_t t;
};

int main()
{
    U u;
    u.i = 666;
    printf("%ld\n", (long)u.t);
    return 0;
}

这个时候结果是多少呢?C++标准没有规定,我用gcc 5.4.0版本测试结果为0.

参考资料

  1. https://www.zhihu.com/question/22203461/answer/20875324

你可能感兴趣的:(C++基础)