!in operator?

Frits van Bommel fvbommel at REMwOVExCAPSs.nl
Mon May 25 03:37:20 PDT 2009


Stewart Gordon wrote:
> Jason House wrote:
> <snip>
>> Method 1:
>>
>> if (x !in y)
>>   foo();
>> else{
>>   auto z = x in y;
>>   bar(z);
>> }
>>
>> Method 2:
>>
>> auto z = x in y;
>> if (z is null)
>>   foo;
>> else
>>   bar(z);
>>
>> Method 1 essentially calls in twice while method 2 calls in once.
> <snip>
> 
> But there's no requirement to look it up after finding out whether it's 
> there or not.
> 
> And how's it any different from
> 
> if (x in y) {
>     auto z = x in y;
>     bar(z);
> } else {
>     foo();
> }
> 
> or even
> 
> if (x in y) {
>     bar(y[x]);
> } else {
>     foo();
> }
> 
> ?
> 
> Besides, why would any decent compiler not optimise it to a single lookup?

Interesting fact: LDC currently optimizes the first case (at -O3), but not the 
second. That's because it apparently uses a different libcall for 'x in y' than 
it does for 'y[x]' -- even though the code in the libcalls are equivalent.

I think I just found inspiration for my next commit :).



More information about the Digitalmars-d mailing list