美文网首页
C++关于NULL、0、nullptr

C++关于NULL、0、nullptr

作者: ColdRomantic | 来源:发表于2016-07-17 01:11 被阅读382次

2016-07-17 星期日 天气☀ 01:07:04

一 关于NULL、0、nullptr

1 在C语言中NULL被定义为:一个void* 指针,指向的地址为0。

#define NULL ((void *)0)

所以在C语言中我们通常会写出如下语句

int *i = NULL;
foo_t *f = NULL;

2 而在C++中,NULL会被定义为0

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

3 C++11引入了nullptr 来表示空指针

二 在C++中使用NULL的风险

//func1
int mycall(char *a, char *b)
{
    cout<<"char pointer!"<<endl;
}
//func2
int mycall(char *a, int b)
{
    cout<<"int !"<<endl;
}
// func3
int mycall(char *a,nullptr_t nullp)
{
    cout<<"nullptr !"<<endl;
}
int main()
{
    char *a,*b;
    mycall(a,b); //char pointer!
//优先调用func2,没有func2则调用func1或func3;func1和func3同时存在则报错ambiguous
    mycall(a,NULL);//int !
//优先调用func3,没有func3则调用func1,绝不会调用func2。
    mycall(a,nullptr);//nullptr !
    return 0;
}

三 总结

在写纯C时
(1) 给指针变量赋空指针可以使用NULL
在写C++
(1) 不要使用NULL, 如果真要使用那就写个0,或者自己定义一个宏 #define iZERO 0
(2) 使用空指针时请用nullptr

相关文章

  • C++11/14新特性

    1.nullptr nullptr 出现的目的是为了替代 NULL,传统 C++ 会把 NULL、0 视为同一种东...

  • FFmpeg视频播放

    首先记录一下C++中的NULL、0、nullptr的区别 NULL在C++中就是0,这是因为在C++中void* ...

  • C++关于NULL、0、nullptr

    2016-07-17 星期日 天气☀ 01:07:04 一 关于NULL、0、nullptr 1 在C语言中...

  • C++学习笔记之NULL vs nullptr

    C++学习笔记之NULL vs nullptr

  • nullptr

    nullptr 空指针:从 0 到 NULL,再到 nullptr NULL 是一个宏定义: 引起该问题的原因是 ...

  • nullptr(转)

    引入nullptr的原因引入nullptr的原因,这个要从NULL说起。对于C和C++程序员来说,一定不会对NUL...

  • NULL,nullptr,0,'\0','0'区别

    NULL,nullptr,0,'\0','0',这几个看起来好像都不是一样的东西,但是实际上前面4个都是数字0,只...

  • NULL和nullptr的使用

    NULL是C 标准库表示空指针的类型,nullptr是C++ stl表示空指针的类型事实上,NULL或是nullp...

  • Effective Modern C++ - 3: 步入 Mod

    item8 nullptr 优先于 0 和 NULL 总结: (1) 0: 0 是 int 型, 编译器将 应该出...

  • C++11新特性(2)

    1.空指针nullptr nullptr与NULL的区别:对于NULL,是一个空指针常量,如果将NULL扩展为常数...

网友评论

      本文标题:C++关于NULL、0、nullptr

      本文链接:https://www.haomeiwen.com/subject/wzbujttx.html