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.

    顺序 选择 循环 总结

  • 相关阅读:
    Visual Studio使用阿里云Code Git服务器的常见问题
    使用Quartz.net来执行定时任务
    DirectorySearcher.Filter 属性(转)
    angular2的ElementRef在组件中获取不到
    angular2 ngfor循环
    angular2 日期格式化
    angular2在模板中使用属性引发Cannot read property 'xxx' of undefined
    Java ConcurrentHashMap存入引用对象时也是线程安全的
    FtpHelper实现ftp服务器文件读写操作(C#)
    Window服务项目脚手架
  • 原文地址:https://www.cnblogs.com/Braveliu/p/4263355.html
Copyright © 2011-2022 走看看