C ++不可变自定义类按引用或值传递

时间:2017-02-04 14:41:57

标签: c++ pass-by-reference immutability pass-by-value pass-by-const-reference

我制作了一个涉及大量数字和字符串计算的自定义类。我只通过提供访问器和没有变换器使我的类不可变。一旦构造了对象,就不会改变它的单个属性。

我的问题是,目前所有我的函数都是按值传递的。如果你有一个不可变的对象,甚至需要通过引用传递?由于需要不断创建副本,因此在内存方面是否会浪费价值?

例如:

class MyInteger
{
    private:
        const int val;

    public:
        MyInteger(const int a) : val(a) { };    
        int getValue() const { return val; }
        MyInteger add(const MyInteger other)
        {
            return MyInteger(val + other.getValue());   
        }
}

1 个答案:

答案 0 :(得分:1)

按值传递需要复制。如果您的班级很大且复制成本,您可以通过引用进行传递以避免此类复制。

因为它是不可变的,你可以通过reference-to-const传递它。

class MyInteger
{
    private:
        const int val;

    public:
        MyInteger(const int a) : val(a) { };    
        int getValue() const { return val; }

        MyInteger add(const MyInteger& other) const // Note this is passed by reference to const now
        //                           ~
        {
            return MyInteger(val + other.getValue());   
        }
}