c – 结构化绑定是否与std :: vector一起使用?
作者:互联网
是否可以使用带向量的结构化绑定?
例如.
std::vector<int> vec{1, 2, 3};
auto [a, b, c] = vec;
不幸的是,上面的代码不起作用(在GCC下),但也许有一种不同的方式(结构化绑定)允许将向量的前三个值分配给三个变量.
解决方法:
结构化绑定仅在编译时已知结构时才有效.矢量不是这种情况.
虽然您确实知道单个元素的结构,但您不知道元素的数量,这就是您在问题中尝试分解的内容.类似地,您只能在数组类型上使用结构化绑定,其中编译时已知大小.考虑:
void f(std::array<int, 3> arr1,
int (&arr2)[3],
int (&arr3)[])
{
auto [a1,b1,c1] = arr1;
auto [a2,b2,c2] = arr2;
auto [a3,b3,c3] = arr3;
}
前两个将起作用,但最后一行将无法编译,因为在编译时不知道arr3的大小. Try it on godbolt.
标签:c,vector,pattern-matching,c17,structured-bindings 来源: https://codeday.me/bug/20190910/1801697.html