我有以下代码:
#include "stdafx.h"
#include <unordered_map>
#include <cassert>
int main()
{
struct Foo { int a; };
std::unordered_map<int, Foo> foos{ { 0, { 3 } }, { 1, { 4 } } };
for (auto &[i, foo] : foos)
{
foo.a = 6; //doesn't change foos[i].a
assert(&foo.a == &foos[i].a); //does not pass
}
auto &[i, foo] = *foos.begin();
foo.a = 7; //changes foo[0].a
assert(&foo.a == &foos[0].a); //passes
}
我的问题:
为什么第一个断言语句没有通过而第二个通过?
为什么我不能在基于范围的 for 循环中更改 foos
映射中的 foo
的值?
编译器: MSVS++17 Visual Studio 15.3.2
编辑:如果复制粘贴到 Visual Studio 项目中,代码现在可以编译。
最佳答案
我发布了 bugreport在VS中,现在正在调查中。
关于c++ - 为什么基于范围的 for 循环中的结构化绑定(bind)只是拷贝而不是引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45907922/