nullptr

作者: CentForever | 来源:发表于2021-02-25 16:15 被阅读0次

decltype 用于类型推导,而 std::is_same 用于比较两个类型是否相同.

#include <iostream>
#include <type_traits>

void foo(char *);
void foo(int);

int main() {
    if (std::is_same<decltype(NULL), decltype(0)>::value)
        std::cout << "NULL == 0" << std::endl;
    if (std::is_same<decltype(NULL), decltype((void*)0)>::value)
        std::cout << "NULL == (void *)0" << std::endl;
    if (std::is_same<decltype(NULL), std::nullptr_t>::value)
        std::cout << "NULL == nullptr" << std::endl;

    foo(0);          // 调用 foo(int)
    // foo(NULL);    // 该行不能通过编译
    foo(nullptr);    // 调用 foo(char*)
    return 0;
}

void foo(char *) {
    std::cout << "foo(char*) is called" << std::endl;
}
void foo(int i) {
    std::cout << "foo(int) is called" << std::endl;
}

将输出:

foo(int) is called
foo(char*) is called

结论

  • NULL 不同于 0 与 nullptr。所以,请养成直接使用 nullptr的习惯。
  • C++11 引入了 nullptr 关键字,专门用来区分空指针、0。而 nullptr 的类型为 nullptr_t,能够隐式的转换为任何指针或成员指针的类型,也能和他们进行相等或者不等的比较。
  • nullptr 出现的目的是为了替代 NULL。在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0。

参考

https://changkun.de/modern-cpp/zh-cn/02-usability/index.html

相关文章

  • 语言可用性的强化

    2.1 常量 nullptr关键字,专门用来区分空指针、0。而nullptr的类型为nullptr_t,能够隐式的...

  • 现代c++笔记(1)

    variadic templates(数量不定的模板参数) nullptr c++11 使用nullptr替代NU...

  • nullptr

    nullptr 空指针:从 0 到 NULL,再到 nullptr NULL 是一个宏定义: 引起该问题的原因是 ...

  • nullptr

    decltype 用于类型推导,而 std::is_same 用于比较两个类型是否相同. 将输出: 结论 NULL...

  • C++11的新特性

    空指针 nullptr 空指针的字面值常量,它的类型是std::nullptr_t(定义位于cstddef) 自动...

  • jni如何抛出异常

    if((filename == nullptr) || !OS::FileExists(filename)) { ...

  • C++11新特性

    1.auto关键字。 2.nullptr关键字和std:nullptr类型。 3.基于范围的for循环 range...

  • C++11/14新特性

    1.nullptr nullptr 出现的目的是为了替代 NULL,传统 C++ 会把 NULL、0 视为同一种东...

  • C++11新特性(2)

    1.空指针nullptr nullptr与NULL的区别:对于NULL,是一个空指针常量,如果将NULL扩展为常数...

  • nullptr(转)

    引入nullptr的原因引入nullptr的原因,这个要从NULL说起。对于C和C++程序员来说,一定不会对NUL...

网友评论

      本文标题:nullptr

      本文链接:https://www.haomeiwen.com/subject/dramfltx.html