C++ 面试题 目录

C++11 中 nullptr 的作用是什么?

推荐答案

在 C++11 中,nullptr 是一个关键字,用于表示空指针常量。它用于替代 NULL0,以解决在函数重载和模板推导中可能出现的歧义问题。nullptr 的类型是 std::nullptr_t,它可以隐式转换为任何指针类型。

本题详细解读

1. nullptr 的背景

在 C++11 之前,程序员通常使用 NULL0 来表示空指针。然而,NULL 通常被定义为 0(void*)0,这会导致在某些情况下出现歧义。例如,在函数重载时,编译器可能无法区分 0 是表示空指针还是整数。

2. nullptr 的优势

  • 类型安全nullptr 的类型是 std::nullptr_t,它可以隐式转换为任何指针类型,但不会隐式转换为整数类型。这避免了在函数重载时可能出现的歧义。
  • 代码清晰:使用 nullptr 可以使代码更加清晰,明确表示这是一个空指针,而不是整数或其他类型的值。

3. 示例代码

在这个例子中,func(0) 会调用 func(int),而 func(nullptr) 会调用 func(char*)。如果没有 nullptrfunc(0) 的调用可能会引起歧义。

4. nullptrNULL 的区别

  • NULL 通常被定义为 0(void*)0,而 nullptr 是一个类型安全的空指针常量。
  • nullptr 可以避免在模板推导和函数重载中的歧义问题,而 NULL 可能会导致这些问题。

5. 总结

nullptr 是 C++11 引入的一个重要特性,它提供了类型安全的空指针表示方式,避免了在函数重载和模板推导中可能出现的歧义问题。使用 nullptr 可以使代码更加清晰和安全。

纠错
反馈