CSM*_*CSM 8 c++ operator-overloading
在C ++中,当LHS是要声明的类时,二进制运算符可以被一个或两个运算符覆盖。如果使用两个参数声明,则必须是非成员函数。在此代码中,两个声明是相同的。
class MyClass
{
public:
MyClass operator+(const MyClass&);
}
MyClass operator+(const MyClass&, const MyClass&);
Run Code Online (Sandbox Code Playgroud)
是否有理由不能将后者作为静态成员函数完成?像这样
class MyClass
{
public:
static MyClass operator+(const MyClass&, const MyClass&);
}
Run Code Online (Sandbox Code Playgroud)
这将使编写流输入/输出运算符更加容易(我知道您可以使用它friend来声明运算符)
逻辑a+b可以解释为operator+(a,b)或a.operator+(b),如果您斜视,则每个看起来都合理。前者找不到任何成员函数;后者可以找到静态的,但只会无用地传递b给它们。静态a.operator+(a,b)变量可以通过解释为来正确调用,但是会尝试将一个额外的参数传递给任何非静态成员(例如,可能将一元变量-转换为二进制变量)。由于第一个参数的类型(原始)会通过名称查找来限制候选对象,因此它也会破坏允许在第一个参数上进行转换的功能。
在一种情况下,operator+(a,b)当操作符本身出现在类(成员函数)中时,可以找到成员函数。对此类名称的不合格查询会特别忽略类成员,因为类成员(本身是非静态的)将具有错误的arity,并且(通常)将用于错误的类型(为同一运算符屏蔽所有非成员函数!) 。
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |