引用是在这里重新定位还是其他内容

时间:2013-07-16 23:28:41

标签: c++ reference

今天我才知道引用不是reseatable 考虑一下代码:

map<int,int> z;
z.insert(make_pair(1,2));
z.insert(make_pair(3,5));
z.insert(make_pair(4,6));
auto ref = z.at(1);
ref = z.at(3);

std::map::at返回对所请求元素的映射值的引用,表示ref是引用。为什么允许重新分配(因为引用不能重新绑定)。这里发生了什么。

1 个答案:

答案 0 :(得分:2)

auto不会生成引用类型。表达式z.at(1)int类型的左值,因此ref也是一个整数。

(如果您想要参考,则必须说auto &auto &&(或在C ++ 14 decltype(auto)中)。)