BOOL、bool的区别 && NULL、0、nullptr的区别

本文详细介绍了BOOL和bool在类型、长度及取值上的区别,以及NULL、0和nullptr在C++中的定义、使用原因和潜在问题。NULL由于可以被误解析为整型,可能导致调用错误的函数重载,推荐使用0作为空指针。C++11引入的nullptr解决了类型安全问题,避免了类型转换的潜在风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、BOOL、bool

1、类型不同

bool为布尔型、 BOOL为int型

2、长度不同

bool只有一个字节、BOOL为 int 因此长度根据实际环境来定,一般为4个字节

3、取值不同

bool取值 0为 false 、 非0为true;

BOOL取值 0 为false、1为true;


二、NULL、0、nullptr

1、定义不同

c语言中 NULL被定义为 #define NULL ((void *)0)

c++中NULL被定义为 #define NULL 0

nullptr是C++11中定义的

一般编译其的头文件会这么定义

#ifdef __cplusplus

#define NULL 0

#else

#define NULL ((void *)0)

#endif

2、原因

因为c++中不能将void *类型指针隐式转换成其他类型的指针类型,为了解决空指针的问题,所以引入了0来表示空指针。

但是在使用的过程中会出现问题,如:

有两个重载函数:

1、void function( type1 a, type2 *b);

2、void function( type1 a, int i);

当我们使用NULL的时候,因为NULL是0,所以会调用第二个函数,但我们实际上用的是空指针因此我们会做强制转换成

function(a, static_cast<type2 *>(NULL))、function(a, static_cast<type2 *>(0))让代码能够运行。

如上面所示如果两个函数同时存在的时候,我们能够发现有错误而会修改,

但是如果只存在1,而在自己重载的时候会在调用的时候,使用NULL,会出现错误,

而在检察的时候写的是NULL,并不容易检察出来需要强制转换。

因此在大多数c++的书籍当中会推荐使用0作为空指针。

3、nullptr

在没有c++11的时候我们可以自己实现一个《Imperfect c++》上面有一个实现

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

目前vs2010支持nullptr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值