On 01/22/2012 04:49 AM, Jonathan M Davis wrote:

> Another potentially nasty situation is subtraction. It
> can do fun things when you subtract one unsigned type from another if you're
> not careful (since if the result is negative and is then assigned to an
> unsigned integer...).

No need to assign the result explicitly either. Additionally, the subtraction is someties implicit.

When the expression has an unsigned in it, the temporary result is unsigned by the language rules since C:

import std.stdio;

int foo()
{
    return -2;
}

uint bar()
{
    return 1;
}

void main()
{
    writeln(foo() + bar());
}

The program above prints 4294967295.

It may make perfect sense for bar() to return an unsigned type (like arrays' .length property), but every time I decide on an unsigned type, I think about the potentially-unintended implicit conversion to unsigned that may bite the users of bar().

Ali

Reply via email to