1 名前:デフォルトの名無しさん mailto:sage [2019/11/07(木) 11:35:36.76 ID:4wggfTwe.net] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part145 mevius.5ch.net/test/read.cgi/tech/1568362404/ このスレもよろしくね。 【初心者歓迎】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/ (日本語)
552 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 01:36:36 ID:4dvDh/Ut.net] std::cout での出力フォーマット指定に関して教えてください。 cout.flag( ios::uppercase | ios::hex ) やら cout << setfill('0') とか cout << scientific << setprecision(10) とかとか 大半の指定が 1回 数値 を出力した後も その状態が保持されたままなのに cout << setw(24) による出力幅指定は その都度指定しないと忘れてしまう挙動になっています。 その都度指定する必要は他にもあるのか。それと、 www.cplusplus.com/reference/iomanip/setw/ みたいな仕様を見て、どう読み取ればそれが正しい挙動であると分かるのか教えてほしいです。 ある個人ブログには setfill も毎回出力する度に指定する必要があるのだと書かれていましたが、 自分の環境では setfill は状態が保持されました。
553 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 01:41:33 ID:9acC9vOn.net] フロントエンドは本当に時間の無駄 ましてC++プログラマならほとんど領域が被らないから単なる二足のわらじ状態で非効率なだけ
554 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 04:32:29 ID:mZNCV5xz.net] >>529 読解力が無いのか>>508と同じく言語オタクだから気づかないのかわからんが >>508と >>512-513読み直してくれる? C++の言語仕様を詳しく解説する本を、コンパイラ”以外の開発に携わってる”人間が書いてくれると 思ってる方がおかしいんだよ >>508の目には純粋にC++関連の本しか映ってないんだろう C++を前提としてるがC++そのものでなくその分野の専門的な知識を教えてる技術書がどれだけあると思ってんだ
555 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 04:32:49 ID:mZNCV5xz.net] >>525 >えっ、ブラック労働環境で疲弊してて書く余裕がないって?w こんな腐りきった発言する思い上がったゴミアマチュアに教えてやることなど何もない お前が使ってるその箱で動いてるソフトは誰が書いてくれてると思ってんだ
556 名前:543 mailto:sage [2019/12/04(水) 06:39:12 ID:mZNCV5xz.net] 安価ミス X >>529 ○ >>526
557 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 07:09:58 ID:Z3kanSY4.net] >>536 うん、想像なら只だもんな
558 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 07:33:04.63 ID:8KgKER1O.net] そもそも現場の奴らは、現場のやり方しか身につける必要ないだろw
559 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 07:54:48 ID:Jd4YzzOQ.net] >>545 各分野にコンパイラ開発は入らんのか? まあお前の好きな分野でいいから具体的な本の名前挙げてくれ
560 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:05:44 ID:mZNCV5xz.net] >>548 挙げたらどうなんの?お前には興味ない内容だと思うけど 「ド素人が言ってんだろ」と思ってるんだろうけど、お前の誤解を晴らすためになんで自分の分野晒さなきゃいけないの? 本の名前挙げたら謝るの?
561 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:06:15 ID:mZNCV5xz.net] >>546 実際そうだと思うよ >>512にも書いたけど、仕事でやってる人もフリーソフト開発者も 規格読んだことある人なんか皆無だと思うよ 他に勉強しなきゃいけないこと山ほどあるし、仕様(新しいのも含め)は必要なときにググって確認するだけ(>>538も言ってるけど)、むしろそうであるべき それを「言語についていけない」なんて貶せるやつの神経がわからん >>519とか、ソフト開発もメタプログラミングも出来ないレベルのド素人だろ? 何調子乗ってんの?自分はついていけてんの?w 開発力も無いし言語を活かせてもないのに、実際にC++を実用してる人を貶すとか 頭おかしい真似してるから言語オタクって言われるんだよ (C++専門のライターも最近そういう傾向あるけど) >>547 それはそれでどうかと思うけど
562 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:07:22 ID:uB21TJa6.net] >>541 直接的な回答でない上に長々しい文章で気が引けるけど…。 『プログラミング言語C++』第4版の38章「入出力ストリーム」で 「width(n)の呼出しは、その直後に行われる<<による出力だけに影響を与える」 と書いてあるね(p. 1094)。 setw() は「次の出力のフィールド幅をn文字とする」(p. 1096 の下の表) 表の説明で“次の出力の”と限定されてるのはsetw()だけ。 で、一般的に書式指定やマニピュレータのうち、 どれが「一度指定したら別の指定をするまで有効」で、 どれが「指定された次の出力だけ有効、その後デフォルト状態に戻る」なのか、 N3337 の 27.5.3.2 周辺を見ても分からなかった。 基本的には ttp://www.cplusplus.com/reference/iomanip/setw/ よりも 少ない記述内容だし、「この指定は直後の一回の出力に限り有効」みたいな 補足の説明も見当たらない。 ISOやJISの規格に詳しい人が「素人め、ここに載ってるんだよ」と ズバリ指摘してくれるのを期待して、調べた限りを投稿してみた。
563 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:21:05.72 ID:Jd4YzzOQ.net] >>549 他の分野の人にどういう説明してるのかを知りたかっただけなんだけどね まあ>>525 が言うように薄っぺらな知ったかが吠えてるだけってわかったからもういいやw
564 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:24:57.77 ID:uB21TJa6.net] >>541 setfill() じゃなくて setw() の話だけど、古い本に 「setw()の幅指定は、永続的に有効な実装と、直後の出力1回だけ有効な実装との 両方が存在するので、移植性を考えれば毎回指定する方が安全」とか載ってた。 もしかすると過去には「setfill() は1回だけ有効」な実装が存在したのかも知れん。 その後、規格で挙動が厳密に定められたのか、 今でも実装によって動作が違っても構わない(規格に明記されていない)のか、 肝心なその点は分からん。
565 名前:549 mailto:sage [2019/12/04(水) 08:41:52.15 ID:0MJ4ry5i.net] >>552 言ってる意味がわからんが 煽れば何か教えてもらえると思ってるアホだろ 今までお前に何度も言ったと思うが、邪魔だから出てってくれ
566 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:46:18.46 ID:Z3kanSY4.net] >>550 他に勉強しなきゃいけないことって具体的に何だ? インターフェースだの通信規約だの法務だのを 規格を避けて勉強なんかできるのか? そういうおまえ自身は本当に勉強してるのか?
567 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 08:48:00.43 ID:6WV7ZyL7.net] >>555 一連の流れ読んでから言えよ C++の規格や仕様の話だボケ
568 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 09:05:20.91 ID:Z3kanSY4.net] >>556 おまえこそどーに目ぇつけとんのやあんだら C++以外の規格なら読むんだって話じゃねえだろうがよ
569 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 09:08:12 ID:d8r3fnrq.net] >>557 >C++以外の規格なら読む 誰がそんなこと言った? 他に勉強しなきゃいけないこと、に含まれてるだろうが 自分の勘違い棚に上げるなよ
570 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 09:15:53 ID:Z3kanSY4.net] >>557 550は規格を読んだことがあるやつは皆無と言ったんだよ それがC++だけにせよ規格全てにせよ おかしい主張であることに変わりはない 自分の発言を読み返してみな 俺がわざわざ頓珍漢とか言ってやることもない
571 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 09:16:34 ID:Z3kanSY4.net] 安価ミスった 558な
572 名前:554=556=558 mailto:sage [2019/12/04(水) 09:32:28 ID:mZNCV5xz.net] お前はC++の標準ライブラリ等の仕様の確認に毎回規格書読んでんの?
573 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 09:53:35 ID:4dvDh/Ut.net] >>551, >>553 ありがとうございます。 今「C++ポケットリファレンス」を見たら ほかのマニピュレータと異なり、std:setw()は例外的に効果が持続しません。 一度std::setw を指定した出力が行われると効果は解除されます (std::setw(0)を呼び出した状態になります)。 とありました (p.250)。 それと... $ man std::setw 〜 The width property of the stream will be reset to zero (meaning "unspecified") if 〜 ちゃんと書いてますね。何より先に man を見るべきでした。 とはいえ setw は "例外的" なのだとちゃんと教えてくれる本は助かるなあと思いました。
574 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 10:10:41 ID:4dvDh/Ut.net] それから man の最後には cppreference.com へのリンクがありました。 あまり www.cplusplus.com との違いを意識した事はなかったのですが、 公式仕様として参照するべきなのはそっちのようですね。 同じ内容の日本語版は https://ja.cppreference.com/w/cpp/io/manip/setw で見れました。
575 名前:デフォルトの名無しさん [2019/12/04(水) 10:52:51.16 ID:vhuKISsK.net] 規格確認部とかあるんじゃないの。 知らんけど。
576 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 10:57:38.20 ID:Z3kanSY4.net] >>561 え? ・・・そうだけど? 規格票というか、正確にはドラフトな 何かおかしいか?
577 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 11:17:13 ID:mZNCV5xz.net] それ無駄に時間かかってるんじゃないの よくクビにならないな
578 名前:デフォルトの名無しさん [2019/12/04(水) 11:19:22 ID:sb3P/SSe.net] 1.禿でも判るC++入門 2.判ると禿げるC++入門 3.禿専用C++
579 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 12:23:43.29 ID:Jd4YzzOQ.net] >>554 煽る以前に>>513 からはペラッペラの内容しかでてこないことはわかったからお前が出てけよw
580 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 12:29:09.42 ID:Jd4YzzOQ.net] >>561 必要なら読むだろ 流石に毎回じゃないけど そもそもお前は規格も読まないでテキトーにコード書いてるのか?
581 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 12:36:02.75 ID:mZNCV5xz.net] >>569 >流石に毎回じゃないけど なら黙ってろ 規格の原文読まない=テキトーにコード書く、なのかお前の中では 思い上がりすぎだろ
582 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 12:48:55.97 ID:Z3kanSY4.net] いや、きちんと仕事したくて 伝聞に頼らず一次ソースを確認するんだよ
583 名前:デフォルトの名無しさん [2019/12/04(水) 12:53:29.05 ID:sb3P/SSe.net] 実用コード書くより机上の空仕様書描くのが好きな人なんやろな
584 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:03:10.48 ID:Jd4YzzOQ.net] >>570 > 規格読んだことある人なんか皆無だと思うよ とか言うバカに言われてもなぁ 知識がペラッペラすぎるw
585 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:09:39.95 ID:6uL3p
] [ここ壊れてます]
586 名前:MIB.net mailto: おまいらスレタイ [] [ここ壊れてます]
587 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:17:06.83 ID:mquXx5f5.net] みんな私のために争って!
588 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:19:26.79 ID:mZNCV5xz.net] 「きちんと仕事したくて伝聞に頼らず一次ソースを確認」 なんか胡散臭くなってきたな・・・・ 「仕事でやってる人もフリーソフト開発者も」のどちらにも当てはまらないのに噛み付いてきたんだろうな エアプログラマの相手してスレ無駄遣いした、すまんかった
589 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:20:38.21 ID:6uL3pMIB.net] ソフトエンジニアでC++の規格書を読む人なんてほとんどいないよ そんなのを読んでも良い設計にはつながらない
590 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:23:39.63 ID:6uL3pMIB.net] 規格書で確認しないと書けない/読めないようなコードは 基本的には悪いコード
591 名前:デフォルトの名無しさん [2019/12/04(水) 13:26:15.79 ID:sb3P/SSe.net] ゴールポスト移動中ですね判ります
592 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:27:52.48 ID:Z3kanSY4.net] 規格書ではなく規格票な つまらん齟齬を避けたいのも 規格票を読む目的の1つだ
593 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:42:20.48 ID:MnUOTj8y.net] >>578 でも最近、特に海外の方で自分が知っている素朴な C++ とは全く違う 書き方をしている C++ コードを良く見かけるようになったので、 新しい仕様を学ばないと理解できなくなってきた。 STLを深く使うと C++ とは思えないようなコードになるので。
594 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:46:18.71 ID:P3QxjggL.net] フロント周りは全くついていけない コロコロと次から次へ節操なく移り変わって馬鹿じゃねえの、とつい老害的思考に
595 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 13:48:46.17 ID:rFzpkzsp.net] C++20でコンセプトやモジュールやコルーチン記法が入ってきたら、そういう古兵にはもはやC++には見えんだろうなぁw
596 名前:デフォルトの名無しさん [2019/12/04(水) 13:49:01.49 ID:sb3P/SSe.net] CUIのフロントはTurboC++だったな
597 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 14:25:33.26 ID:33/nOLSe.net] C++で音鳴らせるようになるの?
598 名前:デフォルトの名無しさん [2019/12/04(水) 15:02:13 ID:vhuKISsK.net] バスブーストですか?
599 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 15:46:25.30 ID:MnUOTj8y.net] 「フロント周り」って何のことですか??
600 名前:デフォルトの名無しさん [2019/12/04(水) 16:29:27.61 ID:vhuKISsK.net] フロント企業が一般消費者と直接取引する会社で、バックが暴力団じゃなかったっけ。
601 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 19:40:12.56 ID:FhHmXOPx.net] つまんな
602 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 19:50:18.04 ID:FhHmXOPx.net] 企画書を読まないとわからないコードなんかあると思ってるのか? 読むべきはcppreferenceのようなアホにも分かるように優しく解説してくれてる文書 分からないことがあれば必要なキーワードを検索欄にぶち込んだらすぐに分かるようにできている
603 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 20:09:28.90 ID:6yabeJe9.net] アホのサバイバルか 唾棄
604 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 20:33:31.84 ID:ZHZFM6qI.net] プロでもアマチュアでもいいんだよ 初心者でも学生でもいいんだよ ただし 身の程知らずのド素人が知ったふうな口を利いてるとさすがに叩かれるよ
605 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 20:49:47.75 ID:+udf6Yna.net] >>577 > ソフトエンジニアでC++の規格書を読む人なんてほとんどいないよ お前の周りはそうなんだろうな > そんなのを読んでも良い設計にはつながらない 読んだことない奴はそう言うよなw >>578 お前規格票に何を書いてるのか知らんだろ まあそのまま沈んどけ
606 名前:デフォルトの名無しさん [2019/12/04(水) 21:20:21.85 ID:xsMIF6qI.net] ていうかC++のスレでこんな流れが加速するなんて 思ったよりC++erて数いたんだなぁ、というのが素朴な感想
607 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 21:22:48.52 ID:DNIeF7b9.net] アホでも炎上商法はできるってことだ
608 名前:デフォルトの名無しさん [2019/12/04(水) 21:54:34.88 ID:vhuKISsK.net] じゃあ点呼取ります。 江添クン!
609 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 22:15:09.71 ID:ZHZFM6qI.net] > 思ったよりC++erて数いたんだなぁ、というのが素朴な感想 C++erというよりここは単に無職と学生サンのすくつでしょw
610 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 22:19:24.66 ID:7vpFGLgR.net] とりあえず>>593 は無職だと思う
611 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 22:27:51.85 ID:UrCkYA+I.net] c++11以降みたいなああいうコード書きたいなら変な見栄はらずにpythonでもrubyでもやってたらいいんだよ。
612 名前:デフォルトの名無しさん [2019/12/04(水) 22:31:45.53 ID:QZ1McR0s.net] C++コンパイラやSTL準拠ライブラリを作る仕事に関わってたら規格書を読まないとどうにもならないと思うけど、 そうじゃない人は市販のC++入門で十分じゃないかな。
613 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 22:33:17.56 ID:J7QAHgda.net] >>596 金型の会社に出向いて定期的に講座やってるらしいね 金型の演算ってそんなC++が効くものなんだ CGALみたいに幾何分野でバリバリ使われるのは知ってるけど、設計の分野も同じなんかな
614 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 22:33:57.92 ID:UrCkYA+I.net] てか規格通りにまともに動くなんてのは例外ってことは 普通にc++を仕事で使ってりゃ分かるもんだがな。 その時点で江添みたいに実際の仕事で使ってないのが丸分かりになる。
615 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 22:58:37.27 ID:CXPVLMHx.net] 今時MSVCでも大部分は規格通り動くぞ
616 名前:デフォルトの名無しさん mailto:sage [2019/12/04(水) 23:08:27.56 ID:7MoywY5f.net] >>598 どこからそんなアホな決めつけしてるんだよ… もしかして会社からセミナーとかにも行かせてもらえないような底辺なのか?w
617 名前:デフォルトの名無しさん [2019/12/04(水) 23:22:31.61 ID:vhuKISsK.net] 式を教えてもいいけど、理解できるかどうか。
618 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2019/12/05(Thu) 00:23:37 ID:XYdg44Nt.net] 必要なら読むし必要じゃないならないなら読まないってだけのことだろ。 そんなん場合によるっつーつまらん結論しかないと思うが。
619 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 00:28:04 ID:wvPvimki.net] はいいつものクソ正論いただきました
620 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 00:35:44 ID:dM4mxJ4y.net] 実の無い(楽しそうでもない)話をつづけられるよりはクソ正論で鎮火してくれたほうがマシに思う。 件の人たちはそれで鎮火するような人でもないんだろうけど。
621 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 00:43:36 ID:2jEFb1Vk.net] 互いに見下しあい罵倒しあってこそC++er ここは不毛なマウント取り合戦の場C++スレ 鎮火する必要なし
622 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 01:15:42 ID:+j7BXLrg.net] また髪の話をしてる
623 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 02:59:31.66 ID:9zn59iXI.net] すまんが、レベルの低い人から見ると、レベルの高い人が気軽に話した 内容が「マウントをとられた」と思ってしまうんだと思う。 そういうつもりで言ってなくても。 これは、公立の小学校でよく起きる現象で、問題になっている。
624 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 03:04:36.20 ID:9zn59iXI.net] >>611 蛇足だが、これは欧米諸国でよく知られた現象。 アメリカで記名製掲示板が流行るのは、匿名性掲示板ではどうしても それが起きてしまうので、それをよく分かった上でやっているのかも 知れない。それだけの理由ではないだろうけど。
625 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 06:18:49.18 ID:eAZGTWY0.net] >>609-610 この流れを評するのに「不毛」って言葉を選ぶのはC++らしいね。 「マウント」も落語「頭山」を想起させる。
626 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 08:26:15 ID:V4GZwDuE.net] しかしあれだな、C++ほどハゲがよく似合う言語を知らない
627 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 11:35:47 ID:tjjaS4Ug.net] 江添亮のC++入門 (webドラフト版? https://ezoeryou.github.io/cpp-intro/#再帰関数 ) を読んでます。 >例えば以下は階乗を計算する再帰で書かれたループだ。 > int factorial( int n ) { ... > return n * factorial(n-1) ; > ... >このコードは末尾再帰になっている。 >末尾再帰は非再帰のループに機械的に変
628 名前:キできる特徴を持っている これ factorial(n-1) が返ってきたらスタックに積んである n を掛けないといけませんよね。 厳密には末尾再帰とは言えない気がします。 そういうの無しに「直帰でコール元に値を渡せる場合」に末尾再帰と言えるのだと思ってたんですが、 私の理解が間違っているのでしょうか? まあ今のコンパイラーは賢いので細かい事気にする必要ないのかもしれませんが。 [] [ここ壊れてます]
629 名前:デフォルトの名無しさん [2019/12/05(Thu) 11:37:52 ID:IbmhSLeW.net] >>611 馬鹿ほどそれを気にするよな 判らなかったら調べれば良いのに 調べずに反論し始めるω
630 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 12:32:19 ID:RTwQsK8m.net] >>615 末尾再帰じゃないよ
631 名前:デフォルトの名無しさん mailto:sage [2019/12/05(Thu) 13:51:16 ID:tjjaS4Ug.net] >>617 ですよね。 ちょっと気になってたのでスッキリしました。
632 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 18:12:34.01 ID:5PaJAEA2.net] 簡単にループに出来るものはループで記述した方が良いよ 末尾再帰の場合もそうじゃない場合も 実行速度、使用リソース、 デバッグしやすさ、 スタック計算ツールなどツール類の使用、 などなどいろんな要素で
633 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 18:50:53.78 ID:9zn59iXI.net] >>619 本当は、再帰呼び出しだとスタックサイズの制限により呼び出しの深さ(階数) に制限が付いてしまう。ローカル変数を沢山使っている関数で、 1000万個のオブジェクトを再帰的に処理すると、スタックオーバーフロー が出てもおかしくない。しかも、最近のマルチスレッド環境だと、 スタックのサイズはどうしても制限が強くなり勝ち。
634 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 18:58:39.27 ID:5PaJAEA2.net] 一言で言うと「使用リソース」だね
635 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 19:02:32.74 ID:5PaJAEA2.net] 「最近のマルチスレッド環境」はあまり関係ない 固定スタックサイズの組み込みCPUの方がヤバい PICみたいなハードウェアスタックだともっとヤバい
636 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 19:28:34.51 ID:ZSRmDUxb.net] 検討事項が増えるから仕事で再帰は使わんね。 理解できない人も多いし。
637 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 19:42:30.55 ID:9zn59iXI.net] >>622 シングルスレッドだと、スタックは自動伸張することが可能だった。 ところが、32BIT のマルチスレッド環境だと仮想メモリ空間のアドレス 空間自体が不足してしまうので、それは難しい。 ただし、64BIT 環境だと仮想メモリ空間が大きいので余り問題にならない かも知れない。
638 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 19:54:34.15 ID:5zWy9aB9.net] 再帰の例でよくでてくるフィボナッチ数列の計算なら 再帰より for で二変数保持しながら計算した方が性能でも可読性でも上だろうな。
639 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:04:07.94 ID:5PaJAEA2.net] >>624 Windowsだとスタックサイズは32bitでも64bitでもデフォルト1MBだぞ 適当な事を言わないように
640 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:10:23.46 ID:5PaJAEA2.net] >>625 組み込み型サイズ程度だと普通にexpを使って計算する方が速い 多倍長の巨体な値でも 素直に1個ずつ計算すると非常に遅い もっとずっと高速な方法がある
641 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:16:10.38 ID:5PaJAEA2.net] 再帰をループに置き換えるので面倒なのは いろんな箇所でたくさん分岐するヤツ まあでも面倒ってだけで、 必ず再帰を使わずに記述出来る
642 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:21:10.87 ID:5zWy9aB9.net] treeを辿るコードなんかは再帰のが書きやすいわな。
643 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:23:50.71 ID:5PaJAEA2.net] treeをたどるコードは再帰コールするのが1箇所だからまだ楽な方
644 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:24:01.37 ID:9zn59iXI.net] >>629 Tree は再帰でやるべきものの一つ。 スタックの制限も、Treeの「段数(階数)」自体が余り深くなりにくいので 問題が生じにくく、再帰でやっても問題ないものの一つでもある。 ただし、親子関係の深さ方向だけを再帰にし、兄弟方向は、単純な ループを使うべき。
645 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:28:30.76 ID:5PaJAEA2.net] 再帰にすべきかどうかはものによる 例えばstd::setの検索は普通ループを使う
646 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:38:37.36 ID:tjjaS4Ug.net] フィボナッチとかで再帰 末尾再帰を捨てる(性能とスタック無駄遣いに目を瞑る)と可読性はかなりいいと思うんです。 int fibo(int n) { if (n<=2) return 1; else return fibo(n-1) + fino(n-2); } その場で使い捨てるようなプログラムにはアリだと思います。 でも末尾再帰を目指すと.. . . int fibo(int n, int a=1, int b=1){ if (n<=2) return b; else return fibo(n-1, b, a+b); } どうなんですかね. . .。Lisp脳だと forループより好まれるかもしれません。 ちゃんと末尾再帰最適化が効けば性能は良いのでしょう。
647 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 20:48:58.05 ID:5PaJAEA2.net] >>633 前半 見やすさはそれが一番だね 記述が定義通りなので 後半 それなら普通のループの方が分かりやすくないか?
648 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 21:03:01.64 ID:tjjaS4Ug.net] あちら(Lisp)の世界ではそうでもないみたいですよ。
649 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 21:09:55.69 ID:5PaJAEA2.net] へ〜
650 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 21:23:00.63 ID:oayOS3nx.net] C++てparallel_forとか未だにないんだな、まぁTBB使えばあるけど標準規格には用意されてない 仕方がないんでPartitionerは自前で作ったが、そんな付け焼き刃用意したところで、 いちいち明示的に各スレッドの終了の待ちあわせせにゃならん。 挙げ句の果てに mtx.lock() ---- mtx.unlock() て orz クリティカルセクションはブロックで囲って lock(mtx){ } とでも書かせろや オートunlockとかしょーもないもんは用意してバカじゃねーのか しかも、未だにasync/await はなくて、C++20で実装て。 何が必要かわかってないのかC++規格作ってるアホ共 死ね
651 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 21:36:40.64 ID:JlYSK1cQ.net] つstd::lock_guard
652 名前:デフォルトの名無しさん mailto:sage [2019/12/05(木) 21:51:24.38 ID:u0CioZb2.net] adync awaitなんてネイティブで実装しようとしたら面倒なのわかるだろうに それでもぶっこんでくるのだからc++11以降は完全にポリシー変更しているよね