C++中 NULL 和 nullptr 的区别

在C++11及其后续版本中,NULL 和 nullptr 都是用来表示空指针的。但是它们有些许的区别:

  • NULL 是一个宏定义,通常被定义为0或者(void*)0。在C++11之前,NULL 被广泛用于指针值的初始化或比较操作。
  • nullptr 是一个关键字(keyword),是C++11引入的新特性。这个关键字的作用就是表示空指针,严格说 nullptr 不是一个整数类型也不是一个浮点数类型。
  • 两者的区别在于 nullptr 是类型安全的,而 NULL 不是

在某些情况下,使用 NULL 可能会导致编译器警告或错误。例如,在某些函数重载的情况下,使用 NULL 可能会导致函数调用的二义性。

使用 nullptr 可以避免这种二义性,同时也能提高代码的可读性和可维护性。因此在C++11及其后续版本中,建议使用 nullptr 来代替 NULL。

以下是一个示例程序,展示了使用 NULL 和 nullptr 的区别:

#include <iostream>
using namespace std;

void func(char* ptr) {
    cout << "Char pointer version\n";
}
void func(int ptr) {
    cout << "int version\n";
}
int main() {
    func(NULL);       // 无法通过编译,可能导致二义性
    func(nullptr);    // 仅调用char*版本
    return 0;
}

「总结」:NULL 在C++中就是0,这是因为在C++中void* 类型是不允许隐式转换成其他类型的,所以之前C++中用0来代表空指针,但是在重载整形的情况下,会出现上述的问题。所以,C++11加入了 nullptr,可以保证在任何情况下都代表空指针,而不会出现上述的情况,因此,建议在新的代码中应该尽可能使用 nullptr 来表示空指针,而避免使用已经过时的 NULL 宏定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值