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

时间:2011-10-06 20:02:44

标签: c++ reference

在“C ++编程语言”中,有一个例子

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

作者声明:

  

这是合法的,但rr ++不会增加引用rr,而是将++应用于碰巧为ii的int。

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

4 个答案:

答案 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中包含的地址。