读书人

关于返回匿名对象的引用的有关问题这

发布时间: 2012-06-07 15:05:14 作者: rapoo

关于返回匿名对象的引用的问题,这么做会有危险么?
如题,直接贴代码:

C/C++ code
#include <iostream>using namespace std;class A{public:    A(): _x(0)          {}    A(int a) : _x(a)    {}    const A& operator+(const int a)  { return A(_x+a);}    const A& operator=(const A &a)   { return A(_x + a._x);}    int x()                          { return _x;}private:    int _x;};int main(){    A a(2);    A c = a + 2;    cout << c.x() << endl;    return 0;}


类似return A(_x + a._x);这种返回有问题么?编译有warning,可以运行

[解决办法]
对于const引用,标准保证该引用的临时对象的生命期保持在该引用的有效期内。对于A c = a + 2; a + 2返回的const引用的生命期到末尾的分号处结束,即在该表达式语句结束前a + 2返回的const引用是有效的,并非在子表达式a + 2结束时结束,从而保证c得到有效的构造。

读书人网 >C++

热点推荐