On 2011-06-27 07:49:19 -0400, Nub Public <nubpub...@gmail.com> said:

What's the rational for this behavior though? Resolving the address of a virtual function at compile time seems a little counter-intuitive to me.

The address for a virtual function isn't necessarily resolved at compile time. It is resolved at the point where you use the address-of operator, and that'll check the vtable at runtime if necessary.

In D:

        B b = new D;
        auto dg = &b.foo; // address is resolved at runtime by looking at the 
vtable
        dg(); // calls D.foo

In C++:

        void (B::*fptr)() = &B::foo;
        B b = new D;
        b.*fptr(); // vtable lookup here, calls D.foo


I guess this way is slightly more efficient.

It certainly is if you call the delegate more often than you create one.

--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/

Reply via email to