Я знаю, что могу легко ответить на этот вопрос самому себе, указав код и посмотрев, скомпилирован ли он. Но так как я не мог найти подобный вопрос, я думал, что это ценность для обмена знаниями. Скажем, я перегружаю оператор + для MyClass. Могу ли я перегрузить его несколько раз. Различные перегрузки для разных типов. Как это:Перегрузка нескольких операторов C++ для одного и того же оператора
class MyClass{
...
inline const MyClass operator+(const MyClass &addend) const {
cout<<"Adding MyClass+MyClass"<<endl;
...//Code for adding MyClass with MyClass
}
inline const MyClass operator+(const int &addend) const {
cout<<"Adding MyClass+int"<<endl;
...//Code for adding MyClass with int
}
...
};
int main(){
MyClass c1;
MyClass c2;
MyClass c3 = c1 + c2;
MyClass c4 = c1 + 5;
}
/*Output should be:
Adding MyClass+MyClass
Adding MyClass+in*/
Поэтому я хочу, чтобы сделать это, что я строю класс, который я хочу быть оптимизированы, насколько это возможно. Для меня здесь самое большое беспокойство. Так что литье и использование корпуса переключателя внутри оператора + перегруженная функция не является вариантом. Я заметим, я сделал и перегрузку встроенной. Предположим на секунду, что компилятор действительно устанавливает мои перегрузки, тогда он предопределен во время компиляции, который будет запускаться, и я сохраняю вызов функции (путем inlining) + сложный сценарий сценария переключения (в действительности, будет 5+ перегрузки для оператора +), но я все еще могу писать легко читаемый код с помощью основных арифметических операторов. Итак, я получу желаемое поведение?
Если вы заинтересованы в производительности, с точки зрения класса, возвращение '* this' через' const Myclass & 'будет лучше. Теперь, с точки зрения пользователя (если вы не компилируете на C++ 0x), вы должны использовать '+ =' вместо '+' и '=', чтобы избежать бесполезных времен, которые, возможно, не будут оптимизированы каким-то дерьмовым компиляторы. – paercebal
Я понятия не имею, почему это было отклонено. Это совершенно правильный вопрос.(Тот факт, что вы найдете эту информацию в другом месте, не является основанием для того, чтобы здесь не найти ответ.) – sbi
@paercebal: Он реализует сумму, а не прирост. Если бы он выполнял 'operator + =', то возврат ссылки был бы точным (после изменения внутреннего состояния), но 'a + b' не предназначен для изменения' a', а скорее производит третье значение, которое отличается от обоих 'a' и' b'. –