今更理解

switch (i){
case 0:
  string hoge("hoge");
  cout << hoge << endl;
  break;
case 1:
  string piyo("piyo");
  cout << piyo << endl;
  break;
default:
  cout << "moke" << endl;
}

私はいまだにスコープってものが分かってないコトがバレバレなコード。
コレがどーにも通らなくて、switchの外でhoge,piyoを宣言するとか、こんなことをしてひじょーに悲しい思いをしてた。


んで、ちょいと調べてみたら、何のことは無い

switch (i){
case 0:{
  string hoge("hoge");
  cout << hoge << endl;
  break;
  }
case 1:{
  string piyo("piyo");
  cout << piyo << endl;
  break;
  }
default:
  cout << "moke" << endl;
}

コレでよろしいらしい。
スコープを別にして、変数の…なんだ、宣言範囲?を固めてやればよろしい。
前のままだとコンストラクタが呼ばれないのにデストラクタだけ呼ばれるケースとかが出てきてよろしくないらしい。なんとなく納得。

ところで

switch (i){
case 0:
  string hoge("hoge");
case 1:
  string piyo("piyo");
  cout << hoge << piyo << endl;
  break;
default:
  cout << "moke" << endl;
}

こんな変人な真似したらスコープってどうすりゃいいんだろうw
って今思いついた。明日、余裕があったらやってみる。

追記

日記読み返して気づいた。
i=1でシボンヌじゃん。のやさん、超バカ。