C++ 引用是在此处重新放置还是其他位置

C++ 引用是在此处重新放置还是其他位置,c++,reference,C++,Reference,今天我才知道,推荐信不是 考虑代码: 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); mapz; z、 插入(形成一对(1,2)); z、 插入(形成一对(3,5)); z、 插入(制作成对(4,6)); 自动参考=z.at(1); ref=z.at(3); std::ma

今天我才知道,推荐信不是 考虑代码:

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);
mapz;
z、 插入(形成一对(1,2));
z、 插入(形成一对(3,5));
z、 插入(制作成对(4,6));
自动参考=z.at(1);
ref=z.at(3);

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

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


(如果您想要引用,您必须说
auto&
auto&
(或在C++14
decltype(auto)
)。

“返回引用”并不是您所想的意思。@KerrekSB这是什么意思。任何需要阅读的指针,或者请您详细说明。正如我在回答中所说的:函数调用的结果是一个左值。如果你知道它的意思,可以用口语说“返回一个引用”,但它仍然返回一个
int
。因此,如果我有
map
,那么它只会复制整个向量?我有很多更改要做(我只是尝试了
auto&ref
而不是
auto-ref
,但它没有给出任何错误。为什么要这样做?您已经初始化了一个引用,然后为它引用的元素分配了一个新值。请考虑:
int a;int&r=a;r=42;
。最后一条语句相当于
a=42;
。这就是引用的全部要点。如果函数返回int&并且我将其存储在auto中,则auto的类型是int而不是int&?