关于 类成员函数返回指向const临时变量的引用
来源:互联网 发布:交响乐 知乎 编辑:程序博客网 时间:2024/05/21 18:43
成员函数使用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)
- 关于 类成员函数返回指向const临时变量的引用
- c++ const 成员函数 & 临时变量 & 右值引用 & move
- 函数返回的临时对象为const类型,const引用
- 关于返回指向临时变量指针的困惑
- 关于const与临时变量与函数返回值
- 避免这样的成员函数:其返回值是指向成员的非const指针或引用,但成员的访问级比这个函数要低
- 避免这样的成员函数:其返回值是指向成员的非const指针或引用,但成员的访问级比这个函数要低
- 返回临时变量的引用
- 指向临时变量的指针的返回
- 指向临时变量的指针的返回
- 指向临时变量的指针的返回
- 关于C++ const:const变量,cosnt输入参数,const返回值,const成员函数
- 返回指向临时变量的指针
- C++函数返回临时变量的引用运行要出错
- 返回指向const对象的引用
- const成员函数和非const成员函数返回引用的问题
- 返回指向局部变量指针的函数 与 返回局部变量引用的函数
- C++非const的引用不能指向临时对象
- 用邻接表实现该图的广度优先搜索遍历
- jQuery Mobile页面跳转切换的几种方式
- cvFindContours && cvDrawContours 的应用2-----图像内轮廓填充
- mysql 创建表 最标准最完整版
- 使用contextMenu实现上下文菜单(重点:contextmenu/relatedTarget)
- 关于 类成员函数返回指向const临时变量的引用
- MySql权限
- 弹出可以拖动的框
- Ubuntu进入根用户命令
- Robotium 进阶
- achieve aop through xml
- TCP数据的编号与确认
- 字符串-01. 在字符串中查找指定字符(15)
- 函数指针做参数