C++相談室 part148

■ このスレッドは過去ログ倉庫に格納されています
2020/01/31(金) 20:54:06.26ID:Nt0XFA2s
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part147
https://mevius.5ch.net/test/read.cgi/tech/1576659413/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
2020/02/01(土) 21:54:44.41ID:BhmlSyWc
>>104
構造化プログラミングでは使わない制御構造を
使うべきでない理由が構造化プログラミングって論法に
抜け出せない枠があるとは思わないの?

>>108
continueだけ、それで正解なんだが
他はみんな間違ってるよ
2020/02/01(土) 21:57:47.27ID:7G0Z2VlM
見てください皆さん、ID:BhmlSyWc ← ひどいですよ
まず何言ってるか分からない
このレベルはきついな
2020/02/01(土) 22:02:32.59ID:tav2AwxI
>>106
どの辺からgotoが危ない操作だと思うの?
2020/02/01(土) 22:06:43.33ID:vKrtBnhX
まあ1万行ある関数の中で、5千行目ぐらいにgotoがあって、ラベルが関数の先頭付近にあるとか、それに近いのは見たことあるが、あれはどう考えてもgotoの悪い例だからな
包丁で味噌汁食ってるようなもん
2020/02/01(土) 22:06:57.37ID:BhmlSyWc
>>110
きつくて気の毒だな
不勉強なやつは自業自得なので同情はしない
2020/02/01(土) 22:08:59.52ID:BhmlSyWc
>>112
1万行か・・・これ↓より重症だなw
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.10.4.html
2020/02/01(土) 22:11:31.06ID:tav2AwxI
不定値や無限ループの危険はgotoに限ったことじゃないし
ループを抜けるgotoには関係ない話

goto特有の危険な場面
何を心配してるんだろう
酸っぱいブドウ?
2020/02/01(土) 22:16:09.36ID:TULylXcw
だめだこりゃ
2020/02/01(土) 22:19:01.58ID:7G0Z2VlM
gotoはどこへ飛ぶか分からないから読みにくいんだよ
前に飛ぶのか、後ろに飛ぶのか、それすら分からない
飛び先を分かりやすく改良したのがreturn、break、continue
それぞれ飛び先が決まっているから追うのが楽
その英知が分からんっていうならreturn、break、continueを使わずに
全部gotoでやれば?って話
2020/02/01(土) 22:22:45.11ID:tav2AwxI
関数なんてもっとどこに飛ぶかわからんぞ
2020/02/01(土) 22:25:22.98ID:tav2AwxI
どこに飛ぶかわかる名前にするってのが普通の発想
意味でも構造でも文章でも好きな名前を付けられる

関数も変数も名前空間も全てそう
2020/02/01(土) 22:25:32.73ID:TULylXcw
gotoは中にも飛べるの知らないんじゃないこの人
2020/02/01(土) 22:25:55.92ID:BhmlSyWc
>>117
飛び先じゃなく飛ぶこと自体の問題なんだがw
2020/02/01(土) 22:26:20.90ID:7G0Z2VlM
つまりはそういう話で、追いやすいように飛び先を制限したいよねーってのが根底に有って
(当然そういうのが念頭にあってreturn,break,continueは生まれたわけで、前例に倣いたい所)
それでブロックに名前を付けるだのbreak 2だのって書き込んでいる人がいるわけで
gotoでいいんじゃね?っていうなら、return,break,continueもgotoでいいんじゃね?
むしろforやwhileもgotoでいいんじゃね?gotoを正しく使えばいいんだろ?ってなる
2020/02/01(土) 22:26:36.74ID:TULylXcw
構造化プログラミング知らずにgotoいきって使うのはさすがにやばい
2020/02/01(土) 22:28:23.87ID:BhmlSyWc
>>122
どうなっていれば「追いやすい」のかを
まず明らかにしようぜ

俺ルールでもいいし
広く認知されているルールでもいいし
2020/02/01(土) 22:31:09.71ID:7G0Z2VlM
巻数はどこに飛ぶか分からないが、必ず元に戻ってくる(のが基本)
行きっぱなしというか、ただのジャンプのgotoやらbreakやらとは違うのだよ
関数のコールは入口と出口が一つになってて非常に構造化されてる好例
こういうところ分からないってのはセンスないよ
2020/02/01(土) 22:32:56.84ID:7G0Z2VlM
巻数→関数
2020/02/01(土) 22:35:10.84ID:tav2AwxI
使い所でgotoが使えないのはセンス無い
使い所でgptoを使わないのはコードが見にくい
使い所でgotoを使わないのは危険なコード

