C++ allows you to declare variables just before their use rather than at the top of the enclosing block. Thus, it is legal to declare a variable inside the condition of an if-statement:
class Base {/*..*/};class Derived: public Base {/*..*/};void func (Base& b){ if ( Derived *pd = dynamic_cast (&b) ) //declaration inside if-condition { //dynamic_cast was successful; use pd here return; }//pd goes out of scope at this point //otherwise dynamic_cast failed; variable pd is not in scope}
The advantage of declaring the pointer pd locally is obvious: it is always initialized with an appropriate value, and it isn’t visible to other parts of the program that should not use it.