当前位置:  开发笔记 > 编程语言 > 正文

使用花括号初始化std ::元组元组

如何解决《使用花括号初始化std::元组元组》经验,为你挑选了1个好方法。

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

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

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

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

Nicol Bolas.. 24

这是一个突出的问题tuple.看,它在C++ 11/14中的构造函数是explicit.因此,它不能参与copy-list-initialization,这是内部braced-init-lists所做的(外部的是直接列表初始化).

这个想法是为了防止你绕过一个类的explicit构造函数tuple.但是,在C++ 17中,这将被改变:如果所有元组的类型本身都可以从相应的给定类型中隐式转换,那么构造函数也是如此tuple.

对于您的特定用例,您可以使用std :: pair.它的构造函数永远不会explicit.



1> Nicol Bolas..:

这是一个突出的问题tuple.看,它在C++ 11/14中的构造函数是explicit.因此,它不能参与copy-list-initialization,这是内部braced-init-lists所做的(外部的是直接列表初始化).

这个想法是为了防止你绕过一个类的explicit构造函数tuple.但是,在C++ 17中,这将被改变:如果所有元组的类型本身都可以从相应的给定类型中隐式转换,那么构造函数也是如此tuple.

对于您的特定用例,您可以使用std :: pair.它的构造函数永远不会explicit.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有