最佳实践:对称函数的实现
Best practice: implementation of symmetric functions
给定一个简单的类:
class MyClass
{
public: int var;
};
和以下全局/自由操作符函数:
MyClass operator + ( const int& lhs , const MyClass& rhs )
{
return MyClass( lhs + rhs.var );
};
MyClass operator + ( const MyClass& lhs , const int& rhs )
{
return MyClass( lhs.var + rhs );
};
是否值得实现对称函数的两种方式?或者只是其中之一——如果是的话,是哪一个?这有一个通用的指导方针吗?
谢谢编辑# 1:
也有可能(感谢@Karoly Horvath):
MyClass operator + ( const int& lhs , const MyClass& rhs )
{
return MyClass( lhs + rhs.var );
};
MyClass operator + ( const MyClass& lhs , const int& rhs )
{
// return rhs + lhs; // or
return operator + ( rhs , lhs );
};
正如注释所说,您可以用一个来表示另一个。但如果对象确实不同(不是像这里的两个整数),我更愿意强制执行一些顺序以防止混淆。并且更倾向于MyClass + int
(MyClass
是主要参与者,把它放在第一位)。
只是个人意见。
相关文章:
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 分段 排序函数实现中的错误
- 无法去函数实现 vim
- C++ 20 中的运算符 == 和 <=> 应该作为成员还是自由函数实现?
- 为什么在这种情况下不调用我的虚拟函数实现?
- 我能否通过将函数实现为类对象方法来避免使用互斥锁
- 嵌套的模板结构构造函数实现
- C++接口的工厂函数实现
- 链表中的递归长度函数实现
- 我可以期望某些 STL 函数实现是可自动矢量化的吗?
- 如何将深拷贝构造函数实现到链表中?
- 虚拟 CTOR 的克隆函数实现是否有问题
- 没有捕获列表的 lambda 通常作为普通函数实现吗?
- C++二叉树打印函数实现
- C++:默认构造函数实现
- C++派生类中的纯虚函数实现
- 决定放置函数实现的位置
- 强制实施纯虚函数实现,可能使用不同的参数类型
- 如何让成员函数实现依赖于类的模板参数?
- 我们如何将Ostream函数作为类的成员函数实现,而不是作为朋友函数,以便我可以用作虚拟函数