2013-03-22 118 views
0

我在阅读以下问题Towers of Hanoi question。第一个答案说使用参考传递

stack<int>& 

我的问题是为什么这个?记忆中发生了什么?

+2

可见你是问一提的是什么?这应该由你的C++书来解释。 – 2013-03-22 15:53:22

+0

如果你没有通过引用传递,那么它会创建一个容器的副本,如果你想修改实际的变量,那么它就不是你想要的。 – 2013-03-22 15:54:11

+0

引用在技术上只是一个指针。阅读RAII和指针。 – Paranaix 2013-03-22 15:54:12

回答

1

我们正在传递参考,以便不会制作stack对象的副本。如果进行了复制,则对其进行修改不会影响传递给该函数的原始对象stack。它只会影响功能本地的副本

引用就像对象的别名;当宣布为

stack<int>& source 

source现在引用该对象。

1

在所提到的问题中所使用的函数具有下列原型:

void Hanoi(int nDisks, stack<int> source, stack<int> intermed, stack<int> dest) 

即它需要全部通过stack<int>对象由值。创建了传递stack的副本,并且在此函数体内对此对象所做的任何更改都会更改副本,而不是传递给它的原始对象。

这就是为什么解决方案是通过引用传递这些stack对象而不是按值传递。基本上引用(如stack<int>& dest)允许你把destHanoi函数内部就像它的类型是stack<int>,这里还有没有复制和变化给调用者:)