fin*_* bs 2 c++ scope reference
来自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;
}
Run Code Online (Sandbox Code Playgroud)
因为fail返回,我知道它是一个局部变量不是问题.但为什么pass能够超出当地范围呢?
您可能认为该引用students正在被"重新引用"到局部变量pass.不是这种情况.而是operator=在传入的现有对象上调用students,并将数据pass复制到它.
当你来自C时,你可能更熟悉指针而不是引用.我们假设它students被声明为指针,即
vector<Student_info>* students
Run Code Online (Sandbox Code Playgroud)
您的问题意味着您认为您引用的代码等同于以下内容
students = &pass;
Run Code Online (Sandbox Code Playgroud)
实际上它等同于此
*students = pass;
Run Code Online (Sandbox Code Playgroud)
事实上,这两个操作中的第一个不能在引用上执行 - 引用不能被"重新引用".