c++中与引用相关的问题
reference-related issue in C++
在《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
相关文章:
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- Xcode 语义问题引用或以前定义的代码
- C++ 关于指针取消引用的技术问题
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 棘手的按值传递和按引用递归问题传递
- 当我尝试通过 arduino 上的引用传递布尔数组时出现问题
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 取消引用向量时出现问题
- 有关从C++中的不同源文件引用类的问题
- C++:取消引用十六进制值,有点语法问题
- 运行veins_inet示例 - 未定义的引用的 Omnet++ 问题
- C++ - 对 PCM::getInstance() 的未定义引用问题
- 通过键入的引用问题传递函数
- 一个关于继承和引用的C++问题
- 关于引用数组位置的问题
- printf(时差程序)中的引用问题
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- "Field has incomplete type"引用自己的类的问题
- 指针范围问题和返回类中封装的指针向量内的指针引用
- 使用 opencv 和 C++ - 未定义的引用的链接器出现问题