首页 > 其他分享 >nullptr关键字

nullptr关键字

时间:2023-12-04 17:14:26浏览次数:28  
标签:const 定义 void nullptr C++ 关键字 NULL

文章参考:爱编程的大丙 (subingwen.cn)

C使用NULL表示空,其定义为:

#define NULL ((void *)0)

在C++中同样定义了NULL,C和C++虽然都是强类型语言,但是C++对语言的要求更高,不允许(void *)类型进行隐式的类型转化,因此如果沿袭C中NULL的定义,那么下述代码会出错:

int *p = NULL;

因此C++对NULL进行了新的定义:

#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif

也就是说,如果定义了__cplusplus宏,那么NULL就是0,否则就依旧是((void *)0),因此在C++中,NULL实际上就是0。

但是,如果令NULL==0,有时会产生二义性,例如如下代码:

#include <iostream>
using namespace std;

void func(void* i){cout << "func1" << endl;}
 
void func(int i){cout << "func2" << endl;}
 
void main(int argc,char* argv[])
{
	func(NULL);
	getchar();
}

这时会输出:func2。显然,二义性产生了。

为了解决这一问题,我们可以使用如下定义:

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 = {};

而在C++11中,定义了nullptr,使用它来表示空指针。

总之,在C++中,如果要表示空指针,建议使用nullptr而不是NULL

标签:const,定义,void,nullptr,C++,关键字,NULL
From: https://www.cnblogs.com/beasts777/p/17875407.html

相关文章

  • c++ friend关键字 友元
     在C++中,friend关键字用于声明友元函数或友元类1。友元函数或友元类可以访问当前类的私有成员和保护成员,即使它们不是当前类的成员函数或成员类1。友元函数是一个独立的函数,而友元类是一个类可以访问另一个类的私有成员和保护成员1。例如,如果要声明函数为一个类的友元,需要......
  • 学C笔记归纳 第四篇——static关键字(重点)
    C语言本身内置了关键字,并非自己创建,也不能自己创建。static的功能:static功能修饰局部变量转变储存位置,延长局部变量生命周期,也可以保持其值不变修饰全局变量将外部链接属性变为内部连接属性,使作用域变小,其他源文件(.c)就不能再使用这个全局变量了,增加程序安全性模块内函......
  • centos查看日志文件内容,包含某个关键字的前后5行日志内容
    简述centos查看日志的几种方法centos查看日志文件内容,包含某个关键字的前后5行日志内容前情提示系统:一说部分截图、链接等因过期、更换域名、MD语法等可能不显示,可联系反馈(备注好博文地址),谢谢❤带有#号、删除线、不操作、不执行字样的为提示或者备份bash,实际不执行如果无法下载......
  • 【PUSDN】centos查看日志文件内容,包含某个关键字的前后5行日志内容,centos查看日志的几
    简述centos查看日志的几种方法centos查看日志文件内容,包含某个关键字的前后5行日志内容前情提示系统:一说部分截图、链接等因过期、更换域名、MD语法等可能不显示,可联系反馈(备注好博文地址),谢谢❤带有#号、删除线、不操作、不执行字样的为提示或者备份bash,实际不执行如果无法下载......
  • Angular Component 内 set 关键字的使用
    "set"关键字在Angular组件的TypeScript代码中通常用于创建和定义类的属性的setter方法。它是一种特殊的方法,负责设置类的私有成员变量的值。通过使用"set"关键字,我们可以在设置属性值时执行一些额外的逻辑,如输入验证、触发事件等。让我们通过一个简单的例子来说明"set"关键字的......
  • 关键字 开发-09 validate断言
    1.yaml文件中添加validate进行接口断言首先我们在utils/validate.py文件添加需要的断言方式importredefequals(check_value,expect_value):assertcheck_value==expect_value,f'{check_value}=={expect_value}'defless_than(check_value,expect_value):......
  • 关键字 开发-08 extract提取返回的结果
    1.extract提取请求返回结果的返回值在进行接口自动化的时候,往往需要提取上一个接口返回的值,传递给下一个接口使用。创建utils/extract.pyimportjsonimportreimportjsonpathimportjmespathfromutilsimportexceptionsfromrequestsimportResponsedefextract_b......
  • instanceof关键字
    instanceof用于判断类型eg:catinstanceofAnimal判断该对象引用,是否是为该类型(自身类、自身类父类、Object)都是返回true,其他情况返回falseeg:strinstanceofString例子AnimalParent类publicclassAnimalParent{}Cat类publicclassCatextendsAnimalParent......
  • SQL 关键字执行顺序
    1.FromandJOIN首先我们进行查询的时候,肯定是先获得一份数据集的,From语句和JOIN被先执行的,就是为了获得数据集的。2.WHERE一旦数据集给拿到了,WHERE限制条件会被用到某些行上,并把不满足的行给抛弃掉。并且,这能够用到各种数据类型中3.GROUPBYWHERE条件限定之后,接下来就是GRO......
  • C++ 11 关键字:thread_local
    thread_local是C++11新引入的一种存储类型,它会影响变量的存储周期。C++中有4种存储周期:automaticstaticdynamicthread有且只有thread_local关键字修饰的变量具有线程(thread)周期,这些变量在线程开始的时候被生成,在线程结束的时候被销毁,并且每一个线程都拥有一个独......