2009年01月10日

ifの条件式の中でも変数を宣言できる

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++
Posted by 新坂 | Comment(1) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
勉強になりました。これのおかげで、Javaのsynchronized()もどきをマクロで書けました。
enter(),leave()メソッドを持ったCriticalSectionクラスと、そのenter(),leave()をコンストラクタ・デストラクタで呼び出すAutoLockerクラスを用意しておき、

#define synchronized(x) if(AutoLocker a=x);else

AutoLockerインスタンスがfalseを返してくれるよう、boolへのキャストを定義してあります。
Posted by Sampo at 2009年05月15日
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

この記事へのトラックバックURL

※ブログオーナーが承認したトラックバックのみ表示されます。

※言及リンクのないトラックバックは受信されません。


この記事へのトラックバック