Avatar ·

C++中的null/nil是什么以及如何使用?

问题:C++中的null/nil是什么以及如何使用?

各位同事,大家好!我从Python和Java转到C++,一直无法理解这个语言中null/nil的概念。Python中有None,Java中有null,而在C++中我遇到了nullptr、NULL和单纯的0。它们是同一个东西吗?在什么情况下该用哪个?

我尝试写过这样的代码:

#include <iostream>

void foo(int* ptr) {
    if (ptr == NULL) {
        std::cout << "Pointer is NULL" << std::endl;
    }
}

int main() {
    int* p = nullptr;
    foo(p);
    return 0;
}

代码可以编译,但我不确定这样是否正确。另外我还听说过std::optional——这完全是另一回事吗?还是说它是null的现代替代品?希望能得到清晰的解释:以上哪些是C++中的“空指针”,如何正确地将指针初始化为“空”,以及C++中是否有Java/Python中null对于引用(而非指针)的对应物?如果能提供nullptr和NULL的示例,我将不胜感激。