unsigned policy (implicit conversions for complex?)
Frits van Bommel
fvbommel at REMwOVExCAPSs.nl
Tue Feb 13 01:24:23 PST 2007
Joel C. Salomon wrote:
> Walter Bright wrote:
>> Derek Parnell wrote:
>>> Characters are not numbers.
>>
>> That's an enticing point of view, and it sounds good. But Pascal has
>> that view, and my experience with it is it's one of the reasons Pascal
>> sucks.
>>
>> Examples:
>>
>> 1) converting text <=> integers
>> 2) converting case
>
> Neither are pointers numbers, but
> &a - &b
> yields a usable number. So long as
> x += c - 'a'
> works, I don’t care if
> 'a' * '3'
> breaks.
Thank $DEITY. If nobody made this point before I read all of this
subthread I would have to write a long post explaining this.
Let me reiterate that: characters are to integers as pointers are to
integers.
The difference between two pointers is an integer, and you can add
integers to pointers. These are the only arithmetic operations allowed
on pointers.
The same should hold if you substitute 'character' for 'pointer'
everywhere in previous two sentences.
Now, a short comment for each of the cases:
Walter Bright wrote:
> Examples:
>
> 1) converting text <=> integers
I don't see any reason why disallowing conversions from characters to
integers would disallow one to add or subtract integers from characters.
So (for c of type char/wchar/dchar) c - '0' can still be an integer, for
example.
But it makes absolutely no sense to be able to say c + '0'. Or c * '0'.
> 2) converting case
As above, (c - 'A') + 'a' can still be allowed. (c - 'A') is an integer,
add 'a' to get a character again.
> 3) doing compression/encryption code
These should probably use void[] for input and ubyte[] for output.
> 4) using characters as indices (isspace() for example)
If you're using Unicode this is a bad idea anyway. Except perhaps if you
use a sparce associative array, and then this isn't a problem anyway.
If you insist on using a regular array (and make sure the character
value is suitably small) you don't necessarily have to use a cast, you
can also subtract '\0' if you prefer.
Back to Joel:
>> 4) using characters as indices (isspace() for example)
>
> Is there a way to declare the index type of an array?
Only if you use an associative array.
More information about the Digitalmars-d
mailing list