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

时间:2013-10-26 15:38:08

标签: 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
}

3 个答案:

答案 0 :(得分:12)

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

Employee e = v[i];

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

Employee &e = v[i];

它将按预期运行。

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

答案 1 :(得分:3)

您没有更改矢量内容。而是将其分配给另一个新的Employee对象e并修改:

Employee e = v[i];
e.salaryRaise(2);

将其更改为:

v[i].salaryRaise(2);

这将修改向量中的元素。

答案 2 :(得分:1)

您正在复制矢量中的元素:

Employee e = v[i]; // e is a copy of v[i]

你可能意味着

v[i].salaryRaise(2);