【发布时间】:2017-06-21 20:25:46
【问题描述】:
我制作了一个自定义类,其中涉及大量数字和字符串计算。通过只提供访问器而不提供修改器,我使我的类不可变。一旦构造了对象,就不会更改它的单个属性。
我的问题是,目前我的所有函数都是按值传递的。如果您有一个不可变对象,是否还需要通过引用传递?由于需要不断创建副本,因此按值传递是否会浪费内存?
例如:
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());
}
}
【问题讨论】:
-
通过引用传递 const。我认为对于内置类型并不重要。
-
@RawN 我不明白你的意思?
-
getValue必须是const。 -
@ChristianHackl 是的,对不起,我忘了在这个小演示 sn-p 中添加它。我刚刚添加了用于视觉辅助的代码,我上面的问题与该实现没有任何关系。
-
@Hatefiend:对不可变类的非常量引用没有意义。 const 引用确实有意义。关于复制与 const 引用的性能,这通常无关紧要,因为您的计算机太快并且您的编译器太聪明了。除非分析另有说明,否则一个好的经验法则是通过
const&传递类类型的不可变“大”对象,并按值传递原始对象以及迭代器和仿函数。考虑到这一点,几乎不会出错,您只需在非常具体的情况下重新考虑规则。
标签: c++ pass-by-reference immutability pass-by-value pass-by-const-reference