别名的别名

An alias for an alias?

本文关键字:别名      更新时间:2023-10-16
是否可以

为引用变量(别名本身的别名(创建引用?

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

在 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&&

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

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

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

然后你实际所做的是将a引用绑定到ba 是同一对象的名称,i是其名称,因此int &b = a;int &b = i; 具有完全相同的效果。因此,您有两个对同一对象的引用,i

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

在 Python 中,像这样:

a = 1
b = a

经过此处理后,"A"和"B"的 ID 是相同的。