9

我正在阅读 C++ 中的参考概念,我对 C++ Complete Reference 中的这个陈述有点困惑。

您不能引用其他参考

那么在这种情况下发生了什么:

    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
4

3 回答 3

15

措辞有点混乱。他们的意思是你不能有一个int& &类型(注意有这样的东西 a int&&,但这是一种不同类型的引用)。

在您的代码中,引用ref是指由var. 名称refvar可以互换使用来指代同一个对象。因此,当您这样做时int& r_ref = ref;,您不是在引用引用,而是再次引用同一个对象。

于 2013-05-10T11:15:15.613 回答
8

那么在这种情况下发生了什么:

正在发生的事情是您正在创建对 引用r_ref的对象的另一个引用ref,即var. 因此,您最终会得到两个对var:ref和. 的引用r_ref

请记住,引用只是一个别名:在它绑定到一个对象之后(并且它必须在初始化时绑定到某个对象,并且以后不能重新绑定),你对引用所做的一切都完成了在被引用的对象上,好像引用只是一个替代名称。

该声明的含义:

您不能引用其他参考

是您不能将引用本身视为可以进一步别名的实体:引用是对象的别名,并且您对引用所做的任何事情(包括引用边界!)都是在被引用的对象上完成的。

于 2013-05-10T11:15:42.947 回答
1

int var = 10;声明一个变量var。现在,当您编写int& ref = var;定义对var. 您可以将ref其视为var. 无论您在哪里使用ref它,就像您将var直接使用一样。

这就是为什么int& r_ref = ref;只定义另一个对var.

于 2013-05-10T11:17:30.587 回答