通过引用函数传递向量,但更改不会持续存在

Rei*_*eid 8 c++ vector pass-by-reference

我是C++的新手所以请原谅noob问题.在我的程序中,我通过引用将一个"Employee"对象的向量传递给一个函数,该函数在向量中的每个对象上调用一个Employee成员函数,将"salary"提高"r"%(在这种情况下为2%).我已经通过记录调用验证了这种情况(薪水在函数中发生了变化),但更改不会持续...当我再次打印Employee对象时,工资不变.感谢任何帮助!

// main.cpp
void raiseAllBy2Percent(vector<Employee> &v)
{
for (int i = 0; i < v.size(); i++)
    {
    Employee e = v[i];
    e.salaryRaise(2);
    }
}

// Employee.cpp
void Employee::salaryRaise(double r)
{
cout << "**salaryRaise called";
_salary += (r/100 * _salary);
cout << "**new salary: " << _salary; // This logs with the change as expected
}
Run Code Online (Sandbox Code Playgroud)

小智 12

您是通过引用传递向量,但在此行:

Employee e = v[i];
Run Code Online (Sandbox Code Playgroud)

您正在复制员工对象.也可以作为参考:

Employee &e = v[i];
Run Code Online (Sandbox Code Playgroud)

它会表现得像预期的那样.

(请注意,这只能起作用,因为std::vector::operator[]它本身会返回一个引用,就像大多数标准容器的下标操作符一样.)