if括弧内で定義した変数の生存期間
ifの括弧内で定義した変数ってelseのスコープでも有効なのね。知らなかった。
// hoge.cpp #include <string.h> #include <stdio.h> int main(int argc, const char** argv) { if(int len = strlen(argv[1])) { printf("then, '%s' len = %d\n", argv[1], len); } else { printf("else, '%s' len = %d\n", argv[1], len); // ここでも len が使える } return 0; }
$ g++ hoge.cpp && ./a "xyz" && ./a "" then, 'xyz' len=3 else, '' len=0
vc14から同一スコープ内で同名の変数を定義すると警告が出るようになったので、始めて気付きました。
// 最初に見つかったインターフェースを使う if(auto ptr = get_primary_interface()) { ptr->doit(); } else if(auto ptr = get_secondary_interface()) { ptr->doit(); } else if(auto ptr = get_avoid_interface()) { ptr->doit(); } else { assert(!"絶望的"); }
こんなことをよく書いてたので怒られまくり。