c++ - 返回类型的转发参考
问题描述
这两者有区别吗
struct S;
int& foo(S&);
auto&& bar1(S& s) {
return foo(s);
}
decltype(auto) bar2(S& s) {
return foo(s);
}
对于编译器?我一直decltype(auto)
在这样的情况下使用,但似乎auto&&
可以解决问题。是巧合还是两者相同?
解决方案
对于您的特定情况,它会产生相同的结果:两者的推导返回类型bar1()
和bar2()
is int&
。
但是,请注意,auto&&
始终会导致引用,即,无论是按值返回还是按引用返回,bar1()
都将始终按引用返回。foo()
另一方面,如果按值返回(这不是您的情况) ,则将bar2()
返回的类型声明为decltype(auto)
将导致按值bar2()
返回。foo(s)
我猜你想完美地转发返回的对象foo(s)
。如果是这样,那实际上是decltype(auto)
' 的用例。想一想:如果foo()
按值返回,那么bar1()
的返回类型将被推导出为int&
,即返回对临时对象的引用。
推荐阅读
- r - 读取文件文件夹的函数返回“文件错误(con,“r”):无法打开连接...”
- scala - 将 F[A] 转换为 Future[A]
- android - 将工具栏文本更改为样式中的所有大写字母后,Android 搜索小部件崩溃
- c# - 在不创建实例的情况下获取方法的属性
- python - 如何初始化具有共享状态的python多处理工作者池?
- java - 如果代理关闭,则无法创建 Bean
- python - Python Kivy - 将 GridLayout 添加到 BoxLayout
- c# - 在 Firebase REST API 上放置 JSON 数据时出现 BadRequest
- python - 从 2 个自动编码器中提取特征并将它们输入 MLP
- angular - 如何从Angular中的HttpClient发出的get请求中返回数据对象?