指针(引用)返回值有什么作用?

函数中返回指针或引用有什么好处或用处呢,请高手们指点,最好能附上简短代码。若有精彩之轮分数还可以加(300分),谢谢各位了。
[62 byte] By [yemagxy-把酒言欢] at [2007-12-10]
# 1
反回指针可以反回多个数据
# 2
是为了提高效率
减少对象创建和销毁的次数

有时也是逻辑上的需要,比如赋值函数一般都要求返回一个引用
satty-satty at 2007-10-14 > top of Msdn China Tech,C/C++,C语言...
# 3
谢谢: apple21(ak47)
也谢谢:satty(satty)
请问:satty(satty),可否讲的详细些,能否以代码来解释,麻烦了。
yemagxy-把酒言欢 at 2007-10-14 > top of Msdn China Tech,C/C++,C语言...
# 4
相对于调用动态链接库中的函数,还是使用指针比较好。
xianshen-先生 at 2007-10-14 > top of Msdn China Tech,C/C++,C语言...
# 5
比如有如下程序:

struct A
{
A() { cout << "构造" << endl ; }
A(A & a) { cout << "复制构造" << endl ; }
} ;

A fun1()
{
static A obj;
// ...
return obj ;
}

A & fun2()
{
static A obj;
//...
return obj ;
}

A * fun3()
{
static A obj;
//...
return &obj ;
}

void main()
{
A o ;
A * p ;

cout << "调用1" << endl ;
o = fun1() ;
cout << "调用完毕" << endl ;

cout << "调用2" << endl ;
o = fun2() ;
cout << "调用完毕" << endl ;

cout << "调用3" << endl ;
p = fun3() ;
cout << "调用完毕" << endl ;
}

可以看出来返回指针和引用避免了复制构造函数的调用,而引用返回最常用的是在操作符重载时。比如重载[]操作符,我们希望用object[index]来改变member的值,就可以使用引用返回
tief-但求中庸 at 2007-10-14 > top of Msdn China Tech,C/C++,C语言...
# 6
例如有一个结构叫做
MyStruct (假设他的size很大)

MyStruct myFunc(void)
{
MyStruct MS;
....
return MS;
}
上面这段,当系统返回MS时,先把MS copy一份到他所起的名字中(所谓匿名变量),再给你返回,再detroy MS(也就是popup stack)这样就浪费很多资料,中间多了一个copy过程

MyStruct &myFunc(void)
{
MyStruct MS;
....
return MS;
}
当系统返回MS时,不会把MS copy一份,提高效率

你可以用时间来算两者的速度。。
用for循环10000次,记下时间。看看两个相差多少,你就知道哪个效率高了。
特别是做大型的项目时,一些主要function我都是这样来测几种算法哪个更好的就用哪个,你也试试。
tokens-拓垦士 at 2007-10-14 > top of Msdn China Tech,C/C++,C语言...
# 7
当函数返回引用时,其返回值返回一个隐含指针。
#include <iostream.h>
double &f();
double val=98.6;

main()
{
double newval;
cout<<f()<<"\n";
newval=f();
cout<<newval<<endl;
f()=100;
cout<<f()<<endl;
return 0;

}

double &f()
{
return val;
}

输出:
98.6
98.6
100
freefighter-自由戰士 at 2007-10-14 > top of Msdn China Tech,C/C++,C语言...
# 8
我认为用他们反回的值不能做左值
ufo00-裸奔的公鸡 at 2007-10-14 > top of Msdn China Tech,C/C++,C语言...