I know that if you're going to inherit from multiple classes that both have the same base, it's much "cleaner" to have them virtually inherit from the base. My question is, what does the "virtual" keyword do and why not just put it on every inheritance to allow later possible multiple inheritance (assuming that fits your model)?

In other words, if I have a class "A" that inherits from "B" and "C" which both inherit from "D" and I know that "A" might (but also might not) be included in some other class' multiple inheritance (say class "F" that inherits from "A" and "G" both) is it OK to do:

Code:
class A : public virtual B, public virtual C
{
};
Does that make any difference performance/memory wise?