📅  最后修改于: 2023-12-03 15:21:39.315000             🧑  作者: Mango
在C++11标准中,新增了关键字nullptr
,用于表示空指针。它的引入是为了解决旧标准中对于空指针的模棱两可的表达式,如下:
int* p = NULL; // 可编译通过
int* q = 0; // 可编译通过
上述代码中,NULL
在C++中实际上被定义为0,因此p
和q
实际上都是指向空地址的指针。
使用nullptr
既能够保留对于空指针的明确语义,又能够避免由于传递0常常导致的潜在bug。
使用nullptr可以显式地声明空指针。
int* p = nullptr;
这样的声明在代码中更为清晰地表达了指针变量为空的语义。
nullptr可以和普通指针进行隐式或显式的类型转换。
int* p = nullptr;
void* q = nullptr;
通过上述代码,可以看到nullptr在指针类型转换方面的灵活性。
nullptr也可以隐式转换为布尔类型,在if语句等上下文中能够起到更加明确的判断作用。
int* p = nullptr;
if (p) {
std::cout << "p is not null" << std::endl;
} else {
std::cout << "p is null" << std::endl;
}
上述代码中,if语句的判断条件为nullptr。因为nullptr可以被隐式转换为false,所以最终输出结果为“p is null”。
nullptr可以和其它各种指针类型进行比较,表达指针是否为空的语义。
int* p = nullptr;
int* q = new int(42);
if (p == nullptr) {
std::cout << "p is null" << std::endl;
} else {
std::cout << "p is not null" << std::endl;
}
if (q != nullptr) {
std::cout << "q is not null" << std::endl;
} else {
std::cout << "q is null" << std::endl;
}
上述代码中,分别展示了nullptr与空指针和非空指针的比较方法。
使用nullptr可以使得代码中对于空指针的语义更加明确和清晰,同时能够有效地避免由于传递0等常量导致的潜在错误。建议在编写C++代码时尽量使用nullptr,以增加代码的可读性和可靠性。