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++
2009年01月10日 【プログラミング】 | コメント(1) |

この記事へのトラックバック
この記事へのコメント

勉強になりました。これのおかげで、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日

コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。