gpt4 book ai didi

c++ - decltype(auto) 与 auto&& 执行函数返回类型的通用处理

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:57 32 4
gpt4 key购买 nike

当使用 auto&& 处理返回左值的函数时:

int func()
{
int v=42;
return v;
}

auto && v = func();

v 视为引用而不是左值会产生什么后果?这些后果是否证明使用 decltype(auto) 而不是 auto&& 来执行函数返回类型的通用处理是合理的?

最佳答案

auto&& 已经是捕获函数返回值的最佳选择,因此 decltype(auto) 的差异只能是缺点。在您的示例中,生命周期延长 应用于从函数返回的其他临时对象。这导致它的行为基本上与直接命名的对象相同,其效果是引用限定符被“删除”。

decltype(auto) 与按值返回函数一起使用会导致其返回值对象移动到本地。根据函数内部的内容,可能会应用复制省略,从而消除局部和临时之间的区别。但这仅在某些时候适用,而引用绑定(bind)的生命周期延长是无条件的。

即使在应用时,复制省略也不会删除返回对象可以被复制或移动的要求。 decltype(auto) 无法从函数返回初始化不可移动类型的对象,而 auto && 可以,对局部和临时之间的区别与生命周期进行模数本地人。

碰巧,这种区分只能通过 decltype 进行,并且只能通过 decltype(auto) 在本地范围之外进行。由于您通常希望将生命周期延长的对象视为本地对象,因此在使用decltype 时最好注意括号和std::decay,并且不要将 decltype(auto) 用于函数参数(这是 auto && 最常见的应用)。

关于c++ - decltype(auto) 与 auto&& 执行函数返回类型的通用处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20089682/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com