关于返回匿名对象的引用的问题,这么做会有危险么?
如题,直接贴代码:
- 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得到有效的构造。