我一直在做一些工作,需要有一些它们的运算符重载(=,==,+,!=等)我编写运算符函数,但有时它们是没有被调用,或者编译器的行为就像它不存在一样。 例如:运算符不解析为运算符函数C++
class Thing{
public:
Thing& operator=(const Thing& _other){
// implementation
}
bool operator==(const Thing& _other){
// implementation
}
Thing& operator+(const Thing& _other){
// implementation
}
};
这是包括类(构造(默认),构造(副本),析构函数,等等)的其他成员函数,但有时该方法被忽略。
void Foo(Thing & thing1, Thing & thing2){
//snip
if(thing1 == thing2){
//do some stuff
}
//snip
Thing tempThing();
thing1 = thing2 + &tempThing;
//snip
}
在视觉工作室我去编译,它trows没有操作员需要的东西的左侧参数,然后如果我指定thing2->operator+(&tempThing);
那么它的工作原理,这是令人困惑,因为它应该可以解决该如果存在一个Class operator#(Class)
函数,并且参数可以转换为合适的类型,那么所有需要的就是使用该运算符,并且编译器将用运算符函数代替它,或者至少调用操作员功能。
thing1 = thing2 + thing3; // written line
thing1.operator=(thing2.operator+(thing3));
为什么我需要指定操作符函数。编译器不应该为我做这件事。
编辑:这是一个关于一般行为的问题,而不是实际的代码正确性。即使我编写语句,因为他们应该由于某种原因必须指定实际的operator(),而不是只能使用该符号。 (我曾与直接的例子,以及复制字符的字符要做到这一点,但有时它的工作)