对于我们C++中,const T&(左值常量引用)可以接收一个纯右值表达式,创建一个临时变量。
cpp
const string& k(const string& i)
{
return i;
}
int main()
{
//使用auto&就是"起别名"所以随着临时对象的销毁,这里什么也打印不出来
//但是如果没有&就是一个拷贝(同样伴随内存开销)
auto& result = k("abc"); //这样是不合法的,虽然有的编译器可以输出
cout << result; //调用了string("abc")转换构造函数
string s = { "xxx" };
auto& result2 = k(s); //这才是合法的
cout << result2;
return 0;
}
const T& 延长临时变量生成周期?
实际临时变量有自己生命周期的。
会存在到函数调用的全表达式结尾为止(立即销毁),如果函数返回一个生命周期长于全表达式的引用,会成为"悬垂引用"