别名的别名?

时间:2012-05-12 08:09:17

标签: c++ alias

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

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

3 个答案:

答案 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 绑定到bai为其名称的同一对象的名称,因此int &b = a;int &b = i;具有完全相同的效果。因此,您有两个对同一对象的引用i

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

答案 2 :(得分:0)

在Python中,像这样:

a = 1
b = a

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