延长函数的寿命延长 由 const& 获取参数并由 const& 返回
lifetime extension for function taking parameter by const& and returning by const&
在C 中,您有以下内容:
std::string get_string();
std::string const& v = get_string();
从get_string((返回的临时寿命延长了参考V;
的相同寿命如果我有以下内容:
std::string const& get_string(std::string const& p) {
return p;
}
std::string const& v =
get_string(std::string{"Hello"});
临时的寿命扩展了吗?还是这是一个悬空的参考;
我的理解是,临时性与P的寿命约束而且仅在功能的持续时间内存在,而对临时的次要引用则不延长寿命。
预期结果是什么?
是的,临时的寿命不会进一步延长;完整表达后,参考 v
变为悬挂。
std::string const& v = get_string(std::string{"Hello"});
// v becomes dangled now
我的理解是临时性与P的寿命绑定,并且仅在函数的持续时间内存在
准确地说,临时存在直到完整表达式结束,而不仅仅是函数的持续时间。
- 存在函数调用中的参考参数的临时绑定到包含该函数调用的完整表达式结束之前:如果函数返回了一个参考,该引用概述了完整的表达式,则将成为悬而未决的参考。
通常,暂时的寿命不能通过"将其传递给":第二个参考",从临时界限的参考初始化,不会影响其寿命。
。
这意味着auto sz = get_string(std::string{"Hello"}).size();
之类的东西很好。
相关文章:
- 不允许运算符 const 参数调用 const 成员函数
- std::p ackaged_task 应该删除带有 const 参数的复制 c'tor
- 将非 const 对象用于 const 参数
- 对可变参数模板使用 const 参数
- 为什么 QObject::d isconnect(const QMetaObject::Connection &connection) 采用 const 参数并打算修改它?
- 为什么static_assert在带有 const 参数的成员函数中不起作用?
- 如何使用 QString::replace on const& 参数?
- 将const char * const参数成员分配给新值
- 默认移动构造函数采用 const 参数
- 模板参数包无法推断"const&"参数
- const参数与const引用参数
- 重载解析不正确,const 参数的值为 0
- 无法将带有 const 参数的函数转换为函数指针?
- const参数与C 模板中的非const参考结合
- 该函数更改成员函数的const参数
- 重载比较运算符 C++,如何与 const 参数进行比较
- 为什么 const 数组优先绑定到 const T& 参数而不是 T&& 参数?
- const参数的类的只读版本
- 为什么这个 const 参数不能与非类型模板参数匹配?
- 没有匹配函数调用具有 const 参数的模板化函数