重载operator- =没有类

时间:2014-09-12 22:01:08

标签: c++ operator-overloading

如果不是类的方法,是否可以像这样重载-=

vector<int>& operator-=(int a, int b){
    vector<int> v;
    v.push_back(a); v.push_back(b);
    return v
}

我在家庭作业中有一行看起来像这样:

SomeStructure-=1-=2-=3;

它应该做的是从结构中删除索引为1,2和3的元素(按此顺序)。

似乎我上面尝试的选项是不可能的(我正在考虑收集向量中的所有索引,然后逐个从结构中删除它们)。还有其他方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:4)

赋值运算符是从右到左的关联。

来自C ++标准

  

5.17分配和复合赋值运算符[expr.ass]

     

1赋值运算符(=)和复合赋值运算符   所有组从右到左。

所以这个表达

SomeStructure-=1-=2-=3;

无论如何都是无效的,因为你可能不会写

2 -= 3;

您可能不会为内置类型重载运算符。

我建议简单地编写一个函数,例如名称为erase,其参数类型为std::initializer_list。在这种情况下,您可以编写

SomeStructure.erase( { 1, 2, 3 } );

答案 1 :(得分:1)

当重载运算符时,至少有一个作为参数传递的类型必须是non primitive type,这不是你的情况,这就是为什么我们通常重载运算符inside classes等等很少见global functions