ushort + ushort = int?
Andrey
saasecondbox at yandex.ru
Mon Aug 20 10:29:56 UTC 2018
On Monday, 20 August 2018 at 09:56:13 UTC, Jonathan M Davis wrote:
> It's a combination of keeping the C semantics (in general, C
> code is valid D code with the same semantics, or it won't
> compile) and the fact that D requires casts for narrowing
> conversions. When you add two shorts in C/C++, it converts them
> to int just like D does. It's just that C/C++ has implicit
> narrowing casts, so if you assign the result to a short, it
> then converts the result to short even if that means that the
> value could be truncated, whereas D requires that you
> explicitly cast to convert to int rather than silently
> truncating.
>
> It does prevent certain classes of problems (e.g. there are
> plenty of bugs in C/C++ due to implicit narrowing conversions),
> but it can also get pretty annoying if you're doing much math
> on integer types smaller than int, and you either know that
> they aren't going to overflow or truncate, or you don't care
> that they will. But if you're only doing math on such small
> integeral types occasionally, then it pretty much just means
> that once in a while, you get briefly annoyed when you forget
> to add a cast, and the compiler yells at you.
>
> - Jonathan M Davis
Understood.
Is there a workaround to reduce amount of manual casts of input
types T into output T?
May be one can write some module-global operator "plus",
"minus"..?
Like in C++:
> template<typename T>
> T operator+(T first, T second)
>{
> return static_cast<T>(first + second);
>}
More information about the Digitalmars-d-learn
mailing list