在“C ++编程语言”中,有一个例子
void g()
{
int ii = 0;
int& rr = ii;
rr++;
int* pp = &rr;
}
作者声明:
这是合法的,但rr ++不会增加引用rr,而是将++应用于碰巧为ii的int。
我对这句话很困惑,为什么“rr ++不会增加引用rr”?所以rr只是用作“桥梁”来增加ii?
答案 0 :(得分:3)
是的,在C ++中,引用只不过是别名,或者说是你所说的“桥梁”。每当您说rr
时,就好像您说ii
,即rr
引用的变量的“原始”名称。
这与许多其他语言中的引用不同(其行为更像C ++的指针)。在C ++中,引用不是对象,它们没有单独的标识。你不能告诉引用“请增加”,或“请指向空”或其他任何内容。它只是引用指向的变量的另一个名称。
答案 1 :(得分:1)
引用类似于指向变量的解引用指针。例如:
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。
答案 2 :(得分:0)
所以rr只是用作“桥梁”来增加ii?
完全。在内部,它将存储ii
的地址,编译器将在此地址递增int
。可用于例如:
int left, right;
...
int &direction = random_bool() ? left : right;
++direction; // would change left or right, depending on random_bool()
但主要用于函数参数和返回类型。
答案 3 :(得分:0)
它增加ii
,它不会增加rr
中包含的地址。