[C++] 非常量引用必须用左值赋值

class A {
    int _a;
public:
    A(int a): _a(a){}
    friend int f1(A &);//1
    friend int f2(const A &);//2
    friend int f3(A);//3
    friend int f4(const A);//4
};

/*.问以下哪个调用是错误的....*/
f1(0);
f2(0);
f3(0);
f4(0);
/*.....*/

这个问题本身有点长,稍微翻译以下就是

/*   问以下四种写法哪个是错误的 */
A &a = 0;
const A& a = 0;
A a = 0;
const A a = 0;

所以那就是 A&a=0是错的了,因为非常量引用不能用右值赋值。
或者这个问题可以转换成:为什么常量引用可以是右值。答案是,常量引用可以扩展对象的生命周期,本来临时对象在赋值语句完成之后就要销毁,但是常量引用延长了它的生命周期,他又可以正常使用了。但是非常量引用就不行,非常量引用引用了一个临时对象,对象销毁之后,引用就非法了

posted @ 2018-08-19 19:47  zengzhaocheng  阅读(525)  评论(0)    收藏  举报