1 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 17:56:53.03 ID:uFDqtnkl.net] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part146 https://mevius.5ch.net/test/read.cgi/tech/1573094136/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.105【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1556142878/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 ↑え?だってお前、普通ダイナミックリンクするだろ? "ダイナミックリンク"す・れ・ば、ファイルサイズ**増えないです**
487 名前:デフォルトの名無しさん [2020/01/21(火) 18:52:44 ID:xueGtX5x.net] >>460 do { } while(0) は自分は見たことがある。 忘れてしまったが、確か、#define マクロの定義部分で使われていて、目的は、 マクロ全体が一つの分の用に実行されて欲しいことであったようだった。 #define マクロ名() do {\ ・・・\ ・・・\ } while(0) のような感じだったと思う。 これなしで裸で書くより安全になる場合があった気がする。
488 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 18:57:29 ID:fxsKQzaN.net] if (...) マクロ(); else ...
489 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 18:57:46 ID:xueGtX5x.net] >>475 忘れてしまったが、おぼろげながら何か以下の様なことに関連していたような記憶がある。 C/C++では、if 文の直後は {}がなくても書くことが出来てしまう。 それで、 if (条件式) マクロ関数名(); のように書いた場合、マクロの定義部を単なる {} で書くより安全な場合があったような 気がする。 忘れた。
490 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:00:56 ID:xueGtX5x.net] >>476 あ、その場合だね、多分。 #define aaa() {・・・} と定義してしまった場合、 if (...) aaa(); else ... と書くと、 if (...) {}; else ... と展開されてしまい、else の部分がエラーになってしまう。ところが、 #define aaa() do {・・・} while(0) と定義していると、 if (...) do {} while(0); else ... と定義されて、正しく動作する。
491 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:03:11 ID:xueGtX5x.net] https://stackoverflow.com/questions/257418/do-while-0-what-is-it-good-for ↑に書いてあった。
492 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:11:44 ID:jtyzl32v.net] それは11年前のネタだからそうなってるけど現代C++ならラムダ式で書くべき内容
493 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:19:17 ID:fxsKQzaN.net] マクロでしか書けない物もあるんだよ
494 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:19:18 ID:jXO8TLK9.net] 大昔の工芸品みたいやな
495 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:24:51 ID:fxsKQzaN.net] ていうかなぜラムダ式? 考える順は以下じゃない? 関数 インライン関数 テンプレート関数 マクロ
496 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:35:47 ID:jtyzl32v.net] >>483 そこで回答されている #define FOO(x) do { foo(x); bar(x); } while (0) は #define FOO(x) [&] { foo(x); bar(x); } () と簡潔に書ける そのQAの内容は今のC++におけるdo-while(0)の有用性を示す内容ではない
497 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 20:01:36.85 ID:fxsKQzaN.net] ああ、そういうことか do while に対するメリットがないと 互換性から do while を選ぶことになりそう
498 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 20:17:22 ID:V9u70PsA.net] ラムダ式はc++11からか 使えない環境は結構あるんだろうな 近付きたくない
499 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 20:20:59 ID:m86EWX9f.net] >>484 最適化前提にしないと代替とは言えない
500 名前:ヒ [] [ここ壊れてます]
501 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 20:21:55 ID:OieZoAm+.net] そんな用途でマクロなんか使わねーわ。ばかか。
502 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 21:35:08.93 ID:XinnYwlJ.net] スコープが効かねえ毒だかんな
503 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 22:01:33.56 ID:fxsKQzaN.net] >>481
504 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 22:03:37.86 ID:XinnYwlJ.net] __LINE__がいるのとかな
505 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 00:05:18 ID:LIwEls05.net] >>484 JavaScriptだとそうかいても速度差がないかもしれないけど、C++だと、 そう書いた場合は、関数を定義してから、マシン語の call 文でその関数が 呼び出されるので結構なオーバーヘッドとなる。 JavaScriptの場合は、どう書いてもオーバーヘッドがあるからそのくらいの オーバーヘッドは体感速度に登ってこないのでどっちでも良いだけ。
506 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 00:20:06 ID:2biZgMt+.net] >>492 ラムダ式はインライン展開されるからオーバーヘッドにはならない
507 名前:デフォルトの名無しさん [2020/01/22(水) 01:14:20 ID:eHIdhO0H.net] error: no member named 'emplace_back' in 'std::__1::vector<int, std::__1::allocator<int> >'; did you mean '__emplace_back'? v.emplace_back(d); ^~~~~~~~~~~~ __emplace_back /Library/Developer/CommandLineTools/usr/include/c++/v1/vector:696:10: note: '__emplace_back' declared here void __emplace_back(const value_type& __x) { push_back(__x); } ^ 1 error generated. push_backは普通に使えるんですけどemplace_backは何故か上記のようなエラーが出てしまいます 一応コンパイラに言われた通りに__emplace_backに変えれば動きはするんですが、普通にアンダーバーなしで 動かすにはどうしたらいいんでしょうか。環境はmacの10.14です。
508 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 01:26:38 ID:2biZgMt+.net] >>494 OSだけ書かれても環境がわからんけどこれに見える https://cpprefjp.github.io/implementation.html#clang
509 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 09:21:16 ID:RBeGE/46.net] >>493 それ保証されてる? 最適化オフでは関数オブジェクトのままじゃないの? 最近のc++はデバッグビルドが使い物にならないことが多くてマジ困る
510 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 09:24:55 ID:dJnLloAw.net] >>496 最適化するかしないか自分で選べるんだから、言語のせいじゃないと思うんだ。
511 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 09:47:45 ID:s6VTVCIo.net] 最近というか昔からだなデバッグまわりがクソなのは ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ デバッグをないがしろにするなと >>497 端的にテンプレートが原因だから言語のせい というか誰のせいかどうでもいいから解を提供しろと
512 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 10:28:10 ID:dJnLloAw.net] >>498 最適化設定を変えることが解になると思って言ったんだけど、そうはいかないことがあるの? デバッグまわりがクソだと言うなら、相手はまずコンパイラ&デバッガのベンダであって、言語の標準化は あんまり関係なくね?
513 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 10:34:22 ID:Oj6zQLXh.net] インライン展開するかどうか含めて 最適化はコンパイラ依存 パフォーマンス測定やチューニングは 実際の環境でやらないと 可能性で言えばマクロが一番インライン展開の可能性が高い (コンパイラが賢すぎて同一コードを共有するとかない限り)
514 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 10:50:51 ID:kHABv+Er.net] マクロはソースの字面を読み替えるだけ 機械語の命令シーケンスを開いたサブルーチンにするインライン展開とは全く別な話
515 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 12:06:37.54 ID:OzkwmLpy.net] >>500 マクロは、C
516 名前:言語の時代から「前処理(preprocess)」として処理され、 コンパイル作業が入る前にその場にトークンとして展開されるだけと 仕様で決まっています。勝手に関数になる可能性はほぼ0です。 [] [ここ壊れてます]
517 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 12:28:55 ID:S75Q14iC.net] 挙動が仕様通りになるならコンパイラは何やってもいいんだよ(と仕様で決まってる) マクロだったものに関数呼び出しを仕込むのもコンパイラの自由だ 実際同じ処理の塊があっちこっちに出てきたらまとめて関数(みたいなもの)にするコードサイズ最適化は普通にやる可能性がある
518 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 12:40:53 ID:Oj6zQLXh.net] >>501 オーバーヘッドを語ってるんだから どういう手順でバイナリになるかは関係ない バイナリになった状態が全て >>502 >>500にそう書いてるけど
519 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 13:12:02.54 ID:kHABv+Er.net] >>504 マクロ展開は最適化が始まる前の話だつってんだよ、わかんねーやつだな #define a(b,c) b * 2 + c * 2 a(x, y) //これは x * 2 + y * 2 //こうしろというだけの指示で (x + y) * 2 //このような変形は意味していないし してはならない a(x, y) * z //こういうとき困るだろうが
520 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 13:18:49.85 ID:kHABv+Er.net] インライン展開されるかどうかは、そのコード片がマクロの展開結果かどうかには関係ないってことだぞ こんなこと、いちいち言わなきゃわからんようだから付け足しておく
521 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 13:34:41.13 ID:S75Q14iC.net] >>505 最適化をいつ始めるかなんてそれこそコンパイラ次第なんだけど
522 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 13:41:29 ID:yb939hMs.net] つまりマクロはインライン展開されやすいという主張は引っ込めるわけだな
523 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 13:43:39 ID:yb939hMs.net] 都合悪くなると どうせいつもの手で逃げるだろうけどな 尻尾巻いたやり取りは残るぜ
524 名前:デフォルトの名無しさん [2020/01/22(水) 14:44:17 ID:54HMiZ6v.net] >>505 #define a(B,C) ((B) * 2 + (C) * 2) >>498 >ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ ほんそれ
525 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 14:49:21 ID:kHABv+Er.net] >>510 それはおまえさんの勝手な思い込みだよ x * 2 + y * 2 * z という結果を意図して使うこともできるのは マクロに特有の機能で今さら変更できなくなっている
526 名前:デフォルトの名無しさん [2020/01/22(水) 14:51:21 ID:54HMiZ6v.net] 意図して出来るのは知ってるが 敢えてやらないんだよ
527 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:11:37.83 ID:s6VTVCIo.net] >>499 デバッグのために最適化切ると激遅になる問題が散見されるという問題にたいして 最適化設定を変えるという解がナンセンス そりゃpragma駆使して手で細かく切り替えりゃ可能だろうがそんなことやってられない
528 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:11:48.33 ID:kHABv+Er.net] オマエガナー(aary
529 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:13:12.36 ID:kHABv+Er.net] >>512 おまえが510で持ち出したような括弧が自動的に付くような規格改定が行われない理由を考えたことがあるか?
530 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:13:39.10 ID:Oj6zQLXh.net] >>505 多分比較してる内容が噛み合ってない マクロを展開した結果と直接記述と が同じなのは当然 プリプロセッサなわけだから そうじゃなくて マクロ、インライン関数、通常の関数の比較の話 当然最適化の期待度は マクロ(直接記述)>インライン関数>通常の関数
531 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:18:02.26 ID:Oj6zQLXh.net] >>505 そもそも最適化ですらない話を持ち出してるのか 話の流れと全く関係ないですね
532 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:32:14.07 ID:s6VTVCIo.net] >>499 ベンダの責任っていうのは一見もっともでそれがまさにc++標準化メンバーのスタンスだ でも例えばお前はSFINAE関連のデバッグどうやってるよ? いくつかツールはあるが導入が難しいか頼りないものばかりだ そんな状況がずっと続いている このあたりが改善するには言語コアを設計する時点からどんなデバッグ機能が必要か考えるべきってのがおれ
533 名前:フ主張 作業フローを理解しない人が無邪気にこれが入ればさらにソースコード短く書けまっせレベルの議論で機能追加を考えるべきでない [] [ここ壊れてます]
534 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:34:50.28 ID:2biZgMt+.net] 機能を使うかどうかはお前の判断でお前の責任 勝手に機能使っておいて八つ当たりすんな
535 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:50:53.24 ID:LkBGzo9o.net] >ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ +1
536 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:53:26.36 ID:2biZgMt+.net] 江添みたいなのしかいない日本と違って、普通の国の委員は企業の代表として参加しているのでその指摘は的外れ
537 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:57:43.58 ID:OzkwmLpy.net] >>503 関数になっているものを inline 展開する処理系は多数ありますが、 プログラマがせっかく展開して書いてあるものをわざわざ関数に戻す処理系 はめったにないのです。 また、そのような最適化は人間には簡単に思えるものですが、機械にやらせようと するととても大変です。マクロ展開される前のマクロ関数の状態ならまだ できるのですが、コンパイラの中で最適化層と前処理層がかけ離れた位置に あるので、もしやりたければ最適化層だけでそれをやることになり処理がとても重くなります。 まず、コンパイル後に出来上がった中間コードのなかから同一のパターンを見出すのが ものすごく時間が掛かります。それから全く同じではない場合への対処が機会は苦手です。
538 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:57:58.58 ID:kHABv+Er.net] >>516 最後の2行とそれ以前が論理的に繋がってないぞ
539 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:58:35.89 ID:kHABv+Er.net] >>517 506で牽制しておいたはずなんだが 言わなきゃわからんのではなく、 言ってもわからんやつのようだな
540 名前:はちみつ餃子 mailto:sage [2020/01/22(水) 18:28:00.61 ID:lnnB9FBg.net] >>516 > 当然最適化の期待度は > マクロ(直接記述)>インライン関数>通常の関数 現代のコンパイラの最適化機構はかなり複雑で、どのように最適化が効くか予想するのは無理。 素朴な処理系ならなんらかの傾向がある場合もあると思うけど、一般化できるような話ではないよ。 普通の関数はインライン関数より呼び出しのコストは確かに大きいけど、 全体のコードサイズが大きくなるとキャッシュメモリからあふれやすいといった話もあって、 トレードオフになってる要素がある。 それに、主要なコンパイラは inline キーワードで修飾してもしなくてもインライン化が効果的ならインライン化するし、 効果的でないならしないよ。 inline 関数として定義すれば各コンパイル単位の中に必ず定義もあるわけだから、 LTO が有効ではない状況では結果的にインライン化しやすい条件がととのっているとは言えるんだけど、 逆に言えば LTO を有効に出来るならどうでもよくなるわけだし。 いずれにしても、そんな微々たる速度が気になるような場合ってそんなにあるか? 速度が問題になってから実測しろよ。 状況によってどうとでもなるんだから、具体的な状況を示さずにどれが速いとか言ったってかみ合うわけないだろ。
541 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 18:44:11.63 ID:0ayd3B3Q.net] >>525 一般的な期待度の話 当然例外はある コンパイル単位が別で 関数を定数パラメーターでコールした場合 なんかが差が大きくなる レジスタ退避やスタックポインタのアラインメント調整、スタック拡張、AVXの準備関数コール もそれなりにオーバーヘッドとなる 同じコンパイル単位であれば 今のコンパイラではそれほど差は出ないが 組み込みのチープなコンパイラもまだまだ使われている
542 名前: mailto:sage [2020/01/22(水) 19:06:41.58 ID:RZgzSQWe.net] >>501 お前さんは LISP のマクロを知らないのか?
543 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 19:17:53.96 ID:2biZgMt+.net]
544 名前:LISPの仕様がC++と何か関係ある? [] [ここ壊れてます]
545 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 20:23:02 ID:OSofFadI.net] 関数とマクロの違いがlispだとわかりやすいから。 わかってないやつをあぶりだすのにはちょうどいい。
546 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 20:38:48 ID:F1N+c+gr.net] マクロアセンブラのマクロは強力
547 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 21:16:42.45 ID:kHABv+Er.net] >>527 で?
548 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 22:55:42 ID:PNeen3jP.net] LISPじゃー LISPの場合はー www
549 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 23:00:35 ID:Ab6Q02+v.net] QZが現れると大抵話が脱線するから放置しとこう。
550 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 02:42:18 ID:96Ez/jHv.net] >>518 よくわかんないので、SFINAEなりConceptなりconstexprなりをデバッグに配慮して設計していたら どう問題を改善できていたと思うのか、教えて。
551 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 05:39:34 ID:ZM0XhcNb.net] (CMakeスレがないっぽいので) target_link_libraries(a.exe PRIVATE ${MPI_CXX_LIBRARIES}) ↑${MPI_CXX_LIBRARIES}が定義されていなくても合法で、その場合何ともリンクしないということを期待してもOK? それとも if(MPI_FOUND) target_link_libraries(...) endif() とすべき? 公式を見てもよく分からない
552 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 07:08:06 ID:Y+bt1zIi.net] >>535 こちらでどうぞ https://mevius.5ch.net/test/read.cgi/tech/1573214616/
553 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 09:24:40 ID:cHzm9I9L.net] >>534 デバッグに配慮してたらそんな糞機能入れないだろうね。
554 名前:デフォルトの名無しさん [2020/01/23(Thu) 10:15:54 ID:77XEoAHk.net] 今日もgotoを使ってしまった・・・
555 名前:デフォルトの名無しさん mailto:sage [2020/01/23(木) 10:22:15.42 ID:KV664nBl.net] >>534 まず現在の問題の構造を考えて欲しい c++はtemplateを使ってメタプログラミングを行うのはご存知の通り でtemplateはチューリング完全だ それだけの複雑さを持っている それに対して一般人がやるデバッグはコンパイルが通って期待通り動くかエラーメッセージを見るかぐらいだろ? これは原始的なprintfデバッグを行っているのと同じレベル なのでまずストレートに考えると メタプログラミングの結果が取得できること コンパイラにデバッガ接続可能にしてメタプログラミングの実行がトレースできること が必要 これがベストなのかはさておき、メタでないプログラミングでは当たり前なんだから SFINAEをどうするかみたいな話の前にまずこういうところを整備すべきだった ハードウェア依存じゃないのだから標準モデルを定めるのは可能だ
556 名前:デフォルトの名無しさん [2020/01/23(Thu) 10:45:58 ID:77XEoAHk.net] gotoを受け入れるとクリーンでわかりやすい実装が開ける。 ・・・かもしれない。
557 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 10:47:36 ID:96Ez/jHv.net] >>539 > メタプログラミングの結果が取得できること > コンパイラにデバッガ接続可能にしてメタプログラミングの実行がトレースできること > が必要 あったらいいなとは思うけど、必要(=可能になるまで機能を使わせるべきではない)とは思わないなぁ。 実行時プログラムについて言語規格側でデバッグのための特別な「標準モデル」が定められたりいてないけど、 現状でわりと使えるデバッガができてるし、コンパイラはあるけどデバッガは無いという環境や時代はあったし。 メタプログラミングだからといって機能追加に先立って特別な定めが要るという理屈はよくわからない。
558 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 11:24:46 ID:Y+bt1zIi.net] >>540 470, 472も言っているが gotoを使わないこと自体が目的化してはいけない そういうアホがbreakは平気で使ったりする
559 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 11:27:54 ID:y5HKK+ir.net] constexpr関数内でgoto使えないのだから、gotoを避けることを目的とせざるを得ない場面はある。
560 名前:デフォルトの名無しさん [2020/01/23(Thu) 11:28:08 ID:77XEoAHk.net] breakとgotoを同一視するのも問題なのでは。
561 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 11:28:57 ID:Y+bt1zIi.net] >>544 同一視ってGOTO有害説の中では完全に同じだよ
562 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 11:31:15 ID:y5HKK+ir.net] goto有害説ではbreakとgotoは違うもの扱いしているよ breakで出来ないことがgotoで出来ること自体を問題視しているのだから
563 名前:デフォルトの名無しさん [2020/01/23(Thu) 11:31:46 ID:77XEoAHk.net] 誰かそんな説を唱えたのでしょうか。
564 名前:デフォルトの名無しさん [2020/01/23(Thu) 11:32:55 ID:77XEoAHk.net] 責任者出て来ーーい!!!
565 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 11:33:01 ID:Y+bt1zIi.net] >>546 ほう、どう違う扱いをしているんだ?
566 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 11:34:43 ID:y5HKK+ir.net] gotoは使わないけどbreakは使うってのがgoto有害説じゃないの? 完全に別の扱いしているってことだろ
567 名前:デフォルトの名無しさん [2020/01/23(木) 11:35:44.43 ID:77XEoAHk.net] ぐ、ぐ、ぐぅの音も出ない。
568 名前:デフォルトの名無しさん mailto:sage [2020/01/23(木) 11:42:15.74 ID:Y+bt1zIi.net] >>550 全然違う まだ答えは書いてやらんぞ
569 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 12:29:41 ID:nmx8CMX3.net] >>546 も >>539 も同じタイプの馬鹿 選択の幅は広い方がいい 機能の存在を否定するのではなく、単にお前が使わなければいいだけ
570 名前:デフォルトの名無しさん [2020/01/23(Thu) 13:56:33 ID:VWfJLmDE.net] >>533 +1 ほんそれ
571 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/01/23(Thu) 14:47:05 ID:QRqIx1i6.net] break でも goto でもそれを使わなかったときにもっと複雑になるのなら使っていいよ。 クソみてぇなフラグを立ててループから抜けるよりは break の方がマシだろ? 使わなくても十分に良いなら使わない方がいいに決まってるけど、要るときに使わないのは馬鹿げた話。 現実にはクソな道具が役に立つクソな状況があるんだよ。
572 名前:デフォルトの名無しさん [2020/01/23(Thu) 15:47:36 ID:tCbubFOj.net] do{...}while(0); とかにしたくないとき while(1){ ...; ...; break; } もたまに意図的に使う
573 名前:デフォルトの名無しさん [2020/01/23(Thu) 16:22:12 ID:77XEoAHk.net] なにこれ悪行自慢。
574 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 16:34:07 ID:Y+bt1zIi.net] >>556 breakしなかった場合の動作が違うじゃねえかよ
575 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 16:47:49 ID:nmx8CMX3.net] >>556 switch(1){ default: }
576 名前:デフォルトの名無しさん [2020/01/23(Thu) 16:49:27 ID:77XEoAHk.net] 通報しました。
577 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 17:36:57 ID:y5HKK+ir.net] forやwhileもgotoのシンタックスシュガーだから使うなみたいな
578 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 17:43:18 ID:y5HKK+ir.net] gotoって自由すぎて対応するlabelの場所によって意味が変わるから、自由に飛びたいとき以外に使うと分かりづらくなる。 breakやcontinueなら一連の処理の一部を飛ばすって意図がそれだけでわかるのだから、do{}while(0)だとgoto使うのと何を分かりやすくするかでトレードオフになる
579 名前:デフォルトの名無しさん mailto:sage [2020/01/23(木) 17:47:15.54 ID:Y+bt1zIi.net] do{} から以後が、それまでの話と繋がってねえぞ それから break と continue のGOTO有害説における違いもわかってねえな
580 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 17:51:51 ID:y5HKK+ir.net] do while(0)+breakを使う->loopだと誤解する可能性がある gotoを使う->labelの飛び先見ないと意図がわからない ってどちらの分かりづらさを大きな問題とするかで、どちらが良いかの好みが別れる これがトレードオフ
581 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 17:53:42 ID:y5HKK+ir.net] まあdo while(0)と組み合わせるならcontinueの方が良い気もする やっぱりretryしようと思ったときのために
582 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 18:00:56 ID:AdSJ3UeH.net] >>562 C++自体自由過ぎるから使わない方が良いぞ
583 名前:デフォルトの名無しさん mailto:sage [2020/01/23(Thu) 18:04:36 ID:y5HKK+ir.net] 自由だから使い所はその自由度が必要なときってだけなのだが。 forのかわりにgotoでループさせる奴は正気じゃない
584 名前:デフォルトの名無しさん mailto:sage [2020/01/23(木) 18:12:02.33 ID:AdSJ3UeH.net] 関数もどこに飛ぶかわからないから 使いどころは必要な時だけだな ポインタも同じ
585 名前:デフォルトの名無しさん [2020/01/23(木) 18:52:22.63 ID:77XEoAHk.net] 関数はgotoと同じ。
586 名前:デフォルトの名無しさん [2020/01/23(木) 19:01:50.07 ID:77XEoAHk.net] >>566 やはりこれからはRustですか。
587 名前:デフォルトの名無しさん mailto:sage [2020/01/23(木) 19:09:24.45 ID:nmx8CMX3.net] >>570 そうだよ さようなら