如果不是类的方法,是否可以像这样重载-=
?
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的元素(按此顺序)。
似乎我上面尝试的选项是不可能的(我正在考虑收集向量中的所有索引,然后逐个从结构中删除它们)。还有其他方法可以做到这一点吗?
答案 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
。