Re: question about new and delete operator
* Hendrik Schober:
Bo Persson wrote:
Hendrik Schober wrote:
Paavo Helde wrote:
Hendrik Schober <spamtrap@gmx.de> kirjutas:
[...]
Why 'int'? Will there ever be a sequence of -5 bytes?
We have had this discussion before in this group, several times.
I'm sorry I missed this. I'm not a regular reader. I don't
have enough time to be. Feel free to ignore any discussion
stemming from this.
In
C++, the unsigned types are quite specific types with special
rollover effects and there are tricky promotion rules for
mixed-signedness arithmetic expressions. Unless unsignedness is
strongly needed, I would avoid those types.
Well, call me strict, but I happen to believe that, for
specifying sizes, unsignedness is strongly needed. I also
believe that, if a positive value is needed in order to
call a function, the function's interface should say so.
But that doesn't save you from anyone passing a -5, as that will
"work" for an unsigned parameter as well.
Of course, it doesn't. However, it does communicate
that -5 is not a valid value.
If you fail to communicate the function's contract to client programmers then
you have a problem. You seem to think that that communication problem can be
alleviated by using unsigned types in C or C++. Well that's backward: to anyone
competent you're just communicating that you don't know what you're about, so
that it would be wrong to expect *anything* to be reasonable, i.e., by using
unsigned type you actively engage in failing to do what you wanted, communicate.
And if the function fails to enforce its contract to the degree possible you
have a much more serious problem, because all experience shows that without
automated error detection it's practically impossible to avoid errors.
The client code programmer may have a 100% perfect understanding of your
function's contract, but still manage to call it with invalid arguments.
And what happens when you pass -5 to your unsigned formal argument?
The language standard then guarantees wrapping, that you get the value 2^n-5
where n is the number of value representation bits, and do you check for that?
No? I thought so.
Cheers & hth.,
- Alf