返回信息流template <class T>
T& LinkedList<T>::Data(void)
{
T data;
data = CurrPtr->date;
return data;还是 return &data;
}
如果是return data 那为什么是T& LinkedList<T>::Data(void) 返回T类型的引用?
他和T LinkedList<T>::Data(void)有什么区别?
如果是return &data 返回的不就是data的地址了吗?
或者这个函数应该写成
template <class T>
T& LinkedList<T>::Data(void)
{
return CurrPtr->date;
}
偶太笨了 理解不了引用 请高人指点
这是一条镜像帖。来源:北邮人论坛 / cpp / #43693同步于 2010/9/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求指点C++中的引用
salooloo
2010/9/10镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
完全不懂模板。。。不过你这个问题和模板没关系。。恩。。就是返回引用啊。。就是一种返回类型。。
举个例子:int a=3;
int b =a; int &c=a;
printf("%d %d",b,c);
结果的话 3 3
粗看的话,好像是一样的。。。其实不一样,在上面的过程中,给b分配了空间,然后把值赋给b,但是并没有给c分配空间,只是给a起了个别名,就想一个人的外号一样。
上面那个&表示引用,和取地址是一个符号,但是含义不一样。
个人理解,引用的概念是为了避免指针的出现吧,貌似因为按照自然语言得表达,一般都是用实体本身的属性,而用指针指向与自然语言有点违背..你可以简单的把它当成把实体本身返回,而不是复制返回, 举个例子void pass(T a) 和void pass(T &a)的区别,前者的a是在内存里复制一个a,在pass()函数中修改a只是修改a的副本,而pass(T &a)则是把a的本体传给pass函数,你修改了a,就相当于修改了a的实体,在c语言中如果要修改a的本体,你会这么调用T a; pass(&a); 在pass(T *a)函数中你会这么写a->property,而如果你是引用类型则就可以这么写 T a; pass(a); 在pass(T &a)函数中你会这么写a.property 后者看起来更符合自然语言的表达
个人觉得你的程序本身就有问题,从语法来说应该是return data;
但是因为data是在栈中分配的空间,当函数返回时,返回的应用指向的空间事实上已经被回收,
所以可以写成
template <class T>
T& LinkedList<T>::Data(void)
{
T &data = CurrPtr->date;
return data;
}
引用在使用中与其代表的实际变量语法一致,所以return data能够被正确解析为引用类型。
但是,你这个函数肯定完蛋,返回的变量没有作用域了。
恩 了解了 函数犯了一个错误:返回了局部变量的引用。
所以应该用
template <class T>
T& LinkedList<T>::Data(void)
{
return CurrPtr->date;
}
谢谢各位