首页 > c++为什么表达式会产生引用?

c++为什么表达式会产生引用?

赋值是会产生引用的一类典型表达式,引用的类型就是左值的类型.也就是说,如果i是int,表达式i=x的类型是int &

为什么i=x不是int而非要绕个弯是int &?


“赋值会产生引用”的含义是,赋值表达式的返回值是引用类型。这里包含两个问题,

举个例子吧,比如Obj类的赋值运算符是这样重载的:

cppclass Obj{
    int x;
public:
    Obj& operator=(const Obj& rhs){
        x = rhs.x;
        return *this;
    }
};

那么在b = c结束后,返回的*thisb的引用。如果你写的是:

cppObj operator=(...){
    ...
    return *this;
}

则在return *this后,*this会被拷贝为一个新的对象作为返回值存起来。多一次拷贝构造函数的调用过程。

赋值运算符的一般重载方法,以及为何要返回*this,可以参考这篇文章:
http://harttle.github.io/2015/07/28/effective-cpp-10.html

关于拷贝构造函数、赋值运算符的调用时机以及重载方法,可以参考:
http://harttle.github.io/2015/07/23/effective-cpp-5.html

【热门文章】
【热门文章】