C++ NULL 和 nullptr 有什么区别?

Viewed 96

如题所问,在C++ 中:

int* a = NULL;
int* b = nullptr;

有什么区别?

1 Answers

在C++中,NULL和nullptr都用于表示空指针。然而,它们是不同的概念。

NULL是C++早期用于表示空指针的预处理器宏。在早期的C++标准中,NULL被定义为整数0。虽然在许多编译器中,将NULL定义为整数0的问题已经得到了解决,但为了向后兼容性,NULL仍然可以用于表示空指针。但是,NULL可能会在某些情况下导致问题,例如当使用重载函数时,因为NULL被定义为整数0,而整数0也可以被解释为整型、字符型或浮点型。

nullptr是C++11中引入的新关键字,用于表示空指针。它不是预处理器宏,而是一个真正的关键字。它的类型是nullptr_t,只能被用作指针类型。使用nullptr可以避免NULL的一些问题,因为nullptr只能被解释为指针类型,不会被解释为整数类型。