Where do you see dynamic memory allocations being needed in that example? I only see locals that a good compiler can fairly easily optimize away.
Also, there’s a simple bijection between expressions with operators and two-argument function calls:
a + b * c
+(a, *(b,c))
plus(a, times(b,c))
Because of that, I don’t understand why operator overloading should give better optimization opportunities than function calls.