2020-09-24 NULL nullptr

2020-09-25  本文已影响0人  yuerxiaoshui
#include <iostream>
using namespace std;

void func(void* t)
{
    cout << "func1" << endl;
}

void func(int i)
{
    cout << "func2" << endl;
}

int main()
{
    func(NULL);
    func(nullptr);
    return 0;
}

输出结果为:

func2 
func1

其中,NULL 参数的函数匹配到了 int 型参数的函数,原因是在 C++ 中,NULL 的定义如下:

#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void*)0)
#endif // __cplusplus

故 NULL 在 C++ 中就代表 0,这是因为在 C++ 中 void* 类型是不允许隐式转换成其他类型的,所以用 0 来代表空指针,但在重载整形的情况下,会出现上述问题。
所以,C++ 加入了 nullptr,可以保证在任何情况下都代表空指针,而不会出现上述的情况。
故,建议以后使用 nullptr,不用 NULL。

上一篇下一篇

猜你喜欢

热点阅读