指针(引用)返回值有什么作用?
函数中返回指针或引用有什么好处或用处呢,请高手们指点,最好能附上简短代码。若有精彩之轮分数还可以加(300分),谢谢各位了。
比如有如下程序:
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的值,就可以使用引用返回
例如有一个结构叫做
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我都是这样来测几种算法哪个更好的就用哪个,你也试试。