gpt4 book ai didi

c++11 - 使用forward_as_tuple发送初始化列表

转载 作者:行者123 更新时间:2023-12-02 10:20:34 25 4
gpt4 key购买 nike

假设下面的代码:

#include <map>

using namespace std;

int main(int argc, char *argv[])
{
map<int, std::array<int, 2>> a;

a.emplace(piecewise_construct,
forward_as_tuple(1),
forward_as_tuple({1, 2}));

return 0;
}

我想使用初始化列表来放置一个std::array。但我收到了这个错误:

foo.cc: In function ‘int main(int, char**)’:
foo.cc:13:36: error: too many arguments to function ‘std::tuple<_Elements&& ...> std::forward_as_tuple(_Elements&& ...) [with _Elements = {}]’
forward_as_tuple({1, 2}));
^
In file included from /usr/include/c++/4.8/bits/stl_map.h:63:0,
from /usr/include/c++/4.8/map:61,
from foo.cc:3:
/usr/include/c++/4.8/tuple:869:5: note: declared here
forward_as_tuple(_Elements&&... __args) noexcept
^

我知道有很多方法可以实现这一点,但我的问题是关于 forward_as_tuple 的错误行为,为什么它不简单地将初始值设定项列表发送到 std::数组

我使用 c++11 和 g++-4.8.4。

最佳答案

forward_as_tuple({1, 2})

大括号初始化器不能像这样完美转发和推导为 std::initializer_list,您需要显式转换它们:

forward_as_tuple(std::initializer_list<int>{1,2})

但是,尽管由于聚合初始化,std::array 可以使用大括号进行初始化,但它没有 std::initializer_list 构造函数。如果您确实想要这种初始化,可以使用 std::vector,但您最好只构建数组并希望编译器为您进行优化。

关于c++11 - 使用forward_as_tuple发送初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34717008/

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