18

我有以下代码:

#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 循环中更改地图中 afoo的值?foos

编译器: MSVS++17 Visual Studio 15.3.2

编辑:如果将复制粘贴到 Visual Studio 项目中,则代码现在可以编译。

4

1 回答 1

10

我在 VS 中发布了一个错误报告,现在正在调查中。

于 2017-08-31T14:53:34.540 回答