Avatar ·

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),一切正常,并调用指针版本。

解释