C++ nullptr 的一种实现

C/C++ 程序员都应该了解NULL, 0, nullptr,  NULL表示空指针,即指针不指向任何对象,C++11后有多了nullptr更好是表了这类概念,看看nullptr是如何实现的:

const

class nullptr_t

{

public:

  template<class T>

  inline operator T*() const

  {return 0;}

  template<class C, class T>

  inline operator T C::*() const

  {return 0;}

private:

  void operator&() const;

}nullptr = {};

时间: 2024-09-29 20:46:59

C++ nullptr 的一种实现的相关文章

删除单链表节点,时间复杂度为O(1)

一个编程练习,删除单链表一个节点,且时间复杂度控制在O(1)内. 1.核心操作代码如下: struct ListNode { int m_data; ListNode *m_pNext; }; void DeleteNode(ListNode **pListHead, ListNode *pToBeDeleted) { if(pListHead == NULL || pToBeDeleted == NULL) return; //=================================

C++ Primer 笔记之指针和引用

引用必须初始化 因为引用本身不是一个对象,所以不能定义引用的引用 引用的定义 允许在一条语句中定义多个引用,其中每个引用标识符都必须以符号&开头: int i=1024, i2=2048; //i和i2都是int int &r=i, r2=i2; //r是一个引用,与i绑定在一起r2是int int i3=1024, &ri=i3; //i3是int,ri是一个引用,与i3绑定在一起 int &r3=i3, &r4=i2; //r3和r4都是引用 int &

【Cracking the Code Interview(5th edition)】二、链表(C++)

链表结点类型定义: 1 class Node { 2 public: 3 int data = 0; 4 Node *next = nullptr; 5 6 Node(int d) { 7 data = d; 8 } 9 }; 快行指针(runner)技巧: 同时使用两个指针来迭代访问链表,其中一个比另一个超前一些.快指针比慢指针先行几步或者快指针与慢指针的速度呈一定的关系. dummy元素技巧: 在链表头部添加一个哑结点,通常可以简化首部或尾部的特殊情况的处理. 2.1 编写代码,移除未排序链

指针和引用中一些要注意的问题

引用 引用为对象起了另外一个名字,引用类型引用另外一个类型.通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名: int ival=1024: int &refval=ival:   //refval指向ival(是ival的另一个名字) int &refval2:     //报错:引用必须初始化 一般在初始化变量的时,初始值会被拷贝到新建的对象中.然而定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用.一旦初始化完成,引用将和它的初始值对象一直绑

C++ Prime:指针

指针与引用的区别:1.指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象:其二:指针无需在定义时赋值.指针在块作用域内定义如果没有被初始化,也将拥有一个不确定的值. 空指针: 得到空指针最直接的办法就是用字面值nullptr来初始化指针,这是C+ 11新标准刚刚引入的一种方法.nullptr是一种特殊类型的字面值,可以被转换成任意其他的指针类型.另外一种方法就是通过指针初始化为字面值0来生成空指针. 有时候还会用到一个名为NULL的预处理变量来给指针赋

引用和指针初探

引用 &(左值引用--Lvalue reference) 引用即别名(并非对象),引用是一个对象的另外一个名字,且只能是一个对象,所以引用必须被初始化,一但初始化后便不能再改变引用的值,因为引用是很专一的. 一般在初始化变量时,初始值会被拷贝到新建的对象中,然而引用只是把它和它的初始值绑定在一起,并不是将初始值拷贝给引用.所以在调用引用的时候能加快程序的运行速度. 引用和取地址符的区分: 引用一般出现在声明语句中,紧跟类型名:取地址符出现在表达式的右边,是一个运算符. int i = 42; i

C++ Primer(第五版) 第二章 基本内置类型

容易忘记的部分: 2.1:C++提供的几种字符串类型有哪些及其用途? 基本的字符类型char,一个char的类型和一个机器字节一样 其他字符类型用于拓展字符集,如wchar_t.char16_t.char32_t wchar_t类型确保可以存放机器最大拓展字符集中的任意一个字符 char16_t和char32_t则为Unicode字符集服务 2.2:如何选择所使用的类型 当数值不为负数时,使用无符号类型(unsigned) 一般常用int和long long执行整数的运算 算术表达式中不使用ch

复合类型

复合类型(compound type)是指基于其他类型定义的类型,C++语言有几种复合类型,这里只介绍两种:引用和指针 一:引用 引用(reference)为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名. int ival = 1024 int &refval = ival://refval指向ival(是ival的另外一个名字) int &refval2:  //报错,引用必须初始化 一般在初始化变量的时候,初始值

ARTS打卡计划第一周

Algorithms: https://leetcode-cn.com/problems/two-sum/ Review: https://www.infoq.cn/article/EafgGJEtqQTAa_0sP62N Q版本,慢慢雏形已经出来. Tips: c++11 : 1.nullptr   是一种特殊类型的字面值, null 指针常量,可以转换成任意其他指针类型,是一个关键字.之前的NULL是一个预处理变量,需要单独引入头文件cstdlib,其值也是0. #ifdef __cplus