C++17 is feature complete

luminousone via Digitalmars-d digitalmars-d at puremagic.com
Mon Jun 27 09:38:07 PDT 2016


On Monday, 27 June 2016 at 16:10:13 UTC, Ola Fosheim Grøstad 
wrote:
> On Monday, 27 June 2016 at 16:03:44 UTC, luminousone wrote:
>> C++ post pended vtable pointers, Are not implementation 
>> dependent.
>
> I don't know what «post pended vtable pointers» means. Which 
> section of the C++ spec are you referring to?
>
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf

Member name lookup, Virtual functions, some where in their.

When you declare an object,

class a{
   int b;
   int c;
   //** the compiler puts a hidden variable here called the vtable 
pointer **//
   void **vtble;
   virtual void somefunc();
}

All of your virtual functions are referenced from this table; So 
that inherited classes will call the correct function based on 
the type of said object and the overrides in said object.

C#, D, put the vtable as the very first item in the base most 
class, C++ puts this as the last item in the base most class, C# 
and D use the first item in the vtable for type information 
generated by the compiler at compile time. Because the vtable is 
in the same place in ALL objects type reflection is very easy to 
implement. In C++ the exact position of the vtable depends on 
what is in the base most class, it might be 8bytes in, maybe 20, 
maybe 200, you just don't know, And certainly the runtime can't 
know.

Granted their are really bloated, slow, and memory chugging ways 
around this, such as storing a list of every allocated object in 
memory somewhere, and having reflection calls search this using 
an objects memory address.


More information about the Digitalmars-d mailing list