【发布时间】:2016-02-12 16:52:16
【问题描述】:
我想知道为什么返回本地对象的 const reference 是非法的,而返回 local object 是合法的,只要将其分配给 const reference?
vector<int> f_legal() {
vector<int> tempVec;
tempVec.push_back(1);
return tempVec;
}
const vector<int>& f_illegal() {
vector<int> tempVec;
tempVec.push_back(1);
return tempVec;
}
void g() {
const vector<int>& v1 = f_legal(); // legal
const vector<int>& v2 = f_illegal(); // illegal
}
编辑: 我的观点是,如果将 const ref 分配给返回的局部变量是合法的,那么将 const ref 分配给返回的局部变量的 const ref 也不应该是合法的吗?
【问题讨论】:
-
@Ed Heal 是的,在 C++ 中明确定义了本地 const 引用将延长它所绑定的临时对象的生命周期。
-
@EdHeal 是的,这是合法的。标准中有一个特殊情况,只要在当前范围内有对它的 const 引用,本地对象就会保持活动状态。