gpt4 book ai didi

c++ - 用花括号初始化一个 std::array 元组

转载 作者:IT老高 更新时间:2023-10-28 22:19:14 24 4
gpt4 key购买 nike

这可能有一个非常简单的答案,但我真的想不通。为什么这样做会出错?初始化这样的东西的正确方法是什么?

std::array<std::tuple<int, std::string>, 3> tuples{
{3, "a"},
{7, "b"},
{2, "c"}
};

在 MSVC 2015 上,我收到以下错误:

No suitable constructor exists to convert from "int" to "std::tuple<int, std::string>"
No suitable constructor exists to convert from "const char[2]" to "std::tuple<int, std::string>"

最佳答案

这是 tuple 的一个突出问题。见,its constructor in C++11/14 is explicit .因此,它不能参与复制列表初始化,这是内部花括号初始化列表所做的(外部是直接列表初始化)。

这个想法是 prevent you from being able to bypass a class's explicit constructors through tuple .但是,在 C++17 中,这将被改变:如果所有元组的类型本身都可以从各自的给定类型隐式转换,那么 tuple 的构造函数也是如此。

对于您的特定用例,您可以使用 std::pair。它的构造函数从不explicit

关于c++ - 用花括号初始化一个 std::array 元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34708859/

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