zoukankan      html  css  js  c++  java
  • C++11 nullptr

    【1】关于0 与 NULL

    【2】关于nullptr和void*的称法

    nullptr习惯被称作指针空值

    void*习惯被称作无类型指针

    【3】nullptr 和 nullptr_t

    nullptr习惯被称作指针空值

    nullptr_t习惯被称作指针空值类型

    即表示指针空值类型并非仅有nullptr一个实例

    可以通过nullptr_t来声明一个指针空值类型的变量

    除去nullptr以及nullptr_t以外,C++中还存在各种内置类型。

    C++11标准严格规定了数据间的关系。常见规则简单如下:

    1. 所有定义为nullprt_t类型的数据都是等价的,行为也完全一致

    2. nullprt_t类型数据可以隐式转换成任意一个指针类型

    3. nullptr_t类型数据不能转换为非指针类型,

    即使使用reinterpret_cast<nullptr_t>也是不可以的

    4. nullptr_t类型数据不适用算术运算表达式

    5. nullptr_t类型数据可以用于关系运算表达式,

    但仅能与nullptr_t类型数据或者指针类型数据进行比较

    当且仅当关系运算符为==,<=,>=等时返回true

    示例代码如下:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void fun(int n) { cout << "fun(int n) : " << n << endl; };
     5 void fun(int *p) { cout << "fun(int *p) : " << p << endl; };
     6 
     7 void main()
     8 {
     9     int nZero = 0;
    10     int nValue = NULL;        // ok
    11     int *pZero = 0;           // ok
    12     int *pNULL = NULL;        // ok
    13     int *pnullptr = nullptr;  // ok
    14     void *pEmpty = nullptr;   // ok
    15 
    16//  int nTemp = nullptr;   // error
    17     /*
    18     关于这条语句的编译错误提示信息如下:
    19     error C2440: “初始化”: 无法从“nullptr”转换为“int”
    20     本机 nullptr 只能转换为 bool 或 使用 reinterpret_cast 转换为整型
    21     */
    22     bool bIs = nullptr;
    23     int nTemp = reinterpret_cast<int>(nullptr);
    24 
    25     fun(0);        //--> fun(int n) : 0
    26     fun(NULL);     // -->fun(int n) : 0
    27     fun((int*)0);  // -->fun(int *p) : 00000000
    28     fun(nullptr);  // -->fun(int *p) : 00000000
    29 
    30     nullptr_t pnull;
    31     fun(pnull);    // -->fun(int *p) : 00000000
    32 
    33     char* pchar = pnull;
    34     int* pInt = pnull;
    35 
    36//  int n1 = pnull;
    37//  int n2 = reinterpret_cast<int>pnull;
    38 
    39     if (0 == nullptr)
    40     {}
    41//   if (nullptr)
    42//   {}
    43 
    44//  nullptr += 1;
    45//  pnull * 10;
    46 
    47     cout << sizeof(nullptr) << endl; // 4
    48 }

     

    Good Good Study, Day Day Up.

    顺序 选择 循环 总结

  • 相关阅读:
    vue使用百度统计埋点
    修改JAVA字节码
    由前序遍历和中序遍历构建二叉树-Python
    二叉树的最大深度-Python
    二叉树的层序遍历-Python
    判断是否是对称二叉搜索树
    什么是主动学习方法
    验证二叉搜索树-Python
    DevExpress如何汉化XAF
    python install 失败?
  • 原文地址:https://www.cnblogs.com/Braveliu/p/4263355.html
Copyright © 2011-2022 走看看