C ++参考参数使用

时间:2016-04-11 22:28:17

标签: c++ function parameters reference

我正在读这个book而我无法理解写在其中的一些代码。该程序应该作为公司的基本数据库。它应该包含员工对象,其中包含他们的薪水,公司状态(雇佣/解雇),并且有一些方法可以调用该对象来更新它。

这是他们提供的代码

#pragma once

#include <string>

namespace Records {
    const int kDefaultStartingSalary = 30000;

    class Employee
    {
    public:
        Employee();

        void promote(int raiseAmount = 1000);
        void demote(int demeritAmount = 1000);
        void hire(); // Hires or rehires the employee
        void fire(); // Dismisses the employee
        void display() const;// Outputs employee info to console

        // Getters and setters
        void setFirstName(const std::string& firstName);
        const std::string& getFirstName() const;

        void setLastName(const std::string& lastName);
        const std::string& getLastName() const;

        void setEmployeeNumber(int employeeNumber);
        int getEmployeeNumber() const;

        void setSalary(int newSalary);
        int getSalary() const;

        bool getIsHired() const;

    private:
        std::string mFirstName;
        std::string mLastName;
        int mEmployeeNumber;
        int mSalary;
        bool mHired;
    };
}

我似乎无法理解为什么在 setFirstName setLastName 上他们通过引用传入参数,然后在其他setter / getters中(如 setSalary )它们正在传递值。如果有人能解释为什么这是一个好习惯,那就太棒了!他们没有在书中解释他们的选择。

1 个答案:

答案 0 :(得分:0)

通过引用传递意味着您不必在内存中复制数据,仅用于函数调用,因为您只发送它的地址,因此您正在使用原始数据(也是为什么你可能想让它成为const引用。对于一个简单的变量,它在性能意义上并不重要,但对于更大的对象,避免必须复制它更快。

一个基本的假设是,使用对象的引用和变量的值是个好主意。但在某些情况下,它确实取决于很多其他事情。例如,如果函数要进行大量繁重的计算,并且您有一些对象(可能在内存中的任何位置)的引用,那么您可能会遇到缓存未命中,从而导致性能损失。因此,针对不同情况需要考虑很多可能的事情。但是先验一下,rule.of.thumb使用对象的引用和变量的by-value是一种总体上的好方法。