Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2011-09

Overloading the increment operator (+=)

6 messages · 4 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Flávio Etrusco

Hello,
If write a declaration without result it complains about invalid syntax; if I add a result it says "impossible operator overload". Does FPC allow overloading the += operator? If not, why?

Best regards,
Flávio

Marcos Douglas
to Flávio Etrusco

2011/9/10 Flávio Etrusco

Show quoted text 5 lines
Hello, If write a declaration without result it complains about invalid syntax; if I add a result it says "impossible operator overload". Does FPC allow overloading the += operator? If not, why?
You do not need overload the += operator, just do it in := operator.

Marcos Douglas

Flávio Etrusco
to Jonas Maebe
Jonas Maebe wrote 10 lines
On 10 Sep 2011, at 22:32, Flávio Etrusco wrote: > Does FPC allow overloading the += operator? If not, why? It is translated into "x:=x+y" at the parser level, and overload resolving happens later. So once you overload "+" (and := if required), "+=" should also work. Jonas

Yes, I realize this. I'm revisiting the "StringBuilder" issue, and "+=" can't be efficiently implemented with two operations (since concatenating the operand would be unexpected to the user...).

-Flávio

Jürgen Hestermann
to Flávio Etrusco
"+=" can't be efficiently implemented with two operations (since concatenating the operand would be unexpected to the user...).

Why not use "inc(x,y)"?

Flávio Etrusco
to Jürgen Hestermann
Jürgen Hestermann wrote 9 lines
Flávio Etrusco schrieb: > > "+=" can't be efficiently implemented with two operations (since > concatenating the operand would be unexpected to the user...). Why not use "inc(x,y)"? _______________________________________________

AFAICS it's not possible either. (Notice I'm talking about operating on an 'object').

What I meant is:
    MyStringBuffer += 'String';
Is replaced with:
    MyStringBuffer := MyStringBuffer + 'String';
What if is was:
    MyStringBuffer := OtherStringBuffer + 'String';

So concatenating the 'String' in the StringBuffer's internal buffer would be unexpected IMO (but maybe just making it safe, even though unexpected, would be ok).
Also, since the assignment operator for same type can't overload, I can't make adjustments to avoid "sharing" the buffer so I'm left with using an AnsiString as buffer, or use some self-pointing canary which must be checked on every buffer operation.

-Flávio