gpt4 book ai didi

c++ - `std::make_tuple` 的原因是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:34:20 31 4
gpt4 key购买 nike

我的意思是为什么 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/

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