Re: Virtual Functions And Inline Definition
 
Phlip wrote:
Marcelo De Brito wrote:
Hi!
Why is not possible to define a pure virtual inline function in C++?
For example:
class c1 {
  virtual void f() = 0 {} // ERROR
  virtual void g() = 0;    // FINE
};
Why?
I appreciate your comments, suggestions, and etc.
Because a virtual function is secretly a pointer to a function, and {} 
inside a class is the same as an explicit inline. 'inline' is a hint to 
the compiler it can push a method's opcodes into its call sites, without 
the overhead of calling a function and jumping into a different stack 
frame. Methods defined inside classes are 'inline' by default.
So?  A regular function can be both virtual and inline (defined in the 
class definition).
Taking the address of an inline function, in turn, blows away that 
"hint", and forces the function to appear out-of-line. And the compiler 
must take the address to generate the secret pointer for virtual dispatch.
That shouldn't prevent the compiler from being able to substitute the 
body of the function where it can.
All these rules
Which ones?  That a virtual function is secretly a pointer to a function?
 > were invented when C was young. Pure virtual is a late
addition, so it does what other abuses of inline cannot - it puts up an 
error if you attempt to mix the virtual and inline concepts together.
The C++ FAQ will have an answer here too, potentially more accurate!
Is that a promise?
V
-- 
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask