首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vector::at reference

vector::at reference
EN

Stack Overflow用户
提问于 2011-02-06 10:44:17
回答 2查看 168关注 0票数 2

根据这个定义:

代码语言:javascript
复制
vector<some_struct_t> lots_of_stuff;

vector::at返回一个引用,这段代码对我来说很有意义:

代码语言:javascript
复制
some_struct_t & ref_element = lots_of_stuff.at(0);

但是,这段代码也可以编译,而且看起来还行得通:

代码语言:javascript
复制
some_struct_t val_element = lots_of_stuff.at(0);

非引用如何在这里工作?是否正在调用复制构造函数?为什么这是可行的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-06 16:22:04

T类型的引用就是T类型的左值表达式,就像T类型的变量名是T的左值表达式一样。

代码语言:javascript
复制
vector<T> v = ...;
T a = ...;
T b = a;
T c = v.at(0);

B和c的初始化方式几乎没有区别,因为在右边是一个简单的T类型的左值表达式,这会导致复制初始化。

我认为你问这个问题的原因是你认为引用本身就是一个对象类型,就像指针的类型是一个对象类型一样。但事实并非如此。表达式永远不会有引用类型。引用类型只是用来将右值转换为左值表达式。表达式的类型是相同的。但它的“价值范畴”发生了变化。

票数 0
EN

Stack Overflow用户

发布于 2011-02-06 10:49:18

非引用的对象从返回的引用复制到您的对象。与参考版本不同,对对象所做的更改不会应用于矢量中的对象。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4911187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档