I would like to know standard’s view on dereferencing pointer to base, but I’m not making any progress finding it. Take these two classes for example:
class Base
{
public:
virtual void do_something() = 0;
};
class Derived : public Base
{
public:
virtual void do_something();
};
void foo2(Base *b)
{
Base &b1 = *b; // how this work by standard?
}
void foo()
{
Derived *d = new Derived();
foo2(d); // does this work by standard?
}
So, basically, if pointer of type B to an object of type D is dereferenced, will slicing happen in place, or temporary will emerge? I’m prone to believe that temporary is not an option, because that would mean that temporary is instance of abstract class.
Whatever the truth, I would appreciate any pointers to the ISO standard that says one or the other. (Or third, for that matter. 🙂 )
EDIT:
I threw the point with temporary not being an option as a possible line of reasoning why it behaves the way it does, which is quite logical, but I can’t find confirmation in standard, and I’m not a regular reader.
EDIT2:
Through discussion, it became obvious that my question was actually about dereferencing a pointer mechanism, and not about splicing or temporaries. I thank everyone for trying to dumb it down for me, and I finally got answer to the question the puzzled me the most: Why I can’t find anything in the standard about this… Obviously it was the wrong question, but I’ve got the right answer.
Thnx
Yes.
But you can simply do this:
No need to use
static_cast. After all,Derivedis derived fromBase.Reply to your edit:
Yes. Pointer of type
Base*can be initialized with pointer of typeDerived*.—
No. They’re same name. If you mean,
Base &b1 = *b, then yes, that works.b1refers to the object pointed to byb.