ifの()の中で変数を宣言できる。

例えば、以下のようなコードが書ける。

#include <iostream>

using namespace std;

struct Base{
	virtual void func() = 0;
};

struct A : public Base{
	virtual void func(){};
};

struct B : public Base{
	virtual void func(){};
};

struct C : public Base{
	virtual void func(){};
};

int main(){
	B* base = new B();

	if(Base* p = dynamic_cast<A*>(base)){
		cout << "p is pointer of A \n address : " << p << endl;
	}
	else if(p = dynamic_cast<B*>(base)){
		cout << "p is pointer of B \n address : " << p << endl;
	}
	else{
		cout << "p is pointer of C \n address : " << p << endl;
	}
}

変数の寿命は、ifが始まって、elseが終わるまでの範囲。

最初、用意したクラスにvirtual関数なしで、このコード書いたら、dynamic_castのところで文句を言われてしまった。virtual関数がないとポリモーフィズムなクラスと判定されなくて駄目だったらしい。なるほど。virtual関数を作ったら即解決。