C ++ 17结构化绑定声明用于vs vs if while?

时间:2017-06-23 22:25:01

标签: c++ c++17

编译此代码时:

std::tuple<int, int> array[] = {std::make_tuple(1, 2), std::make_tuple(1, 2),
                                std::make_tuple(1, 2), std::make_tuple(1, 2)};
for (auto[a, b] : array) {
  printf("%u %u", a, b);
}

if (auto[a, b] = std::forward_as_tuple(1, 2); b != 0xff) {
  printf("%u %u", a, b);
}

while (auto[a, b] = std::make_tuple(1, 2); b != 0xff) {
  printf("%u %u", a, b);
}

使用:

clang++ -std=c++1z

我收到以下错误:

main2.cpp:76:14: error: decomposition declaration not permitted in this context
  while (auto[a, b] = std::make_tuple(1, 2); b != 0xff) {
             ^~~~~~
main2.cpp:76:46: error: use of undeclared identifier 'b'
  while (auto[a, b] = std::make_tuple(1, 2); b != 0xff) {
                                             ^
2 errors generated.

为什么auto[a, b] = std::forward_as_tuple(1, 2); b != 0xff支持ifwhile支持sizeof?是否存在一些技术原因,或者它是“那就是它的原因”理由?

1 个答案:

答案 0 :(得分:6)

根据最新的C ++标准草案,while循环实际上没有init-statementif在C ++中获得的可选switch 17。

形式语法是:

while ( condition ) statement

总之,结构化绑定不是问题所在。查看草稿的this部分以供参考。