C++ | 关于引用的一个细节

Posted 从0到1的点云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ | 关于引用的一个细节相关的知识,希望对你有一定的参考价值。

根据教材来讲,引用仅能初始化一次,即在定义的时候绑定一个变量,引用的出现使得语言简洁好理解很多,不必像指针那样复杂分析,但其底层仍然使用指针实现,所以常用来快速传递数据。


关于指针的中文可以用指向形容,引用可以用代表形容

int *a=&b;//a指向bint &c=b;//c代表b


基于以上知识,在C++primier里有一个例子让人觉得奇怪。

这个例子使用C++11标准下的 rangefor特性:

forauto &i:ivec){i=0;}


这里,一方面说引用只能绑定一次,另一方面,每次循环i又被重新引用绑定


事实上,这里,可以改写为

for(i=ivec.begin();i!=ivec.end();i++){auto &c =*i;c=0;}

其实,这里range for里的迭代变量每一次就离开作用域一次,销毁一次,下一次绑定的是一个新的引用,只不过引用名字每次都相同。这样就可以理解这种行为了。

而对于常规三段式的for循环,for里定义的迭代变量则在循环期间一直存在。


以上。

参考书籍:C++ primer


以上是关于C++ | 关于引用的一个细节的主要内容,如果未能解决你的问题,请参考以下文章

细节问题

C++ 指针取消引用赋值

C++中的const关键字深入理解(关于引用指针顶层const)

c++关于右值引用的那些事

向Linus学习,让代码具有good taste

关于强引用软引用弱引用幻象引用,你该如何回答?