通过引用参数将局部变量分配给
Assigning local variable to by-reference parameter
来自C,加速C++第5章中的这个例子引起了我的注意:
vector<Student_info> extract_fails(vector<Student_info>& students) {
vector<Student_info> pass, fail;
for (vector<Student_info>::size_type i = 0; i != students.size(); ++i)
if (fgrade(students[i]))
fail.push_back(students[i]);
else
pass.push_back(students[i]);
students = pass;
return fail;
}
由于返回了fail
,我知道它是一个局部变量不是问题。但是为什么pass
能够脱离本地范围呢?
您可能认为引用students
正在被"重新引用"到局部变量pass
。事实并非如此。相反,对通过students
传入的现有对象调用operator=
,并将来自pass
的数据复制到其中
由于你来自C,你可能更熟悉指针而不是引用。假设students
被声明为指针,即
vector<Student_info>* students
你的问题意味着你相信你引用的代码相当于下面的
students = &pass;
而实际上它相当于这个
*students = pass;
事实上,这两个操作中的第一个不能在引用上执行——引用不能被"重新引用"。
pass
对象不会脱离本地作用域。
行students = pass
将pass的值(对于向量,这是元素)复制到学生中。
students
是通过引用传递的,因此允许修改作为参数传递的原始值。声明
students = pass;
就是这样。
相关文章:
- 使用的未初始化局部变量'Quick'
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- 将共享指针传递给函数参数 - 将其分配给局部变量的正确方法是什么
- 分配给静态变量的局部变量;编译错误在'c'但在 C++ 中成功
- 局部变量 'sp' 在被读取之前在所有路径中重新分配
- C++标准对局部变量的存储和分配有什么保证?
- 指针被分配给错误的局部变量
- 将局部方法变量分配给类指针
- 当函数结束时,它的局部变量被解除分配
- 方法用于最快的分配,并且不需要将动态大小的数组对象作为局部变量
- MASM 局部变量:动态分配的数据
- 为什么为堆栈中的局部变量分配的内存多于C++中所需的内存
- 将引用参数分配给局部变量
- 在 C++ 中将局部变量分配给全局变量
- 如何为局部变量分配内存
- 在c++中,通常在什么时候为局部变量分配内存?
- 在 c++ 中存储块内局部变量的分配
- 返回已分配的局部变量
- c++内存管理对局部变量的内存分配
- c++局部静态变量分配