On 02/02/2012 10:18 AM, bearophile wrote:

> The cast() is meant to be a light and very quick conversion,
> usually done at compile-time (unless it's a dynamic cast),

I first read it as if you were saying that dynamic cast is the only one that is done at runtime. Actually many casts are done at runtime even for fundamental types.

> to throw no exceptions, and generally unsafe.

Just to be complete: You mean it for fundamental types. Of course user types' opCast operators may throw:

import std.exception;

class C
{
    int opCast(T : int)() const
    {
        enforce(false, "Not good.");
        return 42;
    }
}

void main()
{
    auto c = new C;
    auto i = cast(int)c;
}

> to!() is meant to be safer, to throw exceptions if the
> conversion fails, and it uses library code, so it's more
> flexible, and often performs some work at run-time too. Given
> such design a string->int conversion is better left to to!().

Agreed.

>
> Bye,
> bearophile

Ali

Reply via email to