decltype(auto)
的示例(第28页):
template<typename Container, typename Index>
decltype(auto)
authAndAccess(Container&& c, Index i)
{
authenticateUser();
return std::forward<Container>(c)[i];
}
我的问题很简单。为什么我们需要在std::forward
申请c
?我们没有将c
传递到任何地方,我们正在调用operator[]
。并且没有一个标准容器具有operator[]
的ref-qualified重载(r值/ l值重载)。
所以我认为只有两个原因std::forward
:
operator[]
的ref-qualified重载。std::forward
。周期。还有其他原因吗?
答案 0 :(得分:8)
原因#1是相关的。当你实现一个通用函数时,你不会通过“我知道这些特定类型做什么?”,而是通过“我对我正在使用的通用内容了解多少?”。
通用容器没有提及参考资格,所以你转发。
当然,理由#2更容易记住和推理,所以你应该遵循它。
我认为没有其他原因。