其他分享
首页 > 其他分享> > c – 结构化绑定是否与std :: vector一起使用?

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