关于 类成员函数返回指向const临时变量的引用

成员函数使用const引用常见原因是为了提高程序效率(若返回对象则会调用复制构造函数,而返回引用不会。)

eg:

Vector force1 (50.60);

Vector force2 (10,70);

Vector max;

max=Max(force1,force2);

返回对象实现:

方法1:返回对象将调用复制构造函数以赋值给Max

Vector Max (const Vector &v1,const Vector &v2)

{

  if (V1.magval()>v2.magval())

      return v1;

  else

      return v2;

}

方法2:这里要注意引用指向的Max已经在定义过。

const Vector & Max (const Vector &v1,const Vector &v2)

{

  if (V1.magval()>v2.magval())

      return v1;

  else

      return v2;

}

那么引出思考,弱返回指向的引用是未声明定义的临时变量会如何。如const Vector & Max_temp()


这里我们做一个实验:

#define  _PAUSE  cout << "暂停,按任意键..." << endl;\
                         getche();

class A
{
private:
long _la;
public:
A(){_la = 9;}
~A()
{
cout<< "析构" <<endl;
}
void show(void) const 
{
scout << "@: " << _la << endl;
}
};


A func(void)
{
A a;            //局部变量;
return a;   //以a考贝建构临时对象,假定名为_a_temp!
                 //a的生命期在这儿终止,你将看到函数结束后,析构a!
}

void main()
{
{
const A &ref=func();
ref.show();             //这个函数演示出引用的临时变量仍具生命力!
_PAUSE;
                               //ref引用变量的生命期终止,ref引用的临时对象在这儿析构!
}
_PAUSE;
}

最终运行结果如下:

析构                                                   //a的生命期在这儿终止,你将看到函数结束后,析构a!

@:9                                                 //可以传递a的值,说明这个函数演示出引用的临时变量ref仍具生命力!

暂停,按任意键..(任意键)

析构                                                   /ref引用变量的生命期终止,ref引用的临时对象在这儿析构!

暂停,按任意键..


则结论:

上述演示程序可以证明,ref绑定的临时对象并未随其生命期的结束(func的最后一个右括号)而析构,而是在ref的生命期结束后才析构。
 C++标准规定:"如果一个临时性对象被绑定于一个引用,对象将残留,直到被初始化之引用的生命期结束"(见《Inside The C++ Object Model》page275) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值