我试图遍历元组的 vector :
std::vector<std::tuple<int, int, int>> tupleList;
通过对结构化绑定(bind)使用基于范围的for循环:
for (auto&& [x, y, z] : tupleList) {}
但是Visual Studio 2017 15.3.5给出了错误:
但是以下方法确实有效:
for (auto&& i : tupleList) {
auto [x, y, z] = i;
}
这是为什么?
最佳答案
它确实可以工作,但是智能感知并没有使用相同的编译器:
因此,即使编辑器中显示红线和错误,它也可以使用ISO C++17 Standard (/std:c++17)
开关进行编译。
我编译了以下程序:
#include <vector>
#include <tuple>
std::vector<std::tuple<int, int, int>> tupleList;
//By using a range based for loop with structured bindings :
int main()
{
for(auto&&[x, y, z] : tupleList) {}
}
Visual Studio版本:
cl版本:
从命令行:
>cl test.cpp /std:c++17
Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25547 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
test.cpp
C:\Program Files (x86)\Microsoft Visual Studio\Preview\Community\VC\Tools\MSVC\14.11.25503\include\cstddef(31): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc
Microsoft (R) Incremental Linker Version 14.11.25547.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:test.exe
test.obj
关于c++ - 带 vector 的基于自动范围的结构化绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46571786/