Operator overloading, structs

Denis Koroskin 2korden at gmail.com
Thu Jun 4 11:20:55 PDT 2009


On Thu, 04 Jun 2009 22:10:58 +0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> Max Samukha wrote:
>> On Thu, 04 Jun 2009 10:41:31 -0500, Andrei Alexandrescu
>> <SeeWebsiteForEmail at erdani.org> wrote:
>>
>>> You are mistakenly presupposing that if() takes a bool. In reality  
>>> if() accepts a bool, an integral, a floating-point type, a pointer, an  
>>> array, or a class reference.
>>  or delegate
>
> I was sure I forgot something... and hash too. Anything that can be  
> compared against 0 or null.
>
> Andrei

Is it considered a good practice?

Technically, the following construct is not exactly portable:

float f = ..;
if (f) {
}

because C (nor D) standard doesn't guaranty that float(0) will be  
implemented as "all bits set to 0" on target platform (although it  
currently holds true).

I believe it is better to use an epsilon, instead:

if (fabsf(f) < epsilon) {
}

unless you need to compare strictly against 0:

if (f == 0) {
}



More information about the Digitalmars-d mailing list