读书人

关于指针与引用解决思路

发布时间: 2012-03-21 13:33:15 作者: rapoo

关于指针与引用
请问各位高手
在给函数传递参数时,什么时候传指针还是引用,它们各有什么优点

[解决办法]
首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。
“但是,请等一下”,你怀疑地问,“这样的代码会产生什么样的后果?”
char *pc = 0; // 设置指针为空值
char& rc = *pc; // 让引用指向空值
这是非常有害的,毫无疑问。结果将是不确定的(编译器能产生一些输出,导致任何事情都有可能发生)。应该躲开写出这样代码的人,除非他们同意改正错误。如果你担心这样的代码会出现在你的软件里,那么你最好完全避免使用引用,要不然就去让更优秀的程序员去做。我们以后将忽略一个引用指向空值的可能性。
以上内容引自More Effective C++条款1
[解决办法]
在c++标准里面确实禁止在引用定义时不加初始化,问题是,如果有些人不知道这个,而且
在旧的编译器里面试验的时候,不初始化的引用不会引起编译错误,可能只是一个警告,甚至
在一些特殊的编译器里面,会把未初始化引用定义成类似于空指针的东西,在一些既有的企业级
代码中甚至利用这样一种特性,在一些应用的上下文中,这个特性是有价值的。——这样的系统,
当然你可以去全部改成指针,问题是,需要时间,许多许多的时间,这样一来,企业宁可使用
原来那个老古董编译器,对原有代码作一些简单修改,而不是全盘重写,因为重写这些代码的
代价太大。

标准与实现是有差距的,只能是尽量提倡有益的东西,但有时候别一棍子打死,有许多原有代码
需要维护的,绝对符合标准的C++编译器,据我所知,目前应该没有,即便学院式的编译器,
也只能做到99%或者99.9%

读书人网 >C++

热点推荐