空指针

来源:互联网 发布:excellentexport.js 编辑:程序博客网 时间:2024/04/28 09:39

什么是空指针:

《c++的设计和演化》中有这么一段描述空指针:

一个能求出0值的常量表达式被转换为一个指针,通常称为空指针。这个值产生的指针保证能与任何对象或函数指针相区分。

但AMR进一步警告说:空指针不一定用与整数0同样的二进制模式表示。

 

我的理解是这意味0能表示空指针,但反过来则不成立,即空指针不一定要是0,比如用 (2-2), ~-1。

(演化中进一步又说实际上用它们给指针赋值却是个类型错误,但我用codelite编译是通过的。可能现在的编译器已经按照标准实现了)

 

空指针怎么定义:

又在c中可以这样定义空指针

#define NULL (void*)0

但这样在c++中却不行,因为c++不允许把void*赋值给其他类型指针。

 

Bjarne进一步写到他自己的做法就是简单的用0来表示空指针。但无论如何,这样都会遇到下面的问题:

考虑

void f(char*)

void g() {f(0);}  //calls f(char*)

 

现在加上另一个

f(int)就会改变g()的行为。

void g() { f(0);} //calls f(int)

 

这个又能怎么办呢?Bjarne是这样说的:“我的一个朋友认识到:‘如果0就是他们最糟糕的问题,那么他们太幸运了’”

呵呵。。。

 

原创粉丝点击