- 1 名前:デフォルトの名無しさん mailto:sage [2017/10/10(火) 00:11:34.01 ID:nc/5PI4P0.net]
- 次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part131 mevius.2ch.net/test/read.cgi/tech/1501295308/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.101【環境依存OK】 mevius.2ch.net/test/read.cgi/tech/1500329247/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
- 543 名前:デフォルトの名無しさん [2017/11/11(土) 08:46:05.02 ID:JauW0Lbxd.net]
- スタックオーバーフロー起こしそう
- 544 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 08:58:22.67 ID:VdKe4lXM0.net]
- >>532
スタックが無駄。
- 545 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 08:59:35.86 ID:FtIHrpnF0.net]
- ていうかstd::stringにお任せしておけばデータサイズの管理が不要とか池沼の考え
何文字でも受け付けるとかいうのはテストしようが無いからまともな仕様ではない よってまともな設計は不可能
- 546 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:01:47.94 ID:VdKe4lXM0.net]
- 常識的な範囲で受け入れてくれればよい。
それを行うことで何をしたいのかが見えないなぁ。
- 547 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:03:17.54 ID:FtIHrpnF0.net]
- 手前の常識がクライアントの常識と思い込むのは池沼のry
- 548 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:06:15.75 ID:FtIHrpnF0.net]
- つか>>537もかなり問題発言
スタックは関数を抜けたら開放されるのだから、 スタック領域を使い果たさないように設計された関数ならスタックをいくら使うかは関数の勝手 ここでも「スタックの消費は少ないほうが良い」という手前の常識が
- 549 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:06:43.21 ID:VdKe4lXM0.net]
- じゃあ、君はメモリが確保できないことをどう説明するんだい?
スタック大量に確保したら余計引っかかるぞ。
- 550 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:10:47.99 ID:VdKe4lXM0.net]
- 本質は同じ。瞬間メモリ使用量の問題だからな。
少ない方がイイに決まって無いかい?
- 551 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:17:19.24 ID:FtIHrpnF0.net]
- >>542
スレッド生成時にそのスレッドが使えるスタックは一般に割り当てが完了するから、 割り当てられた領域をオーバーしなければどう使っても良い もちろんフルに使ってもヒープの圧迫にはならない スタックが伸びれば伸びただけヒープ用メモリ領域を圧迫するとか ごく一部の超ロースペックな組み込み環境(スタックがただ1本だけ=スレッドが1個だけ)限定の話じゃないの; プログラムのメモリの使い方について一体どんな理解をしているのか;;
- 552 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:22:37.81 ID:VdKe4lXM0.net]
- >>544
じゃあnewしても問題なく確保できるじゃないか。 クライアントが不足の文字数ブッコンで落ちるよりはいいと思うけどね。 あと、ほかがヒープ食っててスタック確保できないケースはないの? なんでもヒープにキックする人嫌い。
- 553 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:23:01.72 ID:FtIHrpnF0.net]
- >>543
std::string経由でヒープ上にchar commad[256000];を確保する方が スタック上にchar commad[256000];を確保するより常に優れた設計であるという根拠は?
- 554 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:25:34.33 ID:VdKe4lXM0.net]
- >>546
仕様が提示されてないから。250kbも使う保証がない。 なら、std::stringがchar command[256000]と確保するのは優れてるの? 折衷案なだけじゃない?
- 555 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:26:29.15 ID:FtIHrpnF0.net]
- >>545
藻前は文字数ブッコンでエラーを返すことと文字数ブッコンで落ちることの意味の違いの重大さがわかっていない 漏れは終始エラーを返すことを目指した発言をしてゐる
- 556 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:27:27.12 ID:VdKe4lXM0.net]
- >>548
あそー。 確保できなかたらSIZEは0になるから、ほとんどの処理は通らないようにエラー処理はできる。
- 557 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:29:57.09 ID:VdKe4lXM0.net]
- c++には例外もアルヨ。
- 558 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:40:15.26 ID:VdKe4lXM0.net]
- 化石か!
- 559 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:42:44.46 ID:FtIHrpnF0.net]
- >>547
なんか文字数の上限仕様が提示されたらスタック上に取るほうが良いと言ってねえが?まあ一般にそれで良いのだけども >>549 メモリ不足チェックと文字数チェックを混同するのは池沼のry メモリ不足はさまざまな要因が重なった結果起きる現象なので 「入力Xを与えたらメモリ不足でクラッシュする」という仕様はありえない (入力とメモリ不足との関係は、一般に再現性のある形ではテスト仕様に組み込めない 一方、「文字数n未満の入力Xはエラーとする」という仕様ならアリで 再現性のあるテストケースも書けてバッファとしてとるべき配列サイズも計算できる(きちんと設計しているなら
- 560 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:44:02.22 ID:FtIHrpnF0.net]
- >>552訂正スマンorz
誤: 文字数n未満の入力Xはエラーとする 正: 文字数nを超過した入力Xはエラーとする
- 561 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:46:24.25 ID:VdKe4lXM0.net]
- >>552
ロースペックじゃないコンピュータつかってるんだろ? 非常識な文字数入れられたらはじくなんて別に難しくないだろ。 スペックわかってるんだったらなおさら。
- 562 名前:デフォルトの名無しさん [2017/11/11(土) 09:47:59.39 ID:atpFEB620.net]
- スタックに充分な領域を確保したから大丈夫って頭おかしい設計だわ
- 563 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:49:50.67 ID:FtIHrpnF0.net]
- >>554
文字数チェック不要と考えているかもしれない>>530とかに言うべき
- 564 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:54:01.12 ID:VdKe4lXM0.net]
- はいはい。もういいわ。
エラー処理真面目にやるんだったら、そういう方向で考えるけど。 ここではそんなに求められてない。一般感覚が無いとそれ何回もやるのか? 不適当で有名な5chでなにを演説してるのやら。
- 565 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 09:58:28.19 ID:FtIHrpnF0.net]
- >>555
やみくもにスタック消費量最小を目指すのは、 自分の関数がどれぐらいスタック使うのかおよびスタック領域にどれぐらい余裕があるのか 見積もる手間を惜しんで手抜きしているだけな可能性が微レ存、 ていうか「スタックに充分な領域を確保した」というのが真なら(机上検証、レビュー、テストで担保できたなら 「大丈夫」という結論で何の問題も無いんじゃ…
- 566 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 10:07:34.21 ID:WEOLmGSE0.net]
- >>544
スタック領域には当然上限があるが、常にその上限まで割り当てていたら無駄だろう。 LinuxもWindowsも必要に応じてページを割り当てる。
- 567 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 10:17:10.01 ID:FtIHrpnF0.net]
- >>559
スタック領域を使い切るのが美徳とは言っていないわけでありまして、 なおかつページングの発生頻度は、メモリ消費箇所がスタックかヒープかの違いよりは 領域へのアクセス頻度の問題ではなかろうかと、
- 568 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 10:35:02.95 ID:WEOLmGSE0.net]
- パフォーマンスの話じゃなくて、これが一般には正しくないって言ってるの。
>スレッド生成時にそのスレッドが使えるスタックは一般に割り当てが完了するから、 >割り当てられた領域をオーバーしなければどう使っても良い >もちろんフルに使ってもヒープの圧迫にはならない
- 569 名前:デフォルトの名無しさん [2017/11/11(土) 10:53:30.83 ID:opm7+oFX0.net]
- んでchar commad[256000];をどうやってリターンするんだ?
- 570 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 11:07:32.64 ID:WYLE0xS1M.net]
- 普通ならstd::string使う
char使いたい人は使えばいい おしまい
- 571 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 11:11:42.29 ID:d7ebwqzc0.net]
- 256000という数字にセンスを感じるなあ
- 572 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 11:50:48.17 ID:yWjpohs20.net]
- > char commad[256000];
しかも0が非ascii
- 573 名前:デフォルトの名無しさん [2017/11/11(土) 13:26:05.59 ID:cTWJmMx00.net]
- >>529
いや、commandを何バイト確保しておこうが snprintf() の方を使った方が良い。 https://linuxjm.osdn.jp/html/LDP_man-pages/man3/sprintf.3.html gcc で asprintf() 使ってもいいなら command は char * でも行ける(その代わり後でfree())。 https://linuxjm.osdn.jp/html/LDP_man-pages/man3/asprintf.3.html
- 574 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 14:07:40.16 ID:x64hpPPQ0.net]
- scanf("%s"にツッコミなし!
- 575 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 14:52:43.33 ID:cTWJmMx00.net]
- >>567
あまりに低レベルで目に入らんかったw
- 576 名前:デフォルトの名無しさん [2017/11/11(土) 17:48:20.77 ID:PUzdOh0e0.net]
- >んでchar commad[256000];をどうやってリターンするんだ?
だからそれはstringでも同じだな。stringを使えばいいという発想では駄目ということだ。 メモリを確保する必要がある。 しかも、サブルーチンを抜けた後で、何処かでそれを解放する機構が必要だ。サブルーチンを抜けた 後だと自動で解放しない限りは解放する方法はない。つまり肝心なのは自動でメモリ解放機能が ついていることだ。それがついてないstringクラスなんてこの場合は全く使い道がないってことだ。 だからstringって馬鹿の一つ覚えを言うやつは間違いってことだね。
- 577 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 18:01:59.33 ID:qx0Cuc+s0.net]
- 頭おかしい
- 578 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 18:12:16.05 ID:NuT5AKLg0.net]
- なんかおかしな雰囲気を出してるね
- 579 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 18:18:07.19 ID:ybMjRTfR0.net]
- >>569 std::string はデストラクタで自動でメモリ解放するよ。
- 580 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 18:20:22.00 ID:tT1WP+x8r.net]
- auto f() {
struct { char a[256]; } r{};
- 581 名前:return r;
} int main (){ auto[array] = f(); } ちょっとスタックが厳しそうだ [] - [ここ壊れてます]
- 582 名前:デフォルトの名無しさん [2017/11/11(土) 18:43:22.06 ID:35XI65Ti0.net]
- >>569
本当のバカはその一つすらまともに知りませんでした
- 583 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 19:32:54.25 ID:a9mrqTdG0.net]
- 今どきstd::stringを批判してcharの配列の優位性を説くとか
- 584 名前:デフォルトの名無しさん [2017/11/11(土) 19:56:58.42 ID:Hv/PaJUT0.net]
- string_viewとか持ち出して言うならともかく
- 585 名前:デフォルトの名無しさん [2017/11/11(土) 20:40:48.77 ID:35XI65Ti0.net]
- >>575
全く批判になってないから。 string_viewも今回のような用途に使うもんじゃない
- 586 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 21:23:35.64 ID:u9h6IsulM.net]
- テンプレートって基本ヘッダファイルに書くと思うけど、コンパイル単位ごとに全部コードのコピーが作成されるの?
- 587 名前:デフォルトの名無しさん [2017/11/11(土) 21:25:00.09 ID:Hv/PaJUT0.net]
- >>577
string_viewって何か知らないのか?
- 588 名前:デフォルトの名無しさん [2017/11/11(土) 21:41:30.08 ID:4HyMUlDc0.net]
- そこでmoveですよ。
- 589 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 21:45:04.19 ID:ybMjRTfR0.net]
- >>578
規格は生成コードまで規定しないから、気になるならアセンブリとか見るのがいい。 関数テンプレートあたりだとコンパイル単位またいでも同じポインタが得られることが要求されていたりはする。
- 590 名前:デフォルトの名無しさん [2017/11/11(土) 22:32:22.44 ID:35XI65Ti0.net]
- >>579
今回の件にstring_view使ってみなよ
- 591 名前:デフォルトの名無しさん [2017/11/11(土) 22:37:09.49 ID:35XI65Ti0.net]
- もしかして
string_viewとか(無理やり)持ち出して(バッファーを解放しないと)言うならともかく という意味か? そうだったらそこまでエスパーにはなれんかったわ
- 592 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 22:42:02.84 ID:aJZfBE3c0.net]
- みじゅくもの
- 593 名前:デフォルトの名無しさん [2017/11/12(日) 05:09:14.57 ID:yBBP+7vl0.net]
- >>583
何か勘違いしているか? 俺は生配列を使いたがるガイキチたちを擁護したいわけじゃないし もちろん意見が一致していない C++スレなのにC++のライブラリを食わず嫌いしてるフシのあるやつに ちょっと話題を振ってみただけだ
- 594 名前:デフォルトの名無しさん [2017/11/12(日) 05:12:35.53 ID:srpvXSqe0.net]
- エスパー通訳頼む
- 595 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 05:23:52.17 ID:nuCi4dlE0.net]
- ストリングビューはストレージを保持しないぞ。
外部からやってきたやつに操作を与えるだけ。 パペットっていうかなんていうか。
- 596 名前:デフォルトの名無しさん [2017/11/12(日) 05:33:48.19 ID:srpvXSqe0.net]
- >>587
誰もそんな事は聞いてないんだけど
- 597 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 07:18:14.98 ID:nuCi4dlE0.net]
- そっか、当たり前すぎたな。
- 598 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 07:30:16.55 ID:/72Ra87B0.net]
- 頭でっかちなアスペ池沼多過ぎか
- 599 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 08:13:37.80 ID:SrvHRpLe0.net]
- std::stringは有用だがstd::XXXstream系は糞杉
→必然的にsptintf_s()とstd::stringを併用するスタイルになる いずれワカル
- 600 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 08:22:45.23 ID:SrvHRpLe0.net]
- および有用だからといってプログラムの動作根拠を成す
数量的関係の把握をサボるというのは話が違う std::stringにメモリが許す限りいくらでも長い文字列を格納できるから大丈夫とか、 スマポを使っとけばいつか(10万年後かもしれないが)確実に開放してくれるから大丈夫という見込みだけで テストもせずに青天井なデータ処理を許すプログラムをリリースするのは 素人プログラミングに後退である ていうか現在の潤沢なメモリ搭載環境では問題の発覚が遅れる分なお悪い
- 601 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 08:32:07.61 ID:11xnBK1L0.net]
- 10万年後wもうお前黙っておけ
- 602 名前:デフォルトの名無しさん [2017/11/12(日) 08:47:13.70 ID:qGtn1GtX0.net]
- どんなひどいプロジェクトで仕事すれば、こんなパラノイアを発症するんだろうな
- 603 名前:デフォルトの名無しさん [2017/11/12(日) 09:05:22.76 ID:yBBP+7vl0.net]
- >>592
つーことは、おまえbad_allocをcatchせずに放置してるのか
- 604 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 09:15:31.43 ID:SrvHRpLe0.net]
- つか今気づいたが>>561は一体何が言いたいんじゃ…
ページ割り当ては論理アドレス上の領域確保に対し透過的なので >スレッド生成時にそのスレッドが使えるスタックは一般に割り当てが完了するから、 >割り当てられた領域をオーバーしなければどう使っても良い >もちろんフルに使ってもヒープの圧迫にはならない の否定根拠にはなりえぬ
- 605 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 09:17:28.25 ID:SrvHRpLe0.net]
- >>595
ていうかむしろ藻前は正常系がbad_allocのcatchに依存した設計してるの?
- 606 名前:デフォルトの名無しさん [2017/11/12(日) 09:25:43.37 ID:yBBP+7vl0.net]
- >>597
なぜそう思った?
- 607 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 10:48:39.64 ID:MOg5phwx0.net]
- >>594
お前らがよってたかっていじめるからだろ w
- 608 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 13:20:18.65 ID:cRGoHocf0.net]
- まだ516の糞コードの話題やってんのか
まったく飽きないフレンズどもだな セルリアンに喰われちまえよ
- 609 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 17:58:51.11 ID:mnWm2NGv0.net]
- 次は20が控えててどんどん進化してるけどmeyers本
- 610 名前:なしについていける自信がないよ。
17以降遭難者が続出するんじゃなかろうか。 [] - [ここ壊れてます]
- 611 名前:デフォルトの名無しさん [2017/11/12(日) 18:04:43.84 ID:Rpn1RmMo0.net]
- 17ってそんなに難しいか?
14以後ってか11以後、03までのストイックを通り越したマゾプレーからの離脱が 大きなテーマになっていてautoのinitializer_listみたいなミスはしながらも ちゃんとそれを正していく自浄作用が機能していると俺は思うが
- 612 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 18:39:00.77 ID:1bparYl/0.net]
- auto_ptrとかgetsとかトライグラフとかboolの++とか
危険で無駄で混乱を招くゴミが続々取り除かれてどんどん使いやすくなってるよね 生ポインタや生配列をいじくり回してメモリ壊すこともほとんどなくなった
- 613 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 20:18:16.94 ID:tDIYjV/wa.net]
- c++の機能がこのまま進歩していったとしてマクロは消えるかな?
- 614 名前: mailto:sage [2017/11/12(日) 20:20:30.26 ID:Va1KoPXV0.net]
- テンプレートがマクロそのもの
- 615 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 20:33:05.49 ID:tDIYjV/wa.net]
- constexprとかautoのおかげでtemplateもマクロとして使いやすくなったよね。
そう考えるとテンプレートで出来なくてマクロじゃないと出来ないのって何かある?
- 616 名前: mailto:sage [2017/11/12(日) 20:47:50.42 ID:Va1KoPXV0.net]
- 多重マクロはテンプレートで置き換えられるのだろうか?
お題:mevius.2ch.net/test/read.cgi/tech/1432402159/18 ベタな回答: mevius.2ch.net/test/read.cgi/tech/1432402159/106 peace.2ch.net/test/read.cgi/tech/1313183984/803 https://code.hackerearth.com/2642c4w 多重マクロによる回答 mevius.2ch.net/test/read.cgi/tech/1432402159/128 https://ideone.com/vNZWaH
- 617 名前:デフォルトの名無しさん [2017/11/12(日) 21:24:58.95 ID:Rpn1RmMo0.net]
- >>605
テンプレートとマクロの本質的な違いがわかってないな スコープに従うテンプレートやconstと ほとんど何も考えてないおまえみたいなマクロは オブジェクト指向という観点からは全く別次元なものだ
- 618 名前: mailto:sage [2017/11/12(日) 21:43:24.64 ID:Va1KoPXV0.net]
- 「ほとんどなにも考えていない」とは手厳しいですね…
- 619 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 21:52:12.94 ID:D2YYnuTs0.net]
- オブジェクトたいして指向関係ないだろ
- 620 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 21:52:39.76 ID:D2YYnuTs0.net]
- 何だこの日本語wwww
オブジェクト指向たいして関係ないだろ
- 621 名前:デフォルトの名無しさん [2017/11/12(日) 22:01:17.81 ID:rtfRb36m0.net]
- マクロの乱用をさけるためにテンプレートが発達してきたんだからマクロ使わないでね
- 622 名前:デフォルトの名無しさん [2017/11/12(日) 22:17:39.90 ID:dvIcUwwY0.net]
- オブジェクト指向関たいして係ないだろ
- 623 名前:デフォルトの名無しさん [2017/11/12(日) 22:36:48.97 ID:H7C5gFJ50.net]
- >>606
文字列リテラルを、リテラルとして連結するのはマクロじゃないと無理じゃないかな。
- 624 名前:はちみつ餃子 mailto:sage [2017/11/12(日) 23:06:22.93 ID:HZk/rPeS0.net]
- >>614
不可能ではないと思うけど、そう気軽ではないというのは確かだと思う。
- 625 名前:デフォルトの名無しさん [2017/11/13(月) 00:53:11.35 ID:50LJDJg60.net]
- const char8_t[] u8hage = "hage"; // = u8"hage"
const char16_t[] u16hage = "ハゲ"; // = u"ハゲ" const char32_t[] u32hage = "禿"; // = U"禿" const wchar_t[] whage = "はげ"; // = L"はげ" みたいなプレフィックス省略が出来ればいいのになって思うときがあるね
- 626 名前:はちみつ餃子 mailto:sage [2017/11/13(月) 01:19:29.77 ID:eMI9MrYT0.net]
- >>616
Haskell だとリテラルは多相になっていて、型推論で適当な型にあてはめられるんだが……。 C++ では返却値だけ型が違う関数はオーバーロードできないルールがある。 その延長でリテラルは無引数の関数のようなものと考えると文字列リテラルが様々な型で有りうるようなのは難しいと思う。 型の情報が重複してるのがダサいと思うなら型名の方を auto で書くくらいかなぁ。
- 627 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 02:08:07.11 ID:Vao2bSzU0.net]
- kotlinとかswiftにあるiterator.forEach{}の構文がc++にもついてほしい
c++だとiterator.for[=]{ }みたいな構文になるんだろうか
- 628 名前:デフォルトの名無しさん [2017/11/13(月) 02:48:35.71 ID:KYqigAA60.net]
- >>615
うーん… 文字列リテラルは無理じゃね?
- 629 名前:デフォルトの名無しさん [2017/11/13(月) 03:24:18.68 ID:XQ/CgY2w0.net]
- 言語仕様変えないと無理かな?
- 630 名前:デフォルトの名無しさん [2017/11/13(月) 04:17:46.93 ID:V72qpTkz0.net]
- >>619
コンパイル時定数という意味でのリテラルであれば出来るが
- 631 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 07:31:48.15 ID:zGRAb4NCa.net]
- templateだったら関数の返り値が異なってもokだしconstexprならコンパイル時定数だから変換さえ出来ればやれそうな気もする。
>>618 範囲for文は駄目?
- 632 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 07:34:39.03 ID:8qKZRJJX0.net]
- 範囲FORとSTLにfor_eachがある。
en.cppreference.com/w/cpp/algorithm/for_each
- 633 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 09:15:04.60 ID:JahHbsM6M.net]
- >>622
変数.for...って書き方がしたい
- 634 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 09:27:56.98 ID:zGRAb4NCa.net]
- 自作クラスならtemplate関数で範囲forを閉じ込めるとか?
試して無いけどこんな感じで class test{ //begin()とend(),++が定義されているものとする template<typename Func> void for_(Func func){ for(auto& it: *this){ func(lt); } } }
- 635 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 09:34:12.47 ID:TpgUuavl0.net]
- そういう臭い書き方はC++ではあまり採用されない方針
オブジェクト指向じたい、もうあまり言われてなくて テンプレートによるメタプログラミングが主体になってる オブジェクト指向を前面に押し出した言語はオワコンになるという法則があって なもんで、魔除け、キチガイ除けの意味も含めて Java や C# や C++ など、主流言語は 「マルチパラダイム言語」、「オブジェクト指向をサポート」 といった、ちょっと距離を置いた付き合いかたをしてるね きっと、「全ての手続きは必ずただ一つのオブジェクトに紐づかなくてはならない」 という強迫観念的ともいえる窮屈な考え方が脳や精神に良くなかったのだろう 本当に精神疾患を引き起こしてリタイアする人多いし
- 636 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 09:59:56.81 ID:kicNWBgmM.net]
- 変数forならラッパ作れば終わりだけどなんかつまらないね。
apply(op).for(sequence)とかのほうがインターフェースとしては見栄えがいいかも
- 637 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 10:38:35.17 ID:8qKZRJJX0.net]
- >>624
ユニファイドコールシンタックスっていう提案が出ていたけど、ぽしゃった。 俺もほしい。
- 638 名前:デフォルトの名無しさん [2017/11/13(月) 10:50:06.32 ID:4dN82Cnsd.net]
- 「制御構造までオブジェクトに属するべき」ってやり過ぎというより単に根拠のない主張だよね。
- 639 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 11:12:29.10 ID:lmnXwEnk0.net]
- range-based forで十分じゃん何が不満なんだ理解できない
俺が思うのはインデックス取れたらいいなあということぐらい
- 640 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 11:19:17.35 ID:zGRAb4NCa.net]
- 書いといてなんだけど624と630の意見に賛成
- 641 名前:デフォルトの名無しさん [2017/11/13(月) 11:43:20.37 ID:4dN82Cnsd.net]
- zipwith相当のことをどうやって書く?
- 642 名前:デフォルトの名無しさん [2017/11/13(月) 12:13:53.76 ID:uodQK+nnH.net]
- >>630
最終的な結果がその処理順序に影響する(ここのオブジェクトへの操作が独立していない)場合には範囲for文使うなってことじゃね? 標準で取れるようにしてる言語も中にはあるけど
- 643 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 12:34:55.34 ID:kicNWBgmM.net]
- >>628
それは全然別の機能だけどな
|

|