是否可以为引用变量创建引用(别名为别名的别名)?
如果是,它的应用是什么?
答案 0 :(得分: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&&
答案 1 :(得分:2)
您无法创建对引用的引用,并且C ++没有引用引用类型。
如果使用引用初始化另一个引用,例如:
int i = 1;
int &a = i;
int &b = a;
然后你实际完成的工作是将a
的 referand 绑定到b
。 a
是i
为其名称的同一对象的名称,因此int &b = a;
与int &b = i;
具有完全相同的效果。因此,您有两个对同一对象的引用i
。
我无法立即想到在同一个函数中有两个引用的原因,但如果你有一个带有引用参数的函数f
,你通常会创建多个引用,并将其传递给另一个函数g
,它也接受一个引用参数。然后f
和g
分别引用同一个对象。
答案 2 :(得分:0)
在Python中,像这样:
a = 1
b = a
经过此处理后,“ a”和“ b”的ID相同。