首页 > 编程语言 >C++ nullptr

C++ nullptr

时间:2023-01-03 10:22:15浏览次数:59  
标签:std int double void nullptr C++ 类型

nullptr表示指针,它的类型是std::nullptr_t(nullptr有类型!NULL没有类型),它是prvalue

  1. 可以看到nullptr经编译器生成的汇编代码会直接变为0,所以nullptr是一个有类型的常量0(注意有极个别的平台可能不为0,"Seriously, have any actual machines really used nonzero null pointers, or different representations for pointers to different types?"

  2. 还可以看到即便newanewint都初始化为nullptr,但是他们的地址是不同的

  3. 由于nullptr具有类型,所以可以作为模板和函数的参数

    template<class T>
    constexpr T clone(const T& t)
    {
        return t;
    }
    
    void f(std::nullptr_t)
    {
       std::cout << "null pointer overload\n";
    }
    
    int main()
    {
        clone(nullptr); // Fine
    //  clone(NULL);    // ERROR: non-literal zero cannot be a null pointer constant
    //  clone(0);       // ERROR: non-literal zero cannot be a null pointer constant
        f(clone(nullptr)); // Fine
    }
    
  4. nullptr可以隐式转换其他的指针

    void f(int) // f(nullptr) 编译错误
    void f(int*) // f(nullptr) 编译成功,隐式转换为int*
    void f(double*) // 如果同时存在f(int*)和f(double*),则编译报错[函数重载调用不明确]
    void f(std::nullptr_t) // 如果同时存在f(int*)和f(double*)和f(std::nullptr_t),则优先匹配f(std::nullptr_t)
    
  5. std::nullptr_t定义的不同变量有不同的地址

标签:std,int,double,void,nullptr,C++,类型
From: https://www.cnblogs.com/miyanyan/p/17021267.html

相关文章

  • C/C++ 开发总结 -- 【持续更新】
    此文章将记录我在C/C++开发过程中遇到的问题及相关知识技术点,方便自己以后查阅.....博客列表​​C++中vector结合迭代器实现增删操作!​​删除vector里面多个符合条件的......
  • c++多线程参数传递学习程序及随笔注释
    `#includeincludevoidf(inti,conststd::string&s){}voidoops(intsome_para){charbuffer[1024];sprintf(buffer,"%i",some_para);//!std::threadt(f......
  • c++文件基本操作
    c++:文件操作全解文本文件操作读文件类别作用ios::in打开一个文件用于读取ios::out打开一个文件用于写入ios::binary用二进制打开一个文件ios::app......
  • C++/python共享内存交换图片/文本信息
    共享内存保存读取图片OpenShare.cpp#include"OpenShare.h"//共享内存1,,C++发--python传递位姿与图像存储路径intkey_id=1111;intshmid;void*pBuffer;//共......
  • 2D Pose人体关键点实时检测(Python/Android /C++ Demo)
    2DPose人体关键点实时检测(Python/Android/C++Demo)目录​​2DPose人体关键点实时检测(Python/Android/C++Demo)​​​​1.人体关键点数据集​​​​(1)COCO数据集​​......
  • C++ | 3-需要函数对象的容器
    函数对象及其特化首先来讨论一下两个重要的函数对象,less和hash。们先看一下less,小于关系。在标准库里,通用的less大致是这样定义的:template<classT>structless......
  • 【C++高级编程】(三)面向对象设计
    本章内容:什么是面向对象的程序设计如何定义不同对象之间的关系抽象的重要性以及如何在设计中使用抽象()  3.1过程化的思考方式    3.2面向对象思想......
  • 【C++入门】(九)位运算与常用库函数
    一.位运算符号运算&与|或~非^异或>>右移<<左移常用操作:求x的第k位数字x>>k&1lowbit(x)=x&-x,返回x的最后一位1 二.......
  • 【c++】戴上耳机欣赏由代码演奏的音乐!
    戴上耳机欣赏由代码演奏的音乐!#include<iostream>#include<Windows.h>#pragmacomment(lib,"winmm.lib")usingnamespacestd;voidWind(){enumScale......
  • 【C++入门】(八)STL
    一. #include<vector>vector是变长数组,支持随机访问,不支持在任意位置O(1)O(1)插入。为了保证效率,元素的增删一般应该在末尾进行 1.1声明#include<vector>......