如果
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();
结束后立即过期,而在第二种情况下临时对象的寿命将延长,直到函数结束。是不是只有一种在表达背后延长临时对象生命的情况。
案例I:
我猜在第一种情况下,临时对象在表达式const字符串结束后立即过期;a=getString((;
注意,
const引用被允许绑定到临时库。此外,const引用延长了这些临时性的使用寿命。
例如,
const int &myRef = 5;
这里,由于临时物化,参考myRef
延长了使用prvalue表达式5物化的临时int
的寿命。
类似地,在您的第一个代码片段中,函数getString()
通过值返回一个std::string
。在这种情况下,临时材料的使用寿命也将延长。
所以您的第一个代码片段没有UB。
你问
这是表达式后面唯一一个延长临时对象寿命的情况吗。
没有其他例子,比如我给出的例子(const int &myRef = 5;
(。