- 论坛徽章:
- 0
|
>> 那时候怎么也不明白为什么C++要引入引用,我坚持认为引用肯定有独特之处,之所以引入它,肯定是因为指针不够强大.
“引用肯定有独特之处”,这是肯定的;“之所以引入它,肯定是因为指针不够强大”,就不确切了。指针再强大,也有它照顾不到的地方;指针和引用也不是非此即彼的关系,它们有交叉,又有区别(自己独特的地方)。作为一个 C++ 程序员,要根据情况使用它们:有时用指针比较合适,有时非引用不可,有时又两者皆可用。
>> 后来写多了代码,我觉得这个玩意的引入完全是多余的,他所有的功能都可以被指针取代(实际上它也是用指针实现的).
参加下贴:
http://bbs.chinaunix.net/viewthr ... p;page=1#pid8249864
>> 比如最常用的 void fun(const Type& para)就可以用 void fun(const Type* p_para)取代.
不能完全取代。例如,对于前者可以这样调用 fun( Type() ),但是后者的调用要求实参必须是一个左值。
>> 我还见过类似 void fun(Type* & p)的代码,真是难看啊, void fun(Type ** pp)直接明了多了.
较之后者,我觉得前者的语义明确多了,不用象指针那样绕来绕去的。
>> 从实现上讲,引用和指针原本就是一回事。
不要人云亦云。引用和指针根本不是一回事,不论是语义上还是实现上。有这样的一个概念作为基础,更有助于你理解引用的本质。
>> 有人说一些引用无法被指针取代,比如拷贝构造函数云云,其实只要编译器支持,又怎么会取代不了?
基于值传递语义的对象拷贝构造函数事实上是实现不了的(或者说即使编译器允许这样的实现,也是不能被实际使用的),只能是基于引用语义的。
>> 有人说引用比指针安全,比如void func(int& p),p不会是空指针,但是如果别人要这么调用func(*(int*)NULL),两者又回到同一起跑线,其实安不安全主要取决于作者。
如果你不用指针的话,又何来 *(int*)NULL 这样的指针解引用的表达式呢?
当然,即使只用引用也可能会出现引用实际不存在的对象的情况,但是与指针比起来,这样的情况少多了。 |
评分
-
查看全部评分
|