为什么make_tuple删除参数类型的引用
why does make_tuple remove reference of type of args?
请参阅标准库中make_tuple的实现
// NB: DR 705.
template<typename... _Elements>
constexpr tuple<typename __decay_and_strip<_Elements>::__type...>
make_tuple(_Elements&&... __args)
{
typedef tuple<typename __decay_and_strip<_Elements>::__type...>
__result_type;
return __result_type(std::forward<_Elements>(__args)...);
}
返回类型已衰减(引用已删除(? 那么为什么呢? 这个设计有什么问题?
我知道我们有一些替代方法可以实现我的要求,例如 boost::ref。
我的问题是为什么make_tuple必须删除输入类型的引用?
更新:任何人都可以帮助讨论我的问题吗?
我很
好奇,也阅读了这个,我发现了这个 - 我相信这就是你要找的(见链接论文中的第 1 节(:https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2069.html(注意:std::p air 是具有两个元素的 std::tuple 的特定情况。
TLDR:数组不能用T()
构造,也不能复制构造。在衰变在std::make_pair
年实现之前,不可能有一个有效的std::make_pair
版本。
如果有人想知道你应该如何构建元组,请咨询这个
总之,当您需要构建元组时,请使用:
std::make_tuple
如果需要返回元组中的值,
std::tie
如果需要返回的元组中的左值引用,
std::forward_as_tuple
是否需要保留输入的引用类型以构建元组。-- 流利的C++
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 将成员函数的返回类型引用到C++中的自定义类
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- C++:类类型引用运算符=用法
- 将 const 类型引用对象注册为类成员对象C++
- 错误:绑定到类型引用会丢弃限定符
- 如果作为基类型引用传递,派生类型会解构吗
- 未分配返回未定义对象类型引用的 C++ 函数的返回值时会发生什么情况
- 类型引用的初始化无效
- C++ 从函数返回多个类型引用并将它们强制转换为我们需要的类型
- 函数常量返回类型:类型引用的初始化无效
- 将类型的嵌套类型引用为类模板的参数的问题
- 与返回类型(引用、常量引用)混淆
- 调用具有const键类型引用的std::指针集的count方法
- 返回运算符类型=-引用或值
- 非类型引用形参/实参
- c++中定义不同类型引用的区别
- 为什么返回类型引用输出流
- 非类型(引用)模板参数和链接
- 类型引用的初始化无效