0

是否可以为引用变量创建引用(别名本身的别名)?

如果是,它的应用是什么?

4

3 回答 3

4

在 C++98 中,形成对引用类型的引用是非法的。在 C++11 中,有新的引用折叠规则,简而言之,对引用的引用仍然只是一个引用(但在左值和右值引用方面存在细微差别)。考虑这段代码:

typedef int & ir;
int a;
ir & b = a;

在 C++98 中,最后一行是非法的,因为ir &它不是有效类型(试图引用一个引用)。在 C++11 中,引用崩溃并且ir &int &.

请记住,引用是不可变的,一旦初始化,您将永远无法更改引用的目标。在上面的代码中,b将始终是 的别名a,并且永远不能更改为其他东西的别名。因此,不需要双重间接,因为它不会让您做任何比普通引用已经可以做的事情更多的事情。

为了完整起见,参考折叠规则如下。假设T不是引用类型。然后在概念上我们有:

(T&)& == T&    (T&)&& == T&    (T&&)& == T&    (T&&)&& == T&&
于 2012-05-12T09:47:10.747 回答
2

您不能创建对引用的引用,并且 C++ 没有引用引用类型。

如果你使用一个引用来初始化另一个引用,例如:

int i = 1;
int &a = i;
int &b = a;

那么你实际所做的就是绑定toa引用ba是同一个对象的名称,它i是一个名称,因此int &b = a;具有与 完全相同的效果int &b = i;。所以你有两个对同一个对象的引用,i.

我不能立即想到在同一个函数中有两个引用的原因,但是如果你有一个f接受引用参数的函数,你通常会创建多个引用,并将它传递给另一个g也接受引用参数的函数. 然后fg每个都有对同一个对象的引用。

于 2012-05-12T09:46:29.067 回答
0

在 Python 中,像这样:

a = 1
b = a

经过此处理后,“a”和“b”的 id 相同。

于 2018-11-26T07:17:23.073 回答