c++中与引用相关的问题

reference-related issue in C++

本文关键字:问题 引用 c++      更新时间:2023-10-16

在《c++程序设计语言》中,有一个示例

void g()
{  
   int ii = 0;
   int& rr = ii;
   rr++;
   int* pp = &rr;
}

作者声明:

这是合法的,但是rr++不增加引用rr,相反,++应用于恰好是ii的int。

我对这句话很困惑,为什么"rr++不增加引用rr"?所以rr只是作为"桥"来增加ii?

是的,在c++中,引用只不过是一个别名,或者如您所说的"桥"。当你说rr时,它是就好像你说ii一样,rr引用的变量的"原始"名称。

这与许多其他语言中的引用不同(它们的行为更像c++的指针)。在c++中,引用不是对象,它们没有独立的标识。你不能告诉引用"请自增"或"请指向null"或其他任何东西。它只是成为引用指向的变量的另一个名称。

引用类似于指向变量的解引用指针。例如:

int v = 3;
int* pv = &v;
int& rv = v;
// Access v through a pointer:
*pv = 4;
// Access v through a reference:
rv = 4;

在这个例子中,两个语句都将v设置为4。

所以rr只是用作增加ii的"桥梁"?

。在内部,它将存储ii的地址,并且编译器将在此地址上增加int。例如:

int left, right;
...
int &direction = random_bool() ? left : right;
++direction; // would change left or right, depending on random_bool()

,但主要用于函数参数和返回类型

ii加1,对rr中的地址不加1