goto否定派にレベルを合わせた主張をするとこんな感じ
2020/02/01(土) 22:42:27.15ID:TULylXcw
やっぱりこいつダメだな
知性がない
2020/02/01(土) 22:44:49.19ID:tav2AwxI
使い所でgotoを使わないのは知性が無い
2020/02/01(土) 22:45:34.37ID:7G0Z2VlM
本心では誰もgotoは否定していないんじゃないかな
今は多段breakの機能が無いんだからgotoを使えばいいだろう
しかし、もしgotoを使わないで済む多段breakの新機能があったのなら
それを使ったほうがいいだろうし
じゃーその新機能はどんなものが考えられるか?って遊びだろ?
ブロックに名前付けるだとかbreak nだとかは
2020/02/01(土) 22:50:41.91ID:wBNP08tW
多段breakは考えた奴は脳味噌が糞すぐる…
ループの深さを変えたとたんにバグるじゃん?
ループの深さは金輪際変えないとか
ループの深さを変えるとき必ずループ全体を机上確認するとかだったら
gotoでも逝けるじゃん??
2020/02/01(土) 22:53:08.37ID:vKrtBnhX
ああ、そうだな
break 2だとfor文が3重になったときにバグるな
個人的には面白いと思ったが
2020/02/01(土) 22:53:40.31ID:tav2AwxI
使い所は2次元構造の2重ループとかだよ
2020/02/01(土) 22:55:40.65ID:rsRLlL5x
画像処理とかで2重ループ良く書くけど、最近2段階breakしたくなった記憶がないな

実は要らないんじゃね
2020/02/01(土) 22:56:47.94ID:tav2AwxI
じゃあbreakもいらないんじゃない?
2020/02/01(土) 22:59:11.96ID:7G0Z2VlM
まーC++がプリプロセッサを殺すために進化しているのと同様
Cはgotoを殺すために進化したともいえるわけで
たとえば、関数、for、return、などなど、制御構造にかかわるほとんどの物が
gotoを殺すために有るといってもよい
だから、もっとgotoを殺すにはどうすればよいか、考えるのは自然な発想かと

C++でもテンプレートなどで出来ないことはプリプロセッサでしなければならないし
ただ、同じことがテンプレートとかで出来るならそのほうが良いだろうし
もっとプリプロセッサを殺すためにはどういう機能を追加すればよいか考えるのは自然な事だろう

同じ同じ
2020/02/01(土) 23:01:32.69ID:EspH/Y2K
goto とか break とか continue とか、他の言語(javaとか)でもいろいろ小手先的に弄られているけれども、それに何の意味があるのかいつも不思議におもいますね
C/C++ の goto とかはどう頑張っても関数の中でだけしか跳べないのだから、BASIC の GOTO ほどにはスパゲッティ状態を招けないのではと考えます
無論、その関数が異様にデカければ別ですが、そんなデカい関数を書くほうが問題であって goto が問題なのではないかと
2020/02/01(土) 23:11:38.33ID:tav2AwxI
ループを抜ける為にだけ使われる変数を使ったループ抜け
世の中にはたくさんこういうコードがある
たくさんのコードを見る機会がある人なら
たくさん見たことがあるはず

gotoネガティブキャンペーンのせいだよ
2020/02/01(土) 23:11:46.92ID:JWECbGc7
>>136
gotoが使わないで済むように進化してくのは期待している。
ただ現状として、多重ループを抜ける場合みたいにgotoを使うのがシンプルで分かりやすいならば、毛嫌いしたり盲目的に原則振りかざすよりgoto使えばいいだけのことだと思うよ。
2020/02/01(土) 23:32:29.85ID:TULylXcw
>>138
お前ほんとに病気だな
多重ループ脱出でgotoが簡潔なのはみなわかってる
でもgotoは自由度が高すぎて構造を壊す可能性があるわけ
だから改善するとしたら何があるかという話をしてるだけであって
別にgoto禁止とかの話はしてない
好きなだけ使ってろよ
あと構造化プログラミングぐらい知っとけ
2020/02/01(土) 23:45:45.20ID:tav2AwxI
>>140
色々と違う
2020/02/01(土) 23:46:54.20ID:vKrtBnhX
for () {
break label;
} label;

for () {
for () {
break label1
} label2;
} label1;

こういう風にfor文のお尻にラベルを付けられるようにすれば局所化したgoto風のbreakが使えるのでは
2020/02/01(土) 23:48:30.11ID:tav2AwxI
for () {
goto label;
} label:;

