reference:
https://blog.csdn.net/abnerwang2014/article/details/26720455
被调函数的返回类型决定返回的是左值还是右值,当被调函数的返回类型是 引用 时,返回的是左值,其余情况下返回的是右值,被调函数返回的左值有着与其他左值类型同样的运算特性,需要特别指出的是, 我们能为返回类型是非常量引用的函数的结果赋值 ,但是需要注意的是,进行运算的前提是确保返回的引用是有效的, 返回与局部对象绑定的引用是无效的 ,因为被调函数运行结束时,局部对象的存储空间已经释放,返回与局部对象绑定的引用将会产生错误的结果,要想确保返回值的安全