【发布时间】:2022-01-01 02:13:41
【问题描述】:
为什么
string getString(){
return string("string");
}
int main(){
const string& a = getString();
cout << a;
}
会给一个UB
这个:
class vector{
void push_back(const T& value){
//...
new(arr + sz) T (value);
++sz;
}
}
main(){
vector v;
v.push_back(string("abc"));
}
会好吗?
我猜在第一种情况下,临时对象在表达式 const string& a = getString(); 结束后立即过期,而在第二种情况下,临时对象的生命将延长,直到函数完成。
是不是唯一一种在表达式后面延长临时对象寿命的情况。
【问题讨论】:
-
第一个例子不是 UB AFAIK。
-
const string& a = getString();不是 UB,因为临时的生命周期被延长以匹配a的生命周期。 "...可以通过绑定到 const 左值引用或右值引用(C++11 起)来延长临时对象的生命周期,详情请参阅引用初始化..."来源en.cppreference.com/w/cpp/language/lifetime
标签: c++ temporary-objects const-reference