- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我的意思是为什么 std::make_tuple
存在?我知道在某些情况下,该函数会减少您必须输入的字符数量,因为您可以避免使用模板参数。但这是唯一的原因吗?是什么让 std::tuple
函数存在而其他类模板没有这样的函数?仅仅是因为在这种情况下您可能会更频繁地使用 std::tuple
吗?
以下是 std::make_tuple
减少字符数量的两个示例:
// Avoiding template parameters in definition of variable.
// Consider that template parameters can be very long sometimes.
std::tuple<int, double> t(0, 0.0); // without std::make_tuple
auto t = std::make_tuple(0, 0.0); // with std::make_tuple
// Avoiding template parameters at construction.
f(std::tuple<int, double>(0, 0.0)); // without std::make_tuple
f(std::make_tuple(0, 0.0)); // with std::make_tuple
但就像上面写的那样,对于许多其他类模板,您没有这样的功能。
最佳答案
因为你不能对构造函数使用参数推导。你需要明确写std::tuple<int, double>(i,d);
.
它可以更方便地创建一个元组并将其一次性传递给另一个函数。
takes_tuple(make_tuple(i,d))
与 takes_tuple(tuple<int,double>(i,d))
.
i
的类型时少了一个地方要改变或 d
变化,尤其是在新旧类型之间可能存在转换的情况下。
如果可以写std::tuple(i,d);
, make_*
会(可能)是多余的。
(不要在这里问为什么。也许出于类似的原因,语法 A a();
不调用默认构造函数。有一些令人痛苦的 c++ 语法特性。)
更新说明:如Daniel正确地注意到,c++17 将得到增强,因此模板参数推导将适用于构造函数,并且这种委托(delegate)将变得过时。
关于c++ - `std::make_tuple` 的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34180636/
http://en.cppreference.com/w/cpp/utility/tuple/make_tuple(为了方便粘贴代码) #include #include #include st
我正在玩这个小片段: #include struct copy_only { copy_only() = default; copy_only(copy_only&&) = dele
如下所示,为什么这里的“vv”不是右值引用?这里“v”的类型是右值引用,根据decltype的推理规则, decltype右值引用(不是纯右值)的类型应该是右值引用的类型,对吗? int main(i
这该怎么做: #include std::tuple f() { return std::make_tuple(0., {1, 2}); } int main() { f();
要理解问题,请阅读 this answer首先。 我检查了不同的历史 make_tuple 实现(包括 2012 年的 clang 版本)。在 C++17 之前,我希望它们返回 {list of va
我可以写make_tuple(1,true)或写 make_tuple(1,true)编译器会推断出它的类型。这种能力是否适用于我编写的代码,或者它是否以某种方式内置到我无法访问的编译器中? 最佳答案
有没有理由std::make_tuple不接受列表初始化对象的参数? #include #include #include class FileInfo { public: FileIn
考虑这段代码: #include int main() { int i; long k; auto tup1 = std::make_tuple(i); // Compi
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Implementing comparision operators via 'tuple' and 'ti
我有一个类将大小为 5 的数组作为构造函数中的参数之一。 class sha1 { public: typedef unsigned int(&type)[5]; type diges
我想获得 std::make_tuple 为给定参数包返回的类型。到目前为止,我已经编写了以下代码: #include #include template struct unwrap_refwr
我的代码中有这样的东西 val = boost::make_tuple(objA , objB); 我的问题是 boost::make_tuple 会复制 objA 和 objB 吗? 最佳答案 是的
我的意思是为什么 std::make_tuple 存在?我知道在某些情况下,该函数会减少您必须输入的字符数量,因为您可以避免使用模板参数。但这是唯一的原因吗?是什么让 std::tuple 函数存在而
我一直在尝试 std::tuple结合引用文献: #include #include int main() { int a,b; std::tuple test(a,b); std::
Here 指出 C++17 中的演绎指南将使 std::make_tuple 过时。然而,据我所知,std::make_tuple 和 std::tuple::tuple 的标准推导指南之间的区别在于
我假设由 std::make_tuple() 创建的元组对象是在堆栈上动态分配的。我的问题是当它的生命周期达到结束状态时如何释放/删除这个对象。 std::tuple myTuple = std::m
我正在尝试在 constexpr 中使用 make_tuple()。它在全局范围内工作。但它会为 static constexpr 类成员生成链接错误。 #include #include usi
是否有适用于 C#/.NET 的 make_tuple 等效项?我想做这样的事情 mylist.Add(new Tuple("", 1)); 当我创建自己的函数时,C# 似乎支持它 Tuple mak
如果构造函数的执行顺序很重要,我该如何使用 std::make_tuple? 比如我猜A类的构造函数和B类的构造函数的执行顺序是未定义的: std::tuple t(std::make_tuple(A
我一直在搜索这个主题,但没有找到任何令人满意的答案。我正在寻找一种方法来做大多数高级语言已经可以做的事情,采用一个元组和一个映射方法并返回一个映射的(也称为转换的)元组。理想情况下,这将适用于 c++
我是一名优秀的程序员,十分优秀!