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

C++ Immutable custom class pass by reference or value

我做了一个自定义 class,其中涉及大量的数字和字符串计算。我通过只提供访问器而不提供修改器使我的 class 不可变。一旦构建了对象,就不会更改它的单个 属性。

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

例如:

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());   
        }
}

Pass-by-value 需要复制。如果你的 class 很大并且复制成本高,你可以 pass-by-reference 来避免这样的复制。

因为它是不可变的,你可以通过 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());   
        }
}