为什么结构化绑定不支持可变数组?

Why do structured bindings not support variadics?

本文关键字:数组 不支持 结构化 绑定 为什么      更新时间:2023-10-16

C++17 添加了结构化绑定:

tuple<int, int, int> make_tuple();
int test() {
auto [a, b, c] = make_tuple();
return a | b | c;
}

我的直接直觉是尝试将它们用作参数包。

template <size_t N>
auto make_tuple();  // returns tuple with N ints
template <size_t N>
int test() {
auto [...values] = make_tuple<N>();
return (0 | ... | values);
}

唉,我做不到。为什么委员会排除了这种功能?现在感觉不一致,lambda 捕获可以包含参数包。

我知道委员会里到处都是聪明的创意人士,像我这样的想法一定是有充分理由提出并被拒绝的。这是什么原因?

发展中语言的本质是随着时间的推移而添加的功能。

仅仅因为某些内容还没有语言,并不意味着委员会已经彻底拒绝了它。这并不意味着他们"排除"了它。可能只是它被忽视了,或者只是还没有被认真考虑过。请记住,std::make_unique直到 C++14 才可用。

在这种特殊情况下,它是最近提出的功能,称为P1061。你会从修订历史部分注意到,委员会"对它进行了积极的审查,并认为这是我们这个时代的一项很好的投资"。所以我想你很幸运。:)