C++中的nullptr关键字:它比NULL好在哪里以及如何正确使用
大家好。我最近开始学习C++,对空指针感到困惑。在旧教材和论坛上经常看到NULL,而在新示例中我看到nullptr。似乎两者都表示指针的“空”,但编译器有时会对NULL报错。
下面是一个让我困惑的例子。我写了一个接受int指针的函数:
void print(int* ptr) {
if (ptr == NULL) {
std::cout << "指针为空" << std::endl;
} else {
std::cout << *ptr << std::endl;
}
}
void print(int value) {
std::cout << "整数:" << value << std::endl;
}
当我调用print(NULL)时,编译器(使用-std=c++17标志的GCC)会发出警告甚至错误,指出调用有歧义。但如果我写print(nullptr),一切正常,并调用指针版本。
解释