【发布时间】:2017-09-17 21:55:52
【问题描述】:
在下面的代码中
#include <iostream>
#include<unordered_map>
#include<string>
int main()
{
std::unordered_map<std::string,int>m;
m["1"]=1;
m["2"]=2;
for(const std::pair<std::string,int>&p :m)
{
std::cout<<&p<<"\n";
/*0x7fff5fbff068
0x7fff5fbff068*/
}
for(const auto &p :m)
{
std::cout<<&p<<"\n";
/*0x10061e410
0x10061e3e0*/
}
}
如果我使用基于普通对的范围 for 循环,它会显示两次迭代的相同地址
0x7fff5fbff068
0x7fff5fbff068
而如果我使用自动,则两次迭代的地址都会更改
/*0x10061e410
0x10061e3e0*/
为什么在行为上存在差异。即使在基于范围的 for 循环中使用对,两者也不应该显示不同的地址。
这两种范围的for循环有什么区别
【问题讨论】:
-
它们是不同的类型,但我不知道具体原因:wandbox.org/permlink/GgzHEl03DQdbsoiO
-
类型应该是
std::pair<const Key, T>
标签: c++