这可能有一个非常简单的答案,但我真的无法弄明白.为什么我这样做会出错?初始化这样的东西的正确方法是什么?
std::array<std::tuple<int, std::string>, 3> tuples{
{3, "a"},
{7, "b"},
{2, "c"}
};
Run Code Online (Sandbox Code Playgroud)
在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>"
Run Code Online (Sandbox Code Playgroud)
Nic*_*las 24
这是一个突出的问题tuple.看,它在C++ 11/14中的构造函数是explicit.因此,它不能参与copy-list-initialization,这是内部braced-init-lists所做的(外部的是直接列表初始化).
这个想法是为了防止你绕过一个类的explicit构造函数tuple.但是,在C++ 17中,这将被改变:如果所有元组的类型本身都可以从相应的给定类型中隐式转换,那么构造函数也是如此tuple.
对于您的特定用例,您可以使用std :: pair.它的构造函数永远不会explicit.
| 归档时间: |
|
| 查看次数: |
2076 次 |
| 最近记录: |