C++ | 关于引用的一个细节
Posted 从0到1的点云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ | 关于引用的一个细节相关的知识,希望对你有一定的参考价值。
根据教材来讲,引用仅能初始化一次,即在定义的时候绑定一个变量,引用的出现使得语言简洁好理解很多,不必像指针那样复杂分析,但其底层仍然使用指针实现,所以常用来快速传递数据。
关于指针的中文可以用指向形容,引用可以用代表形容
int *a=&b;//a指向b
int &c=b;//c代表b
基于以上知识,在C++primier里有一个例子让人觉得奇怪。
这个例子使用C++11标准下的 rangefor特性:
for(auto &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++ | 关于引用的一个细节的主要内容,如果未能解决你的问题,请参考以下文章