小编sal*_*uto的帖子

为什么我可以在基于范围的for-loop到'std :: unordered_map'中使用带有'auto'但不带'std :: pair'的非const引用?

使用C++ 14(也应该影响C++ 11)我auto在基于范围的for循环中感到困惑std::unordered_map,与使用std::pair<int, int>下面代码中的确切类型相反.

更具体地说,我有一些关于这个例子的(相关)问题:

  • 问题0 :(循环0)为什么std::pair<int, int> &不允许但是auto &在循环1中?
  • 问题1 :(循环1)为什么/如何/何时auto与确切类型不同(如std::pair<int, int>循环0)?
  • 问题2 :(循环2)为什么这个不同的指针比循环3中的不同?
  • 问题3 :(循环3)为什么这是所有映射条目的相同指针?

  • 问题4(继续0和1):我知道基于范围的for循环使用迭代器.但是为什么我可以std::unordered_map使用auto(循环1)迭代引用非const ,但是在使用std::pair(循环0)时不能?


#include<iostream>
#include <unordered_map>
#include <utility>

int main()
{
    std::unordered_map<int, int> map;
    map[3] = 333;
    map[2] = 222;
    map[1] = 111;

    // loop 0
    // QUESTION 0: Why is `std::pair<int, int> &` not allowed but `auto &` in loop 1 is?
    // …
Run Code Online (Sandbox Code Playgroud)

c++ for-loop stl auto c++11

0
推荐指数
1
解决办法
80
查看次数

标签 统计

auto ×1

c++ ×1

c++11 ×1

for-loop ×1

stl ×1