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関数を作ったら即解決。