Does structured binding work with std::vector?

前端 未结 3 866
隐瞒了意图╮
隐瞒了意图╮ 2020-12-15 03:40

Is it possible to use structured binding with vectors?

E.g.

std::vector vec{1, 2, 3};
auto [a, b, c] = vec;

Above code u

3条回答
  •  春和景丽
    2020-12-15 04:00

    Structured binding only works if the structure is known at compile time. This is not the case for the vector.

    While you do know the structure of the individual elements, you do not know the number of elements, and that is what you are trying to decompose on in your question. Similarly, you can only use structured bindings on array types where the size is known at compile time. Consider:

    void f(std::array arr1,
           int (&arr2)[3],
           int (&arr3)[])
    {
        auto [a1,b1,c1] = arr1;
        auto [a2,b2,c2] = arr2;
        auto [a3,b3,c3] = arr3;
    }
    

    The first two will work, but the last line will fail to compile, because the size of arr3 is not known at compile time. Try it on godbolt.

提交回复
热议问题