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[]
它本身会返回一个引用,就像大多数标准容器的下标操作符一样.)