C++でforの初期設定部で変数を宣言するというのはみんな使っていると思いますが、同じようにifの条件式の中でも変数を宣言できます。
for (int i = 0; i < 10; ++i) { ... } if (double d = prim(true)) { ... }
どちらの場合も宣言された変数は、それに続くブロックの中だけで有効となります。
これだけだと、ただのC++トリビアでしかありませんが、dynamic_castと組み合わせるとこの構文が威力を発揮します。
if (Hoge *phoge = dynamic_cast<Hoge*>(ptr)) { ... }
dynamic_castではキャストの結果を保持する変数が欠かせませんし、その変数が意味を持つのはキャストに成功したときのみです。この書き方ならば、変数のスコープを最小に抑えることでバグの発生も抑えることができます。
タグ:C++


enter(),leave()メソッドを持ったCriticalSectionクラスと、そのenter(),leave()をコンストラクタ・デストラクタで呼び出すAutoLockerクラスを用意しておき、
#define synchronized(x) if(AutoLocker a=x);else
AutoLockerインスタンスがfalseを返してくれるよう、boolへのキャストを定義してあります。