了解如何在强制类型中定义NULL

ZDNet软件频道 时间:2003-08-06 作者:ZDNet China |  我要评论()
本文关键词:cpptips
在C中,你可以很容易的给指针赋以数字值或者混合不同类型的指针。C++的创造者为了回避这个混乱的局面,因为它可能会在运行时造成一些让人难以理解的错误。因此,C++的指针是强制类型。
本文译自Builder.com,未经许可请勿转载看C的历史,它并没有产生强制类型的指针。在C中,你可以很容易的给指针赋以数字值或者混合不同类型的指针。C++的创造者为了回避这个混乱的局面,因为它可能会在运行时造成一些让人难以理解的错误。因此,C++的指针是强制类型。

因此C和C++定义NULL是不同的。C++的编写者必须一定NULL好像0或0L。比如:

// C++ implementations usually define NULL this way
#define NULL 0
#define NULL 0L

对比C,C的编写者可以定义NULL为各种形式,包括一下这种:

// C compilers may define NULL this way
#define NULL ((void*)0)

在C++中,没有明白的造型,void*是不会隐讳的转换成为其他类型的指针。如果C++保留C的习惯,如C++的语句为:

char * p = NULL;

可以扩大为:

//compile time error: incompatible pointer types
char * p = (void*) 0;

但是在C++中,void*的隐含模式允许为其他的数据指针。在优先表示NULL中,C++通常用0好过void类型的指针。事实上,C++鼓励用0代替NULL。例如:

int *p=0;
string *ps=new string;
delete ps;
ps=0; //mark ps as deleted

尽管这两种NULL的表示方法的区别对于用户来说不是那么重要,但是在交叉式平台的开发中,这两种方法的区别是很重要的。



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134