for () {
for () {
goto label1;
} label2:;
} label1:;
2020/02/01(土) 23:49:00.26ID:tav2AwxI
今でも出来る
2020/02/01(土) 23:49:30.89ID:wBNP08tW
Pythonはループにラベルをつける手が使えた
と思った(幻覚でなければ
2020/02/01(土) 23:52:18.24ID:pUJoLXPw
またgotoの話になってんのかよ。。
だからいっそ禁止にと思ったが、それよりもさらにクソな構文の提案が出てたり。。
想定を超えた馬鹿どもばっかりじゃねーか。
2020/02/01(土) 23:54:48.66ID:tav2AwxI
無理に会話に入って来なくて良いよ
2020/02/01(土) 23:59:22.03ID:7G0Z2VlM
ただ、凝りに凝った複雑怪奇なテンプレートより
シンプルに作ったマクロの方が読みやすいって事例も当然あるだろうよ
てか、わりと、最近、残念ながらその傾向が・・・で、C++が嫌われる理由にも・・・
だからgotoを殺すのも上手くやらないとむしろ酷くなる
そこが腕の振るいどころで面白い部分でもあるし、言語作ってる連中もそんなことで頭いっぱい
変なゲーム性が有って、逆にそれがまたダメな部分でもあって
あと、妹大好き
2020/02/02(日) 00:17:33.29ID:rWwvB4I9
多段breakの使用頻度がそれほど多くないことを加味すれば
break n;方式が妥当だろうね
これだと2重ループを3重ループに書き換えたときにバグる、とか
意味不明なことを言ってる奴もいるが
それは1重ループをbreakで抜けてたのを2重ループに書き換えたらバグった
と言ってるのと同じであって、当たり前の話だし、今でも同じことだ
break n;が一番シンプルで妥当だと思うね
2020/02/02(日) 00:32:21.06ID:7b/FZYuN
breakの後にマジックナンバーを書くのが気に入らない
定数には意味のわかる名前を付けたい
2020/02/02(日) 00:33:00.49ID:rWwvB4I9
ただし、break n;のnの部分が変数でもOKとかなってたらかなりウザいが
そこはnは定数と定めたいね、でもC++の場合は定数と言っても・・・
複雑にしようと思えばいくらでも複雑にできるわなー
普通に使う分には問題ないかと
明日からbreak n;が入っても、たぶん誰も困らないし、混乱も起きないだろう
割のいい賭けだし、俺はアリだと思うね
2020/02/02(日) 00:33:32.69ID:7b/FZYuN
breakとbreak nが同じとか意味不明な主張をなさる御仁がいらっしゃるが
じゃあcontinueがcontinue nになったらどんな地獄が発生するか
考えてみたら良い
2020/02/02(日) 00:48:04.23ID:rWwvB4I9
別にcontinue n;
全然ありでしょ
これと同等の事を、何か別の方法でやるよりスマート

for(;;){
 bool do_continue = false;
 for(;;){
  if(...){ do_continue = true; break;}
 }
 if( do_continue ){ continue; }
}



for(;;){
 for(;;){
  if(...){ continue 2; }
 }
}
2020/02/02(日) 01:00:22.64ID:7b/FZYuN
do {
 do {
  ...
  if (cond) {
   continue 2;
  }
 } while (副作用の有る式1);
} while (副作用の有る式2);
とから?
2020/02/02(日) 01:03:23.27ID:0Gqmr542
break nなんてやるくらいならbreak label で抜けるループを明示的に指定したいな

ループにラベルをつけるとして、先頭では見づらくて邪魔だな

ループの末尾にラベルを付ければ見やすいけど、それだとlabelついたループを抜けると言うよりlabelの指す位置へのジャンプだな

なんだgotoでいいじゃん

個人的には breakto label という記法でループ出口に書いたラベルに飛べるとするのが分かりやすいと思うけど、こんなことに新しい予約語を導入するくらいならgotoで十分だと思う。
2020/02/02(日) 01:06:28.34ID:7b/FZYuN
break nが良いとか言ってる椰子は
ついでに行番号も復活してほしいと思っているに違いナス
2020/02/02(日) 01:15:40.31ID:rWwvB4I9
do{
 do{
  if(...) goto NEXT;
 }while(...);
NEXT;
}while(...);

と等価だろう
要はこういうgotoを置き換えるために作られたのが
continueなのだから、そのルールに従うのが普通だろうね

もしくはgoto使わずにフラグでやっても、どのみち内側のループの条件式は実行されないわけで

do{
 bool do_continue = false;
 do{
  if(...){ do_continue = true; break; }
 }while(...);
 if(do_continue) continue;
}while(...);

これ以外の解釈ってのは難しい
2020/02/02(日) 02:23:51.88ID:93obPCeA
gotoの話題って今でもこんなに盛り上がるのか
2020/02/02(日) 02:49:52.74ID:LC7cWz9a
老害が多いから
2020/02/02(日) 03:26:54.49ID:EDNK6zQt
そういう機能要望みたいなのここでやる意味ある?
C++Slackでやった方がよくない?
161デフォルトの名無しさん
垢版 |
2020/02/02(日) 03:45:22.96ID:mzCY/+E0
英語は敷居が高いよ。
2020/02/02(日) 05:06:46.10ID:DTIMfhpJ
         ,,-―--、
        |:::::::::::::;;;ノ 
        |::::::::::( 」 <もう構造化は破綻してるんだからおとなしく goto しとけよな!
        ノノノ ヽ_l  
       ,,-┴―┴- 、    ∩_
     /,|┌-[]─┐| \  (  ノ
      / ヽ| |  バ  | '、/\ / /
     / `./| |  カ  |  |\   /
     \ ヽ| lゝ    |  |  \__/
     \ |  ̄ ̄ ̄   |
      ⊂|______|
       |l_l i l_l |
       |   ┬    |
163デフォルトの名無しさん
垢版 |
2020/02/02(日) 06:40:45.35ID:mzCY/+E0
じゃあswitchも要らないって事じゃないか。
2020/02/02(日) 06:51:18.30ID:9jRHEnns
>>149
break n なんて間抜けの極みだと思いますね
java にはラベル付き break が存在して、ほとんど goto です https://www.sejuku.net/blog/20100
2020/02/02(日) 07:37:33.82ID:SWo7Ruqh
>>136
Cはgoto殺すために進化してねえよ
Cのgotoが関数外に飛べないのはスタック巻戻しのような仕掛けが複雑になりすぎるからで
構造化プログラミングで否定されるからという理由ではない
構造化プログラミングで否定される制御構造を持たないことにするなら
breakやlongjmpは存在できないはずだ
2020/02/02(日) 07:44:05.46ID:pBPOCWQ5
結論が先にあって理由が後付けだから支離滅裂、一貫性の欠片もない事を書く
もはや宗教
2020/02/02(日) 07:46:45.45ID:SWo7Ruqh
ほんと、宗教だね
洗脳されてるやつは強固に思考停止していて
何を言おうが馬の耳に念仏だ
2020/02/02(日) 08:06:14.41ID:SWo7Ruqh
>>159
根底がわかってねえやつが多いからだよ
古典的な基本がわかってねえやつは若造と爺のどっちに多いだろうね
頓珍漢なことを書いて袋叩きにされたからって逆恨みする精神性なやつはどっちに多いだろうね
2020/02/02(日) 08:18:25.64ID:9aZda2U6
break labelでいいんじゃね
gotoと同じだが、labelがbreak的な位置にない場合コンパイルエラーになれば良い
2020/02/02(日) 08:27:24.30ID:DTIMfhpJ
label貼るくらいならgoto使う
171デフォルトの名無しさん
垢版 |
2020/02/02(日) 09:22:07.84ID:mzCY/+E0
gotoは便利なswitchだからね。
便利すぎるわこれ。
これからも積極的に使っていこうと思います。
2020/02/02(日) 09:40:59.69ID:7b/FZYuN
さすがにgotoでジャンプテーブル化の最適化までやる処理系は
まれだと思う
173デフォルトの名無しさん
垢版 |
2020/02/02(日) 09:43:27.45ID:mzCY/+E0
アドレス直接指定なのに、テーブル必要ないんじゃないの。
テーブル必要ない分、switchより有利なんじゃないかと思いました。
2020/02/02(日) 09:51:12.60ID:7b/FZYuN
(条件分岐無しの素のgotoだけでどうやってswitchの便利な代替品にするつもりなのやら…
175デフォルトの名無しさん
垢版 |
2020/02/02(日) 09:53:50.90ID:mzCY/+E0
頑張ってひねり出した!!
けどウンコにしか見えない。
納得できるものを頼む。
2020/02/02(日) 09:55:31.36ID:0Gqmr542
>>175
お前が何をいってるのか、何を考えてるのか理解できないのに、お前を納得させられる奴なんていないぞw
2020/02/02(日) 10:10:20.38ID:o79zkFFu
お尻にラベルつけて break ラベル; がいいとか言ってる奴は構造化の意味がわかってなさ過ぎ
ラベルは飛び先じゃなくてループに付けて break ラベル; でそのループから抜けるんだよ
なので break ラベル が使える言語はたいていループの頭にラベルをつけるようになってる
あと break レベル数 とか言ってる老害は早く滅びろ
2020/02/02(日) 10:28:45.43ID:DTIMfhpJ
名前使うならこんな感じか
void main(){
auto scope1 {
for(;;){
 for(){
  break scope1;
 }
}
}
179デフォルトの名無しさん
垢版 |
2020/02/02(日) 10:29:18.43ID:mzCY/+E0
>>176
俺自身何を言っているのかよくわからないのだが。
2020/02/02(日) 10:31:44.19ID:DTIMfhpJ
もしくは、forの直後
void main(){
for(;;)scope1{
 for(;;){
  break scope1;
 }
}
}
2020/02/02(日) 10:58:10.77ID:MNdu0823
void main()の時点で読む気失せた
2020/02/02(日) 11:16:46.30ID:DTIMfhpJ
んだこんにゃろ
2020/02/02(日) 11:22:39.21ID:D8WvcGqJ
ループの先頭にラベルを書くくらいなら
gotoの方が分かりやすい
184デフォルトの名無しさん
垢版 |
2020/02/02(日) 11:25:45.57ID:mzCY/+E0
あの、スレとは全然関係ないんだけど。
Boostでデバッグとリリース判別するマクロってありますか?
イテレータを1億回ほど回すのでデバッグだけテストを迂回したいんですが。
2020/02/02(日) 11:30:31.96ID:9aZda2U6
なぜboost?
186デフォルトの名無しさん
垢版 |
2020/02/02(日) 11:34:47.86ID:mzCY/+E0
NDEBUGを知らなかったからです。
おまえらおせーよ。
2020/02/02(日) 11:39:04.55ID:SWo7Ruqh
NDEBUGってISO/IEC9899やん
おまえさんがboostっていうから
レスポンス鈍かったんだよ
188デフォルトの名無しさん
垢版 |
2020/02/02(日) 11:48:10.68ID:mzCY/+E0
だよね。
そうだと思いました。
189デフォルトの名無しさん
垢版 |
2020/02/02(日) 11:49:31.89ID:mzCY/+E0
今度からはよく考えて質問しようと思います。
2020/02/02(日) 14:38:02.14ID:rWwvB4I9
今の一重ループを抜けるときの普通のbreakにはラベルを付けないのに
多重ループを抜けるためのbreakにはラベルが無いと読みにくくなるっていう
発想というか対称性というか整合性というか必然性が全く見えないんだが
今ラベル無しの一重breakで誰も発狂することもなく普通に使えているのに
多重breakになった瞬間にラベルが無きゃダメってなるのはなんか弱い
同じことを二回書いたけども
ラベル無しでも別に普通に読めるでしょ、今まで読めてるんだから
大体ラベル付けるんならgotoと手間自体は変わりないしな
191デフォルトの名無しさん
垢版 |
2020/02/02(日) 14:40:18.63ID:mzCY/+E0
今多発今多動ラ大
読み解けなかった。
2020/02/02(日) 14:41:51.46ID:gkoi3ncl
>>190
同意
193デフォルトの名無しさん
垢版 |
2020/02/02(日) 14:43:14.46ID:mzCY/+E0
え、わかるんだ。
すげー。
194デフォルトの名無しさん
垢版 |
2020/02/02(日) 14:47:27.35ID:gXxB23XL
下方向にだけ飛べるgoto相当機能があればgotoは要らなくなるんじゃない?
2020/02/02(日) 14:53:57.04ID:7b/FZYuN
>>190は、Cにgoto <label>とbreakがあるのになぜCはbreak nを設けるところまで踏み込まなかったのか、とか
break <n>で即値<n>に行き当たったコード閲覧者が行き先を知るために何をせねばならないかとか、
考えた方が良いので
は…
2020/02/02(日) 14:55:47.03ID:0Gqmr542
>>190
break nを勧めている人?
対象が1段なのと複数段とでは大きなギャップがあるでしょ。単純に対称性があると言えるものではないと思う。
ラベルつけるならgotoと手間が変わらないというのは同意。ただ、重要なのは手間が減ることではなく、複数段のループの外に出ることが明示されることだから、gotoと意味が混同されず同じ程度の手間でできる記法があるならそれは嬉しい。
2020/02/02(日) 14:56:57.31ID:EDNK6zQt
現実のC++について話せ
ここで新機能の導入について議論しても無駄だ
フォーラムでやれ
2020/02/02(日) 14:57:45.57ID:gkoi3ncl
手間が減ることは重要だよ
ラベル名を考える手間をかけて良いならgotoで良い
2020/02/02(日) 15:01:24.88ID:rWwvB4I9
大体だよ、多重ループはbreakで抜けれないので、仕方なくgoto使うときの
そのgotoを使う都合で必要になった、そのラベルをだよ
じゃーブロックにラベルをつけましょう、ってなんでそーなんだよ
元々のbreakにはラベルなんかねーのに
breakにラベルが無くて混乱したやつ居るか?

ご飯が無いからパンを食べてた状況なのに
すり替わってパンありきになって、パンが無きゃ話にならないとか言い出す始末
別にパン(ラベル)なんかなくても、ご飯があるならご飯食べろよ

ラヘルラベルって、そのラベルがどこ由来か考えてみろよ、gotoだろ?
もう一度言うが、もともとのbreakにはラベルなんかないし、それでみんな普通に過ごせてるし、混乱も起きてない
ただ、gotoで抜けるためには文法上/機能上ラベルが必要だったねってだけで、そこに着目しても仕方がない
本質的には無くても別に困らない
2020/02/02(日) 15:05:16.61ID:jVWLSRwc
ソースコードチェック目的でプログラム読むとき、gotoが出てきたら
そのgotoの使用方法が問題ないものなのか、いちいちチェックしないといけない。
breakならループ抜けるという意図が明白なので、チェックしなくてよい。
2020/02/02(日) 15:11:47.92ID:rWwvB4I9
そんなに名前が無いと発狂するんならもうgoto使えば?って思うし
なんなら関数化して正式に名前付ければって思うし
そこまでしたくないってときにbreak nが便利なわけだ
やりたいことは「多重ループから抜けたい」であって
「名前を付けたい」ではない!!
2020/02/02(日) 15:11:53.90ID:gkoi3ncl
関数コールも問題のないコールかどうかチェックしないといけないから
使わない方が良い
2020/02/02(日) 15:14:22.99ID:EDNK6zQt
それならもうポインタもグローバル変数もマルチスレッドも大量のチェックが必要だから使ってはいけないってことで
2020/02/02(日) 15:14:36.78ID:Rn0kkYyt
>>199
私と認識が似ていますね

>>137
>goto とか break とか continue とか、他の言語(javaとか)でもいろいろ小手先的に弄られているけれども、それに何の意味があるのかいつも不思議におもいますね

>>164
java にはラベル付き break が存在して、ほとんど goto です https://www.sejuku.net/blog/20100
2020/02/02(日) 15:15:16.61ID:7b/FZYuN
現行のC/C++にはgoto <label>がある一方、break <n>は無い
もしbreak <n>の追加がgoto <label>の実装より難しかったからやらなかったのだとしたら、
break <n>の飛び先がgoto <label>の飛び先より簡単にワカルから優れているという主張は根拠を失う

break <n>はわかりにくいか、さもなくばgoto <label>と同等なんである
206デフォルトの名無しさん
垢版 |
2020/02/02(日) 15:16:38.00ID:mzCY/+E0
constがスレッドセーフなのも困った。
2020/02/02(日) 15:24:46.36ID:jpTipLln
>>201
現実ありえないのは重々承知したうえで書くけど
100重ループを脱出するとき数を数えたくないだろうなって思うじゃん
ほかにも3重ループとかで2ndと3rdのループから共通の脱出先ラベルにもできるわけじゃん
文法を拡張する前提ならそこまで想定すべきだと思うね

粗野な即値の数字じゃなくて意味ごとに名前をつけられるようにしてきたのが
プログラミング言語の進化の歴史なのでおれは自然だと思うよ

というかそういう観点からラベル付きbreakというのは他の言語にはあるわけで
で今話してるのはもっと書きやすく読みやすくできないかというトピックでしょ
break Nは使えるだろうけど洗練されてない感じ
2020/02/02(日) 15:27:11.67ID:gkoi3ncl
break [n] はラベル名を考えなくて良い利点がある
使えるなら使いたい

ラベル名を考える必要があるならgotoで良い

ループの先頭で名前を付けるのはgotoより見づらいから使わない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況