It lets your own types use built-in operator syntax, so a fixed-point or vector type can be written a * b + c instead of a.mul(b).add(c), far more readable for anything that's naturally arithmetic, comparable, or indexable. Each overloaded operator is just a specially named function (operator+), resolved at compile time with no overhead beyond the operation itself. You should avoid it when the operator's meaning isn't self-evident: overloading + to send a packet or << to do something unrelated to shifting makes code actively misleading, because a reader assumes operators mean what they mean for built-in types. The rule is "overload only when the semantics match intuition"; otherwise a named method like device.send(p) is clearer. Overloading is for making natural notation natural, not for cleverness.
C++ for Embedded · Interview question
What does operator overloading buy you, and when should you avoid it?
A strong answer
What a weak answer sounds like
You know the answer. Do you know what gets you dinged?
Pro breaks down the answer most candidates actually give to this question — and the specific reason an interviewer marks it down. It’s the difference between sounding correct and sounding senior, on all 472 questions.
From the lesson
Function & Operator Overloading
One name, several type-specific implementations the compiler picks for you, and giving your own types natural operators, without the runtime cost of C's void* or tagged dispatch.