我一直在做一些工作,需要有一些它們的運算符重載(=,==,+,!=等)我編寫運算符函數,但有時它們是沒有被調用,或者編譯器的行爲就像它不存在一樣。 例如:運算符不解析爲運算符函數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(),而不是隻能使用該符號。 (我曾與直接的例子,以及複製字符的字符要做到這一點,但有時它的工作)