bearophile can say "i told you so" (re uint->int implicit conv)

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Tue Apr 2 12:47:52 PDT 2013


On 4/2/13 3:49 AM, Don wrote:
> IMHO, array.length is *the* place where unsigned does *not* work. size_t
> should be an integer. We're not supporting 16 bit systems, and the few
> cases where a size_t value can potentially exceed int.max could be
> disallowed.
>
> The problem with unsigned is that it gets used as "positive integer",
> which it is not. I think it was a big mistake that D turned C's
> "unsigned long" into "ulong", thereby making it look more attractive.
> Nobody should be using unsigned types unless they have a really good
> reason. Unfortunately, size_t forces you to use them.

I used to lean a lot more toward this opinion until I got to work on a 
C++ codebase using signed integers as array sizes and indices. It's an 
pain all over the code - two tests instead of one or casts all over, 
more cases to worry about... changing the code to use unsigned 
throughout ended up being an improvement.

Andrei



More information about the Digitalmars-d mailing list