在下面的代码中
如果我使用普通的基于对偶的范围for循环,它会显示相同的地址用于两次迭代。
#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
如果我使用auto,地址对于迭代都会发生变化。
/*0x10061e410
0x10061e3e0*/
为什么行为有差异。即使在使用pair的循环基础上,两者都应该显示不同的地址。
这两种范围for循环之间有什么区别?
std::pair<const Key, T>
。 - kmdreko