编译此代码时:
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
支持if
而while
支持sizeof
?是否存在一些技术原因,或者它是“那就是它的原因”理由?
答案 0 :(得分:6)
根据最新的C ++标准草案,while
循环实际上没有init-statement
和if
在C ++中获得的可选switch
17。
形式语法是:
while ( condition ) statement
总之,结构化绑定不是问题所在。查看草稿的this部分以供参考。