考虑以下代码:
void func(Thing& thing) {
...
}
int main() {
Thing t;
Thing& ref = t;
func(ref);
}我在传递一份推荐信,通过引用。
这完全等同于下面的代码吗?
void func(Thing& thing) {
...
}
int main() {
Thing t;
func(t);
}如果没有,结果到底有什么不同?
发布于 2014-10-05 23:03:25
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,在第二种情况下传递它的副本。
在编辑完问题后,两种情况的表现都是一样的。
Thing t;
Thing& ref = t;
func(ref);
Thing t;
func(t);发布于 2014-10-05 23:11:02
这似乎更像是一个“什么是参考”的问题。
您可以从对象和标识这些对象的表达式的角度来理解引用。在这种情况下:
Thing t;
Thing ref = t;我们有两个截然不同的物体。一个名为t,另一个称为ref。
在这种情况下:
Thing t;
Thing &ref = t;只有一个对象;它有两个标识符,t和ref。该代码与以下代码完全相同:
Thing ref;
Thing &t = ref;无论何时在表达式中使用thing或ref,都可以理解为标识单个对象。
调用func会绑定对所提供的任何对象的引用。在第二种情况下,func(ref)和func(t)没有区别,它们都传递相同的对象。当我们在func中时,仍然有一个对象,它有三个名称:
main::ref // not currently visible
main::t // not currently visible
func::thing // visible(注意:这种::的使用不是有效的C++语法,希望我的意思是清楚的)。可见性适用于标识符,而不是对象。
https://stackoverflow.com/questions/26208115
复制相似问题