goto文は使ってもいいんじゃないかと思い始めてきた話
goto文は多重ループから抜け出す場合は使用することを推奨されている
でもほんとにgoto文を使ってもいいのか?とおもって多重ループを抜け出すときの別の案を考えてみた
条件を満たしたらたくさんbreak
int n=10; bool flg=false; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ for(int k=0;k<n;k++){ if(i+j+k==n){ cout<<i<<" "<<j<<" "<<k<<endl; flg=true; } if(flg) break; } if(flg) break; }
うーん、微妙な気がする
breakを書く手間とそのための変数を追加するのがもったいない
ラムダ式の形にまとめる
int n=10; [&]{ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ for(int k=0;k<n;k++){ if(i+j+k==n){ cout<<i<<" "<<j<<" "<<k<<endl; return; } } } }();
これ始めて知った時はなるほど~ってなったけど階層が一段深くなるのが若干悩ましい気もする
ただ、breakに比べたらこちらの方が良い
やっぱりgoto
int n=10; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ for(int k=0;k<n;k++){ if(i+j+k==n){ cout<<i<<" "<<j<<" "<<k<<endl; goto EXIT_MULTI_LOOP; } } } EXIT_MULTI_LOOP:
追加するのが2行だけで、脳死で追加できるのでやっぱりgoto文がよいのでは?
C++ - ラムダ式を流用して多重ループから抜ける。有り?無し?|teratail
色んなとこで議論がなされているけどgoto文を使う人が多そう
結論
自分が納得しているものを使うのが一番!!!!!!