c++ - C++ 对对象的引用是否类似于 C 中的双指针?
问题描述
我正在阅读 Koenig 的“Accelerated C++”。在第 5 章中,Koenig 定义了一个引用向量参数的函数。在函数体中,创建一个新向量并将其分配给参数。
对对象的引用是否类似于 C 中的双指针?
我在想象一个局部变量,它是指向堆上数据结构的指针(在这种情况下是一个向量)。这个变量的地址(一个双指针)被传递给一个函数,并且在函数体中被解引用并分配了堆上一个新数据结构的地址(在这种情况下,一个新的向量)。
我意识到引用具有与指针不同的属性,并且引用不一定作为指针实现。但是,以上是一种合理的思考方式吗?
解决方案
指针始终是一个单独的值,在以下情况下:
int x = 1;
int *y = &x;
这里有两个值,x
和y
。它们具有不同的地址,例如:
&x != &y
在引用的情况下,它只是一个代码别名,而不是一个实际的独立事物,所以:
int x = 1;
int &y = x;
现在你有两个完全相同的名字:
&x == &y
从那时起,就像x
和y
现在一样,可以有效地互换。
请记住,必须取消引用才能使用指针。引用不需要这种特殊处理。
相似之处在于可以使用指针来操作共享值,或者可以使用指针指针来操作指针,但是存在一定程度的间接性使其不同。
在没有引用的 C 中,您使用指针代替,因此您具有如下功能:
void mutate(int* v);
这是一个指针,意思是“可变值”,尽管在 C++ 中它看起来像:
void mutate(int& v);
推荐阅读
- python-3.x - 使用基于主机名而不是 IP 地址的自签名证书保护 Python WebSocket
- reactjs - 故事书:有回报的行动
- arrays - 在c中拆分数组以交替4个元素
- laravel - 多次插入期间发生错误时,Laravel eloquent 不插入数据
- google-cloud-platform - pubsub 触发云函数不确认消息,即使在 func 执行成功后
- c++ - 如何生成始终触发信号 SIGFPE(div by zero) 的代码?
- css - 生产服务器上的 Starjedi TTF 字体不起作用
- python - TypeError: conv2d_v2() 得到了一个意外的关键字参数 'filter
- javascript - 使用 lastIndexOf 查找 Array of Array 中元素的最后一次出现
- python - 尝试安装 nltk 时出错 - Python