我有一个主要包含整数的C ++类,我希望停止一个将两个加在一起的方法,我不想重载+运算符。
我相信我有两个选择:
var_result = var1.add(var2);
var_result.add(var1, var2);
其中var_result,var1和var2属于同一类型。
我认为第一个更直观,但第二个不是创建一个可能带来性能优势的实例。我该如何做出这个决定呢?使用我的代码,其他人可以直接看到它。
我意识到我可能正在以#34;意见为基础进行切割。关闭这个问题,但希望这里有一定程度的客观性。
答案 0 :(得分:3)
使用与add()
相同的(首选)语义编写operator+
方法:编写一个按值返回新对象的自由方法。
示例:
var_result = add(var1, var2);
var_result2 = add(var1, var2).add(var3, var4);
// etc...
它允许您链接方法,并尊重原始类型可用的常用语义。
注意:强>
operator+
会使用您为类型定义的类成员operator+=
,同时允许var_result += var1
所以你的最终设计应该是这样的:
class X
{
public:
X& operator+=(const X& rhs) { ...; return *this; }
};
X add(X lhs, const X& rhs)
{
return lhs += rhs;
}
或者,如果你不想要operator+=
(这是有意义的,至少是为了一致性):
class X
{
public:
X& add(const X& rhs) { ...; return *this; }
};
X add(X lhs, const X& rhs)
{
return lhs.add(rhs);
}
答案 1 :(得分:1)
创建一个新项目,因为任何空间/时间性能成本很小,使用不可变对象有很大的优势。