gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:12:56 26 4
gpt4 key购买 nike

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

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

例如:

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

最佳答案

按值传递需要复制。如果您的类(class)很大并且复制成本高,您可以将其设为按引用传递以避免此类复制。

因为它是不可变的,所以您可以通过对常量的引用来传递它。

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

关于C++ 不可变自定义类通过引用或值传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42041635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com