2013-05-10 59 views
5

我正在阅读C++中的引用概念,我在C++ Complete Reference中对此语句有些困惑。引用C++中的引用

不能引用另一个参考

那么在这种情况下发生:

int var = 10; 
    int& ref = var; 
    int& r_ref = ref; 
    r_ref++; 
    cout << "var:" << var << "ref:" << ref << "r_ref:" << r_ref << endl; 

我得到的输出是:

var:11 ref:11 r_ref:11 
+3

您编写的代码不是引用另一个引用(例如'int &&')。你正在引用一个变量两次。所以,代码是确定的。 – deepmax 2013-05-10 11:19:03

回答

10

这是稍微容易混淆的措辞。他们的意思是,你不能有一个int& &类型(请注意,有这样的东西,如int&&,但这是一个不同类型的参考)。

在您的代码中,参考ref指的是由var表示的对象。名称refvar可互换使用以指代相同的对象。所以当你做int& r_ref = ref;时,你并没有参考引用,而是再次引用同一个对象。

+0

如果对引用的引用被认为是int&&那么它就是OK。 – Daemon 2013-05-10 11:32:14

+0

还有一件事**我们无法获得参考变量**的地址。但是,因为这里的ref是指var,所以我可以打印&ref。那么你能解释一下吗? – Daemon 2013-05-10 11:34:53

+1

@Guarav是的,当你执行'&ref'时,你实际上是在引用它所指向的对象的地址。你不能把引用本身的地址。事实上,没有说明参考本身是否存在于记忆中。 – 2013-05-10 11:35:50

6

所以发生这种情况下:

正在发生的事情是,你正在创造另一个参考r_refref引用的对象,这是var。所以你最后有两个引用varrefr_ref

记住一提的是只是一个别名:它绑定到一个对象后(并必须绑定到在初始化时的一些对象,它不能被重新绑定以后),你在参考上做的所有事情都是在参考的对象上完成,就好像 参考只是一个替代名称一样。

什么这个说法的意思是:

不能引用另一个参考

就是你不能把参考自身作为可以进一步别名实体:引用的对象别名,无论你在引用上做什么(包括引用边界!)都是在被引用的对象上完成的。

0

int var = 10;声明变量var。现在当你写int& ref = var;定义了对var的引用。您可以将ref视为var的别名。无论你在哪里使用ref这就像你会直接使用var

所以这就是为什么int& r_ref = ref;只是定义另一个参考var