for
文が for (初期化式; 条件式; 加算式)
になっているのと同様に、if
文とswitch
文にも、条件式の前準備としての初期化式をif (初期化式; 条件式)
のように書けるようになります。
// mapへの要素挿入 if (auto p = m.try_emplace(key, value); !p.second) { // 要素挿入に失敗 (すでにkeyが登録されている) } else { // 挿入した要素を使用して何か処理する process(p.first); }
if (status_code c = open_file(); c != SUCCESS) { // 処理に失敗 // 失敗の原因ごとに処理をする if (c == NO_FILE) { } if (c == FORMAT_ERROR) { } }
switch (Button button(args); Status s = button.status()) { case OK: break; default: throw BadStatus(toString(s)); }
構文としては、
if (condition) if (init-statement; condition)
のように2種類用意されるのではなく、初期化式を省略可能にして、以下のように定義されます。
if (init-statement;(opt) condition)
そのため、後に紹介するif constexpr
文でも初期化式は使用できます。
参照
お断り
この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。