生命周期延长从函数返回引用
lifetime extension returning reference from function
以下是UB(未定义行为)吗?
value
现在真的是悬而未决的一级 "too much" 并且 compiler/language 规则没有延长生命周期吗?
const int &get_value(const int &value) { return value; };
int main()
{
const auto &value = get_value(5);
printf("Value is: %d", value);
}
是的,这是UB。当通过 5
传递给 get_value()
时,会创建一个临时对象并将函数参数 const
引用 value
绑定到它。因为,绑定到函数参数 value
的临时对象,它将持续存在,直到包含调用的完整表达式完成。在 main()
中,您正在取消引用未绑定到活动对象的引用,这是未定义的行为。
以下是UB(未定义行为)吗?
value
现在真的是悬而未决的一级 "too much" 并且 compiler/language 规则没有延长生命周期吗?
const int &get_value(const int &value) { return value; };
int main()
{
const auto &value = get_value(5);
printf("Value is: %d", value);
}
是的,这是UB。当通过 5
传递给 get_value()
时,会创建一个临时对象并将函数参数 const
引用 value
绑定到它。因为,绑定到函数参数 value
的临时对象,它将持续存在,直到包含调用的完整表达式完成。在 main()
中,您正在取消引用未绑定到活动对象的引用,这是未定义的行为。