首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过引用传递引用?

通过引用传递引用?
EN

Stack Overflow用户
提问于 2014-10-05 23:01:56
回答 2查看 61关注 0票数 1

考虑以下代码:

代码语言:javascript
复制
void func(Thing& thing) {
    ...
}

int main() {
    Thing t;
    Thing& ref = t;
    func(ref);
}

我在传递一份推荐信,通过引用。

这完全等同于下面的代码吗?

代码语言:javascript
复制
void func(Thing& thing) {
    ...
}

int main() {
    Thing t;
    func(t);
}

如果没有,结果到底有什么不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-05 23:03:25

代码语言:javascript
复制
Thing t;
Thing& ref = t;
func(ref);

Thing t;
Thing ref = t; // ref is not a reference to t, but a copy of t
func(ref);

区别在于,在第一种情况下,传递原始对象t,在第二种情况下传递它的副本。

在编辑完问题后,两种情况的表现都是一样的。

代码语言:javascript
复制
Thing t;
Thing& ref = t;
func(ref);

Thing t;
func(t);
票数 2
EN

Stack Overflow用户

发布于 2014-10-05 23:11:02

这似乎更像是一个“什么是参考”的问题。

您可以从对象和标识这些对象的表达式的角度来理解引用。在这种情况下:

代码语言:javascript
复制
Thing t;
Thing ref = t;

我们有两个截然不同的物体。一个名为t,另一个称为ref

在这种情况下:

代码语言:javascript
复制
Thing t;
Thing &ref = t;

只有一个对象;它有两个标识符,tref。该代码与以下代码完全相同:

代码语言:javascript
复制
Thing ref;
Thing &t = ref;

无论何时在表达式中使用thingref,都可以理解为标识单个对象。

调用func会绑定对所提供的任何对象的引用。在第二种情况下,func(ref)func(t)没有区别,它们都传递相同的对象。当我们在func中时,仍然有一个对象,它有三个名称:

代码语言:javascript
复制
main::ref       // not currently visible
main::t         // not currently visible
func::thing     // visible

(注意:这种::的使用不是有效的C++语法,希望我的意思是清楚的)。可见性适用于标识符,而不是对象。

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

https://stackoverflow.com/questions/26208115

复制
相关文章

相似问题

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