Common type of ubyte and const ubyte is int
Zoadian
no at no.no
Fri May 3 12:08:32 UTC 2024
On Friday, 3 May 2024 at 06:52:00 UTC, Dom DiSc wrote:
> On Thursday, 2 May 2024 at 17:30:12 UTC, user1234 wrote:
>> Just remembered, one argument that was once exposed by Walter
>> is be that arithmetic instructions for 32 bits registers would
>> be faster than the ones let's say for 16 or 8.
>
> Working on the processor word size is always the fastest. But
> that is totally independent of the result type. Calculation can
> always be done extended to word-size (or may need multiple
> words for large operands), but the result should have the
> common type.
> To say 32bit is always the best is only true for 32bit
> architectures.
> And having no promotion is not an option. If two operands are
> to be combined, we need some common type for the result, no
> matter how this result is produced.
>
> About type attributes - the operands may be mutable, const or
> immutable, but the result is a new value with attributes
> independent of the operand attributes. It should be assignable
> to mutable variables - to const or immutable objects only
> during initialization, to shared objects only if they are
> locked.
>
> At least that is what I expect.
just force the user to cast when the types are of incompatible
sizes instead of promoting them to some arbitrary type.
if the user uses smaller types, they generally do it for size
reasons, and don't want to end up with a bigger type.
you normally shouldn't use types <= int32, so it should not be an
issue in practice.
what is an issue however is the compiler picking the wrong
templates because of some promotion rules.
More information about the Digitalmars-d
mailing list