【现代C++】nullptr用法

在这里插入图片描述

在C++11之前,NULL被用来表示空指针,但它只是一个宏,定义为0((void*)0),这在某些情况下可能会导致类型混淆和错误。为了解决这些问题,C++11引入了nullptr关键字,它是一种特殊的空指针字面量,具有自己的类型nullptr_t,可以自动转换为任何指针类型,但不会转换为非指针类型。

1. 基本用法

使用nullptr来初始化或赋值给指针。

int *ptr = nullptr;

2. 与函数重载一起使用

nullptr可以帮助解决函数重载中的歧义问题,特别是涉及到指针和整数类型的重载。

void func(int) {
    std::cout << "func(int) called" << std::endl;
}

void func(int*) {
    std::cout << "func(int*) called" << std::endl;
}

func(nullptr);  // 调用func(int*)

3. 与智能指针一起使用

在使用智能指针如std::unique_ptrstd::shared_ptr时,nullptr可用于表示空指针。

std::unique_ptr<int> uptr = nullptr;

4. 比较操作

nullptr可以与任何指针类型进行比较。

int* p = nullptr;
if (p == nullptr) {
    std::cout << "p is null" << std::endl;
}

5. 作为函数返回值

当函数需要返回指针类型时,可以使用nullptr来表示空指针或无结果的情况。

int* func(bool flag) {
    if (flag) {
        return new int(42);
    }
    return nullptr;
}

6. 在模板中使用

nullptr在模板代码中特别有用,因为它提供了一种类型安全的方式来表示空指针,适用于任何指针类型。

template<typename T>
void check(T* ptr) {
    if (ptr == nullptr) {
        std::cout << "Pointer is null." << std::endl;
    } else {
        std::cout << "Pointer is not null." << std::endl;
    }
}

通过上述示例可以看到nullptr在现代C++中的多种用途。它提供了一种类型安全的方式来表示和处理空指针,从而减少了与旧的NULL宏相关的问题和潜在的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值