最佳实践:对称函数的实现

Best practice: implementation of symmetric functions

本文关键字:函数 实现 对称 最佳      更新时间:2023-10-16

给定一个简单的类:

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是主要参与者,把它放在第一位)。

只是个人意见。