[過去ログ]
【初心者歓迎】C/C++室 Ver.106【環境依存OK】 (1002レス)
【初心者歓迎】C/C++室 Ver.106【環境依存OK】 http://mevius.5ch.net/test/read.cgi/tech/1594615908/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
554: デフォルトの名無しさん [sage] 2021/02/14(日) 18:37:42 ID:RmY9fsVU getline や fgets 入力ストリームの最終行が改行を含まずのに閉じられてる場合 バッファの末端に \nが居ないだけで最終行は取り込まれるよね? http://mevius.5ch.net/test/read.cgi/tech/1594615908/554
555: デフォルトの名無しさん [] 2021/02/15(月) 16:32:22 ID:g92MWppk https://stackoverflow.com/questions/55970169/getline-vs-fgets-control-memory-allocation http://mevius.5ch.net/test/read.cgi/tech/1594615908/555
556: デフォルトの名無しさん [sage] 2021/02/15(月) 19:30:11 ID:BmI3IhrJ そういえば他人のコード変更をレビューするとたまに最終行に改行が追加されているのがあって、 「あーこの人が勝手に改行を追加したのかな、まプログラム的には同じだしいっか」とか思って 無視し続けていたが、あれはその人が使っているエディターによって自動的に変更されてた のかな? 例えば最初にコードを書いた人のエディターは最終文字が改行でなくても構わなかったが 2番目に直した人のは改行を要求するとか... clang-format あたりでそこら辺は統一できるのかな? h
ttp://mevius.5ch.net/test/read.cgi/tech/1594615908/556
557: デフォルトの名無しさん [sage] 2021/02/15(月) 22:19:21 ID:aLBeV9m+ 最近まで、Ruby の1-liner に、バグがあった 末尾の改行コードを削除するために、chomp を使うべき所で、 文字列の末尾の1文字を削除する、chop を使っていた 最終行に改行が無くて、abc なら、ab になっていたw http://mevius.5ch.net/test/read.cgi/tech/1594615908/557
558: デフォルトの名無しさん [] 2021/02/16(火) 14:01:37 ID:kKLrubPe >>554 fgets はバッファの長さ次第 http://mevius.5ch.net/test/read.cgi/tech/1594615908/558
559: デフォルトの名無しさん [] 2021/02/16(火) 14:15:32 ID:kKLrubPe >>554 getline はデフォルトのデリミタだと ' ' と 改行で切られる (ファイル終端の改行はあってもなくても同じ結果) また fgets と違って取得した文字列にデリミタは含まれない ちなみに ifs >> s も getline と似た使い方が出来るが こっちはデフォルトのデリミタは改行のみ ( ' ' ) は取得される また取得した文字列にデリミタは含まれない つまり ifs >> s と getline(ifs, s) は同じではない http://mevius.5ch.net/test/read.cgi/tech/1594615908/55
9
560: デフォルトの名無しさん [] 2021/02/16(火) 14:20:32 ID:kKLrubPe >>554 おまけ https://ideone.com/rM6lgl http://mevius.5ch.net/test/read.cgi/tech/1594615908/560
561: デフォルトの名無しさん [sage] 2021/02/16(火) 18:35:37 ID:7otM+IWb googleのv8がc++で書かれてるってきいて興味もったんですが最強? http://mevius.5ch.net/test/read.cgi/tech/1594615908/561
562: ◆QZaw55cn4c [sage] 2021/02/16(火) 21:12:19 ID:I98rHtI/ >>561 そういうインフラ用途には C/C++ しかないかと‥‥ http://mevius.5ch.net/test/read.cgi/tech/1594615908/562
563: デフォルトの名無しさん [] 2021/02/17(水) 18:17:22 ID:8Df3qLX7 v8 って node.js やん http://mevius.5ch.net/test/read.cgi/tech/1594615908/563
564: デフォルトの名無しさん [sage] 2021/02/17(水) 18:40:43 ID:ZNwah53O v8みたいに飛躍的に処理速度伸びたエンジンって他になにかあるんですか? http://mevius.5ch.net/test/read.cgi/tech/1594615908/564
565: デフォルトの名無しさん [sage] 2021/02/17(水) 19:16:52 ID:Pg4t51og sourcetrail入れてみた http://mevius.5ch.net/test/read.cgi/tech/1594615908/565
566: デフォルトの名無しさん [sage] 2021/02/23(火) 08:35:11 ID:qdsH3SX7 すみません、C++で0以上の整数の範囲を表す型を使いたいのですが、どうするのがおすすめですかね? struct { unsigned begin; unsigned end; }; ま、基本的にこれでいいんですが、もしより良い方法があれば... - もしかして std::pair の方がいいんですかね? ただの struct よりメリットがあったりします? - 一応、「有効な範囲を指してない」という状態が明確化できたらいいんですが... 最近 std::optinal というのを 知ったのですが、大げさ? 上記 begin と end を signe
d にして負のときは無効、とかでもいいんですが。 - 2つの範囲に対して各種集合演算的なものもできるとさらに。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/566
567: デフォルトの名無しさん [sage] 2021/02/23(火) 12:05:47 ID:EYNng8zF lowerbound+offsetの方が融通が効くのでは 範囲としては倍表せるわけだし wrap around しても2周はしないわけだから、範囲に入ってるかの判定には問題は無い http://mevius.5ch.net/test/read.cgi/tech/1594615908/567
568: デフォルトの名無しさん [sage] 2021/02/23(火) 13:18:31 ID:iu17pC6m >>566 > - 一応、「有効な範囲を指してない」という状態が明確化できたらいいんですが... end < begin なら有効でないってやればいいだけじゃね? http://mevius.5ch.net/test/read.cgi/tech/1594615908/568
569: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/02/23(火) 14:15:26 ID:ZvemQ+Fv >>566 std::ranges::views::iota http://mevius.5ch.net/test/read.cgi/tech/1594615908/569
570: デフォルトの名無しさん [sage] 2021/03/06(土) 08:41:51 ID:QrSKtEDt 変な質問ですが std::vector<int, std::allocator<double> > を定義しようとしたら static_assertでタイプが違うと指摘されました じゃあなんでテンプレート変数分けてるんですかね...? http://mevius.5ch.net/test/read.cgi/tech/1594615908/570
571: デフォルトの名無しさん [] 2021/03/06(土) 10:56:56 ID:DM5zd16W 自作のアロケータを使う時に使う、 型が違うのはお約束に反する http://mevius.5ch.net/test/read.cgi/tech/1594615908/571
572: デフォルトの名無しさん [sage] 2021/03/06(土) 11:39:26 ID:8MIrd+yZ テンプレートテンプレートパラメータにしなかったのは何故なんだろうな http://mevius.5ch.net/test/read.cgi/tech/1594615908/572
573: デフォルトの名無しさん [sage] 2021/03/06(土) 12:39:02 ID:QrSKtEDt >>571 そう言われてみれば当たり前の話な気がしますね・・・ http://mevius.5ch.net/test/read.cgi/tech/1594615908/573
574: デフォルトの名無しさん [sage] 2021/03/06(土) 12:45:22 ID:4A7TIztL ああそうか、Allocatorだけ受け取る方法もあるのか http://mevius.5ch.net/test/read.cgi/tech/1594615908/574
575: デフォルトの名無しさん [sage] 2021/03/12(金) 20:55:45 ID:ZDqlVx3B すみません。C/C++自体というよりは、その学習方法についてですけど、教えて下さい。 ネット上で無料で公開されているC++の学習コンテンツで一番良いもしくは定番のものはどれでしょうか? 私はC, Java, C#の経験があります。しかしながら、Cはほとんど忘れてしまいました。 その状態の人間がC++をネット上の無料のコンテンツのみで学習したいのですが、どのページが良いでしょうか? 開発環境は既に準備しました。 よろしくお願いいたします。 http://mevius.5ch.net/te
st/read.cgi/tech/1594615908/575
576: デフォルトの名無しさん [sage] 2021/03/13(土) 11:40:09 ID:g/wAdnDh とりあえずwebのロベールとかでも良いとは思うけど・・ 独習とかの本は何か持っといた方がいいと思う http://mevius.5ch.net/test/read.cgi/tech/1594615908/576
577: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/03/13(土) 14:13:55 ID:aUdFS8U8 ウェブのロベール本ってこれのこと? http://www7b.biglobe.ne.jp/~robe/cpphtml/ いまどき #include <iostream.h> とか書いてあるのはちょっと微妙だと思うぞ。 どの箇所だったか忘れたけど const の扱いで現行の仕様に合わない部分について Taratail だったか Qiita だったかで見た記憶もあるし。 個別に見ればささいなことだけど、 入門者はそのささいなこともわかってないから入門者なわけで、 細かい引っ掛かりが多いとしんどいんじゃないか? http://mevi
us.5ch.net/test/read.cgi/tech/1594615908/577
578: ◆QZaw55cn4c [sage] 2021/03/13(土) 14:52:13 ID:o3uThhpf >>575 本を買った方がいいでしょう、それも複数買う前提で、この世界では「一冊で完結」は無理です 最初の一冊なら私なら旧独習をお勧めします(私がそうでしたから)、が、新独習の評判は聞いてみたいとは思っています http://mevius.5ch.net/test/read.cgi/tech/1594615908/578
579: デフォルトの名無しさん [sage] 2021/03/13(土) 15:28:12 ID:iXgnaDGC >>577 お前がゴリ押ししてる江添本よりはマシだと思うよ http://mevius.5ch.net/test/read.cgi/tech/1594615908/579
580: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/03/13(土) 15:50:23 ID:aUdFS8U8 >>579 俺は江添本を (全体を通しては) 読んだことがないのでごり押しするほど強い関心無いんだけど。 ただ C++ は C++11 が大きなターニングポイントになってるので、それより古い前提の説明は論外という立場。 ましてや C++03 にすら合致しないのは論外も論外。 論外のものを除いて入門向けにマシそうな、 しかも無料で読めるものというと江添本以外に実質的に選択肢がないからよく挙げるだけだよ。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/580
581: デフォルトの名無しさん [sage] 2021/03/13(土) 16:12:25 ID:g/wAdnDh QZも言ってるが独習の新版はC++17らしいぞ http://mevius.5ch.net/test/read.cgi/tech/1594615908/581
582: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/03/13(土) 16:33:14 ID:aUdFS8U8 >>575 話題に上がったから紹介しておくけど、江添本ってのはこれのことね。 https://ezoeryou.github.io/cpp-intro/ 入門書であまり取り上げられないけど入門者が躓きがちなコンパイラのコマンドの話や makefile とかいった周辺事情も 取り上げているかわりに、ヘッダファイルを使い分けしなかったり、継承を扱わなかったりで、 網羅的に C++ を理解するための本ではない。 入門者が入門するための本。 それ以上のことは他の本を読めという投げっぱなしだが、 と
りあえず無料で基礎をおさえられる (しかも日本語!) という意味では他に紹介できるほどのものはない。 C++ ではありがたいことに無料で利用できるリファレンスは意欲的に整備している方々がいて、 https://ja.cppreference.com/w/ https://cpprefjp.github.io/ あたりを見れば細かいことも書いてるんだけど……。 まあ当たり前だが入門書をひとつも読んでないレベルだとみてもわけわからんと思う。 本気で取り組むなら本の数冊くらいは買ったほうがいいと私も思う。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/582
583: デフォルトの名無しさん [sage] 2021/03/13(土) 16:48:52 ID:g/wAdnDh そら今時コマンドラインツール使っててソース1つだけで書いてるようなC++オタクには合ってるかもしれんけどな・・ http://mevius.5ch.net/test/read.cgi/tech/1594615908/583
584: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/03/13(土) 17:11:08 ID:aUdFS8U8 他に存在するなら紹介するんだけど、 無料でという制約の中で (個別のブログ記事とかじゃなく) それなりに筋道をつけた入門書で古すぎないものとなると無いだろ。 英語でいいならあったりするかな? http://mevius.5ch.net/test/read.cgi/tech/1594615908/584
585: デフォルトの名無しさん [sage] 2021/03/13(土) 17:54:16 ID:pYfy5bp8 >>581 自分は半月ほど前に最新版の独習を買って、半分ぐらい(p370あたり)読み進めているんだが、「本書について」によると、C++14とC++17をメインのターゲットにしてるって書いてますね http://mevius.5ch.net/test/read.cgi/tech/1594615908/585
586: デフォルトの名無しさん [sage] 2021/03/14(日) 08:22:46 ID:Zb/GuQ+J アドバイスありがとうございます。 とりあえず、教えていただいたロベールさんのページを見たのですが、網羅的に書かれているようなのでまずはこれを読もうと思います。 > いまどき #include <iostream.h> とか書いてあるのはちょっと微妙だと思うぞ。 すみません。これ、何が悪いのでしょうか。。。 あと、教えていただいて気がついたのですが、C++も結構色々なバージョンがあるのですね。 私が今回触らなければならないコードはかなり前のコードなので、もしか
すると古いバージョンのC++かもしれません。 その辺も意識して勉強しなくては駄目ですね。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/586
587: デフォルトの名無しさん [sage] 2021/03/14(日) 10:23:48 ID:FJEdpMO0 今はもう標準ライブラリに.hがついてるのは無いからそもそも実行できない可能性ある http://mevius.5ch.net/test/read.cgi/tech/1594615908/587
588: デフォルトの名無しさん [sage] 2021/03/14(日) 10:49:48 ID:8Ki8FhWw 実行? http://mevius.5ch.net/test/read.cgi/tech/1594615908/588
589: ◆QZaw55cn4c [] 2021/03/14(日) 14:53:49 ID:uaeFGveg >>585 旧独習には「std::stringを自分で実装せよ」という初級者には眩暈がするほどの崇高な課題が採用されていましたが、新独習には「〜を独力で実装せよ」系のお題は採用されていますか? すくなくとも「〜を独力で実装する」系お題が可能になるだけの基礎知識をつけてくれる本ですか? http://mevius.5ch.net/test/read.cgi/tech/1594615908/589
590: デフォルトの名無しさん [sage] 2021/03/14(日) 17:03:20 ID:ERa14GlL >>589 全13章605ページのうち7章380ページまで進んでいますが、そのようなお題にはお目にかかっておりませんな。 練習問題やその章の理解度チェックで色々な問題が出されていますが、何れも本をよく読めば解ける問題ばかりです。 さらっと先まで目を通してみましたが、そのような課題は見当たらないようです。 旧版のどの箇所あたりで出題されたものですか? もしかして、全く別の本のことなのでしょうかねえ。 ↓の「おまけ」にあるような解答を求める問題でしょう
か? std::stringの実装に学ぶC++入門 - Qiita https://qiita.com/YSRKEN/items/dd3b11e4670bb2b829a5 自分はまだ独習中で、C++は未だ*や&、&&、で頭の中がグルグル回ってしまうレベルなもので、理解できそうですが いきなり自力で作れそうにありませんわw http://mevius.5ch.net/test/read.cgi/tech/1594615908/590
591: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/03/14(日) 18:12:48 ID:aW+jce3e >>586 > これ、何が悪いのでしょうか。。。 1998 年に国際規格 (ISO) になって以来、規格に iostream.h というものが有ったことはない。 .h は不要。 諸々の事情から iostream.h も用意している開発環境が多かったせいか 古い書籍では iostream.h としている場合は少なからずあるのだけれど、 主要な処理系の標準への準拠が急速に進んだこともあって、 資料も規格に寄せた書き方が今では普通。 iostream.h は古い本の象徴みたいな感じになってる。 そんでも
って規格にない以上は iostream.h が存在しない開発環境も普通にあるってのが問題。 https://wandbox.org/permlink/kwpJf5BumkarYWYD 規格になくてもデファクトスタンダードとしてどこにでもあるってのならまあいいかと思わないでもないけど、 無いこともあるんだ。 そういう環境だともちろんエラーになる。 初心者が入門書の最初に載ってるコードを入力してみてエラーになるってのは良くはないだろ。 そんでもって問題がそれだけとは限らなさそうという……と思わせるサインなんだよ、 iostream.h は……。 http://mevius.5ch.net/test/read.cgi/te
ch/1594615908/591
592: ◆QZaw55cn4c [] 2021/03/14(日) 20:04:14 ID:uaeFGveg >>590 手元の旧独習4版(ハーバード・シルト著)6章末「総合理解度チェック」 ・次の演算ができるような strtype クラスを作成しなさい ・+ 演算子による文字列連結 ・= 演算子による文字列代入 ・<>==による文字列比較 固定長文字列を使ってもかまいません。難問ですが、よく考えていろいろと試してみてください。 必ずできるはずです。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/592
593: ◆QZaw55cn4c [] 2021/03/14(日) 20:13:24 ID:uaeFGveg >>590 >C++は未だ*や&、&&、で頭の中がグルグル回ってしまう これらの「記号」は習得に順序があります。 まず * をしっかり理解します。C/C++ はなんといってもポインタが基本です。 次に参照 & を理解します。参照& を使う場面が出てきたら、これを * を使った書き方に書き直す、という機械的な訓練がいい練習になるでしょう 参照 で返す、という場面でも、?参照返しが出来る場合と、?参照返しはできずせいぜい RVO に期待するしかない場合、の??二つの違い
を明確に即答できるようになるべきでしょう(最近まで私はそれができなかった……)参照& の表現は新しい表現( ranged-for とか) でよく目にしますし、??は結構重要だと思います && は多分最後でしょうね、私も && は良く分かっておらず、というか、分からないから使わないという態度に留まっていますが、まあそれでもなんとかなる気がします http://mevius.5ch.net/test/read.cgi/tech/1594615908/593
594: デフォルトの名無しさん [sage] 2021/03/14(日) 20:26:39 ID:ERa14GlL >>592 やはり「独習」の違う本でしたわw 自分はC++関係の5ちゃんスレすら最近になって見てるんで、知らなかったけど その本が「独習」のスタンダードなんですねw 独習C++ 第4版 https://poland-it-blog.com/c_plus_books/ 自分のは、↓の9位に入ってる本です。(しかも同じ出版社) https://freelifetech.com/cplusplus-books/ ご紹介の独習はやり応えありそうなので、今の本を2回ほどやってから、次のステップでそちらを検討してみますわ http://mevius.5ch.net
/test/read.cgi/tech/1594615908/594
595: デフォルトの名無しさん [sage] 2021/03/14(日) 20:28:56 ID:EFkbulbJ QZ案外初心者やなw でも言ってることは全面的に賛成 ポインタや参照、クラス等の基本を抑えてからでないとスマポや、C++11からの要素(右辺値参照含む)の使い方もわからんと思う http://mevius.5ch.net/test/read.cgi/tech/1594615908/595
596: デフォルトの名無しさん [sage] 2021/03/14(日) 20:35:47 ID:ERa14GlL >>593 大変勉強になります 今後もよろしく http://mevius.5ch.net/test/read.cgi/tech/1594615908/596
597: デフォルトの名無しさん [] 2021/03/14(日) 20:46:24 ID:uaeFGveg >>595 >でも言ってることは全面的に賛成 ありがとうございます! >QZ案外初心者やなw もう永遠の初心者のままだと思っていますが、それならそれで「初心者の気持ちが分かる視点からの意見の表明」という形でコントリビュートするのもありかな…、と。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/597
598: ◆QZaw55cn4c [sage] 2021/03/14(日) 22:01:53 ID:uaeFGveg >>594 >>592 は歯ごたえがありそうでしょう?私もこの課題を最初に見たときは眩暈がしました… それから 10 年くらいかな??それくらいたってから https://mevius.5ch.net/test/read.cgi/tech/1434079972/37 を書き、なんとか卒業できたような気がします なおこれは、これでも例外方面に配慮が行き届いていない、とさらに書き直した気がしますが、その書き直しは失くしてしまいました…… http://mevius.5ch.net/test/read.cgi/tech/1594615908/598
599: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/03/14(日) 23:21:43 ID:aW+jce3e 個別の機能を理解してからそれの組み立て方を学習するのがまどろっこしく感じる人もいると思う。 抽象度の高いほう (スマートポインタなど) から解体していく形での 学習のアプローチもそれはそれでありかもしれん。 個人的には個別の機能を先に学んだほうがいいとは思うんだけどね。 実例から学ぶと使い方のパターンとして頭に入ってしまって正確な理屈を きちんと習得できない気がするから。 そうは言っても途中で学習を諦めてしまうようだと正確さもくそもないから
、 人によってわかりやすさは違うし学習にはいろんなアプローチがあるということは 覚えておいてほしい。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/599
600: ◆QZaw55cn4c [sage] 2021/03/14(日) 23:51:21 ID:uaeFGveg 確かに、私が理解している狭い範囲においても、イテレータが先かポインタが先か、とか C++11 / std::thread から入門したけど posix-thread なんか知らん!とか そんな人から補強説が来るのが楽しみです http://mevius.5ch.net/test/read.cgi/tech/1594615908/600
601: デフォルトの名無しさん [sage] 2021/03/15(月) 07:36:02 ID:PXZ12KYt >>591 ご回答ありがとうございます。 理解しました。 その辺も調査しながらやります。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/601
602: デフォルトの名無しさん [sage] 2021/03/15(月) 13:58:23 ID:RVKfnS+W QZが意外と素直で好印象度アップ 逆に高飛車な餃子の高感度ダウン http://mevius.5ch.net/test/read.cgi/tech/1594615908/602
603: デフォルトの名無しさん [sage] 2021/03/15(月) 21:47:16 ID:pqfQRyG1 Qちゃんは昔からいるけど態度は変わらんね ときどき自前のコード上げてるあたりは好ましい プロへのリスペクトは持ってるし謙虚ではある 餃子ちゃんはマジメというか いちいち規格に沿って発言してくれるんで好ましい ただコード上げてるのはみたことないんで実力は不明 アマチュアなのにときどき調子乗っちゃってるのも微笑ましい http://mevius.5ch.net/test/read.cgi/tech/1594615908/603
604: デフォルトの名無しさん [sage] 2021/03/15(月) 23:09:56 ID:kCaDVUc0 はちみつのコードたまーに見るけどすごい変な癖があるよ 意味があるなしに関わらず固執するタイプなんだろうな http://mevius.5ch.net/test/read.cgi/tech/1594615908/604
605: デフォルトの名無しさん [sage] 2021/03/16(火) 13:45:10 ID:A61zCves 参照を返す関数の質問です。 オブジェクトの複数のパラメータを設定するときに、obj.param1(...).param2(...).param3(...); みたいに呼ぶ パターンがあるじゃないですか(ちなみにこれって名前はあります?) これをやりたいときは Obj& param1(int val) { mParam1 = val; return *this; } みたいに参照を返すように宣言しないとダメですよね? Obj param1(int val) { mParam1 = val; return *this; } だと、obj.param1(...) は動くけどリターン用にオブジェクトの(余
計な)コピーが発生する、 obj.param1(...).param1(...) みたいに呼んだ場合はオブジェクトのコピーに2番目の呼び出しが行われ、 結局破棄されてしまうので、objに2番目のparam1()の呼び出しが反映されない。 こんな理解で正しいでしょうか? 実は参照を使う判断にイマイチ迷っているんですが、もしかして毎回(オブジェクトの宣言、引数、戻り値等)、 「このときはここでオブジェクトのコピーが発生するから...」とかイメージすべきなんですかね? 例えば関数の戻り値、関数を出るときに戻り値が臨時で複製されて呼び出し元に渡されるイメージを持っ
て、 「ああこれだと余計なオブジェクトが生成されるよな、じゃあ参照だ。」的な判断? http://mevius.5ch.net/test/read.cgi/tech/1594615908/605
606: デフォルトの名無しさん [sage] 2021/03/16(火) 16:13:51 ID:xnFU2goU builderパターンやね http://mevius.5ch.net/test/read.cgi/tech/1594615908/606
607: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/03/16(火) 16:40:47 ID:AqAKN3jJ クラス構成を見ればビルダーパターンにあてはまりそうだけど、 メンバ関数を連鎖していく表記法のことはメソッドチェインと言ったり、 目的から言うと名前付き引数イディオムということもある。 https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Named_Parameter (要するに考え方のレイヤによる。) http://mevius.5ch.net/test/read.cgi/tech/1594615908/607
608: デフォルトの名無しさん [sage] 2021/03/16(火) 17:00:51 ID:7emEuadh obj + a + b + c operator + () は obj そのものを書き換えず、新たな実体を戻す obj += a operator += () は obj そのものを書き換えるついでに、自分自身の参照を戻す これのどっちに合致したほうが都合がいいかで 複製を戻すか、自分自身の参照を戻すかを分けてる感じ http://mevius.5ch.net/test/read.cgi/tech/1594615908/608
609: デフォルトの名無しさん [sage] 2021/03/16(火) 20:32:04 ID:VN15UowM >>605 > (ちなみにこれって名前はあります?) 大きく言うとFluent interface https://en.wikipedia.org/wiki/Fluent_interface http://mevius.5ch.net/test/read.cgi/tech/1594615908/609
610: ◆QZaw55cn4c [sage] 2021/03/16(火) 21:25:10 ID:EIvloTfy >>609 その wikipedia の C++ サンプルは int main() が二箇所に現れていますが、これってどう読むのですか? http://mevius.5ch.net/test/read.cgi/tech/1594615908/610
611: デフォルトの名無しさん [sage] 2021/03/16(火) 22:36:52 ID:ne+I3KBD すみません。 仮に、本を買って勉強する場合は独習C++というのがいいのですか? 独習C++はCの知識がなくても大丈夫ですか?? http://mevius.5ch.net/test/read.cgi/tech/1594615908/611
612: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/03/16(火) 23:10:25 ID:AqAKN3jJ >>610 単に使い方のサンプルを便宜的に main で書いてあるだけでふたつあるのは特に意味ない。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/612
613: デフォルトの名無しさん [sage] 2021/03/18(木) 18:04:58 ID:KYeguKkE >>611 http://mevius.5ch.net/test/read.cgi/tech/1594615908/613
614: デフォルトの名無しさん [sage] 2021/03/18(木) 18:05:52 ID:KYeguKkE >>611 江添本一択 http://mevius.5ch.net/test/read.cgi/tech/1594615908/614
615: デフォルトの名無しさん [sage] 2021/03/18(木) 18:59:10 ID:OslqqG1Q >>611 C関係無しで覚えるのもいいんじゃね? http://mevius.5ch.net/test/read.cgi/tech/1594615908/615
616: デフォルトの名無しさん [sage] 2021/03/18(木) 19:00:25 ID:OIk6P4WM >>611 独習C++はCの知識が前提だったはず http://mevius.5ch.net/test/read.cgi/tech/1594615908/616
617: ◆QZaw55cn4c [sage] 2021/03/18(木) 23:28:58 ID:QiBLMBVe >>605 >これをやりたいときは >みたいに参照を返すように宣言しないとダメですよね? >obj.param1(...).param1(...) みたいに呼んだ場合はオブジェクトのコピーに2番目の呼び出しが行われ、 >結局破棄されてしまうので、objに2番目のparam1()の呼び出しが反映されない。 確かに、メソッドチェインを繰り返すたびにコピーコンストラクタが呼び出されるのは、イマイチ、という感覚を私も同様に持ちます だからメソッドチェインを書くときには私も参照を返すように書きます、
結局のところ「参照を返す」というのは「ポインタを返す」ことですから、コンストラクタの走りようがない しかし「参照を返す『必要がある』」と言い切れるかどうか? 「結局破棄される」というのは最後のメンバ関数が返す実体を回収していないからであり、「参照を返すから」破棄されるわけではないと感じました。 実際、この実体を回収すれば、それはそれで 2 番目以降の呼び出しが意味を持つように書けると思います https://ideone.com/skVFOr https://ideone.com/LAKqIj 参照でよくわからなくなったときに私がよくやる「参照返しを全く使わずポ
インタで押し通す」とすると次のようになるかと思います https://ideone.com/R82zEE http://mevius.5ch.net/test/read.cgi/tech/1594615908/617
618: デフォルトの名無しさん [sage] 2021/03/19(金) 03:28:58 ID:mbZVOQ2F だからムーブコンストラクタとムーブ代入演算子があるんだろうが・・ http://mevius.5ch.net/test/read.cgi/tech/1594615908/618
619: デフォルトの名無しさん [sage] 2021/03/19(金) 03:37:37 ID:0CmLwf9e >>617-618 てかそもそもコンストラクタ走っていいのかよこの場合に http://mevius.5ch.net/test/read.cgi/tech/1594615908/619
620: デフォルトの名無しさん [sage] 2021/04/09(金) 12:21:23 ID:dUyySPje クラスFooのメンバ関数fの型ってどう書くの? 戻り値void、引数intです。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/620
621: デフォルトの名無しさん [sage] 2021/04/09(金) 12:52:45 ID:N6zWukcq >>620 f の型は void (int) だけど f へのポインタの型は void (Foo::*)(int) http://mevius.5ch.net/test/read.cgi/tech/1594615908/621
622: デフォルトの名無しさん [sage] 2021/04/09(金) 18:45:41 ID:WYvZUx+H >>621 それはメンバ関数へのポインタでしょ 聞いてるのは関数の型でもなく、メンバ関数の型です http://mevius.5ch.net/test/read.cgi/tech/1594615908/622
623: デフォルトの名無しさん [sage] 2021/04/09(金) 20:18:08 ID:DC3guaga 言われてみれば関数の型ってなんだ? http://mevius.5ch.net/test/read.cgi/tech/1594615908/623
624: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/04/09(金) 21:13:09 ID:foJJo5gI C だと関数指示子 (Function Designator) で説明されたりするんだが、 C++ の仕様を Designator で検索しても出てこないな。 シグネチャもまたちょっと違う概念だし、 このあたりのきちんとした解説がまとまったものがあればぜひ読みたい。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/624
625: デフォルトの名無しさん [sage] 2021/04/09(金) 21:39:18 ID:MYEEijki 「メンバ関数の型」が必要になるケースって何じゃろ? http://mevius.5ch.net/test/read.cgi/tech/1594615908/625
626: デフォルトの名無しさん [sage] 2021/04/10(土) 01:44:53 ID:4ITkpFPM >>622 だから「f の型は void (int)」って書いたのに、なんでそれが答えじゃないと思うの? typedef void ftype(int); struct Foo { ftype f; }; void Foo::f(int) {} int main() { Foo x; x.f(0); } http://mevius.5ch.net/test/read.cgi/tech/1594615908/626
627: デフォルトの名無しさん [sage] 2021/04/10(土) 08:44:20 ID:gtw6CEDD 関数ポインタを考える以前は関数の型と言えばイコール評価した値の型だったな。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/627
628: デフォルトの名無しさん [sage] 2021/04/13(火) 16:10:43 ID:uVvL/txB 今は関数の型とかもうどうでもよくて 一周回り帰えりキャプチャとかダイナミックスコープとかの有用性や整合性が中心よね http://mevius.5ch.net/test/read.cgi/tech/1594615908/628
629: デフォルトの名無しさん [sage] 2021/04/15(木) 15:55:01 ID:6RtJrvVe pod的な意味でなく論理的整合性的な型付けの恩恵受けたいなら、別に包む必要無くても常に即席structで返しててやんでい http://mevius.5ch.net/test/read.cgi/tech/1594615908/629
630: デフォルトの名無しさん [sage] 2021/04/24(土) 08:11:28 ID:LUJ0Utr0 C++/CLIで、スタティックライブラリからマネージドクラスを公開するのは無理なんでしょうか? ヘッダファイルに全部実装書けば出来る、ってところまでは調べたんですが、ソースコードをプロジェクト外に置いてるのと変わらないので…。 ダイナミックライブラリでできるならそれでも構わないです。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/630
631: デフォルトの名無しさん [sage] 2021/04/24(土) 08:19:46 ID:nPKzA798 >>630 .NETでstatic libraryなんて作れたっけ? 最終的に.exeと.dllができるのが邪魔だからstatic libraryにしたいというだけなら、 いったんDLLとして作ってILmergeするのが一般的だと思う http://mevius.5ch.net/test/read.cgi/tech/1594615908/631
632: デフォルトの名無しさん [sage] 2021/04/24(土) 08:36:31 ID:LUJ0Utr0 >>631 Lib自体は作れるし、アンマネージクラスなら公開もできるんですが、マネージクラスだと参照側でメンバーが参照できず、LNK2020が発生してしまうんですよね。 ビルドオプションでなんとかできるものなのかな、と。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/632
633: デフォルトの名無しさん [sage] 2021/04/24(土) 09:53:24 ID:K4uxnQki LNK2020ってそれnativeのC++からリンクしようとしてる? http://mevius.5ch.net/test/read.cgi/tech/1594615908/633
634: デフォルトの名無しさん [sage] 2021/04/24(土) 14:56:57 ID:LUJ0Utr0 >>633 libなのでクライアントはC++です http://mevius.5ch.net/test/read.cgi/tech/1594615908/634
635: デフォルトの名無しさん [sage] 2021/04/24(土) 15:16:56 ID:K4uxnQki そりゃ無理。その仲立ちをするためにC++/CLIがあるのに。 一応nativeのC++からでも自分でCLRを立ち上げたりしてマネージドクラスにアクセスする方法は あるらしいが、リンクしてそのまま呼ぶという形にはならない。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/635
636: デフォルトの名無しさん [] 2021/04/24(土) 15:41:46 ID:at4cvaWV 自作のプログラム、起動時の読み込み処理の前に以下を入れると for(int i = 0; i < 100; ++i){ OutputDebugString("dummy!!!!\n"); } 起動時に行っている外部データの読み込みが凄く速くて これを無くすと凄く遅くなるんですが怖い… 3分くらい違いが出るので明らかにおかしい どっかでメモリでもぶっ壊れてますかね? どういう理由が考えられるでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1594615908/636
637: 636 [sage] 2021/04/24(土) 15:43:36 ID:at4cvaWV さっきのダミーを入れなくても 普通にコードを追加したりしてても遅くなったり速くなったりする 別に読み込み処理の部分とは関係ないところでも。 なんでだろう? http://mevius.5ch.net/test/read.cgi/tech/1594615908/637
638: デフォルトの名無しさん [sage] 2021/04/24(土) 15:54:20 ID:hc4SaSPr >>637 それは、本当に native の C++? もしかして、C#のC++/CLI とか? http://mevius.5ch.net/test/read.cgi/tech/1594615908/638
639: デフォルトの名無しさん [sage] 2021/04/24(土) 16:03:17 ID:lkpB631F コンパイラはほんと何してるのか分からんから、問題の部分だけ切り出したのを.sへ吐かせて読みなさい 10行程度のcコードなら、edxとか変な名前のは取り敢えず変数だなって思って追えば、アセンブリ知らずとも大体分かるよ http://mevius.5ch.net/test/read.cgi/tech/1594615908/639
640: デフォルトの名無しさん [sage] 2021/04/24(土) 20:39:49 ID:LUJ0Utr0 >>635 いや、 C++ライブラリ内にマネージクラスを作って マネージのC++プロジェクトから 呼び出したいだけ DLLだったら、C#のDLLからマネージクラスを呼び出すのと 理屈上同じだからできそうな気がするのだけれど 以前実装した時はInterfaceだけ公開して 呼び出されるとそのインスタンスを返す、みたいなことをしたんだけれど http://mevius.5ch.net/test/read.cgi/tech/1594615908/640
641: デフォルトの名無しさん [sage] 2021/04/24(土) 21:31:19 ID:+v1plSJo >>640 .NETはstatic libraryをサポートしていない 出来上がった.libにはそのマネージドクラスのメタデータとか入ってないんじゃない? http://mevius.5ch.net/test/read.cgi/tech/1594615908/641
642: デフォルトの名無しさん [sage] 2021/04/25(日) 00:05:51 ID:Oojm0ZzH >>641 結局そういうことだよね なんか普通にlibのクラスを呼び出せますみたいなのをサンプル付きで出してた記事があってさ…。 まあstaticメソッドしかないクラスばかりだから、アンマネージクラスで公開するか、namespaceでまとめます。 ありがとうございました。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/642
643: 636 [] 2021/04/25(日) 00:07:18 ID:sRfn5IZk >>638 C++とWin32APIのプログラムです >>639 これは自分へのレスですか? 特に遅くなる以外は止まったりする事もないので 困ることはないですがなんか気持ち悪い… http://mevius.5ch.net/test/read.cgi/tech/1594615908/643
644: デフォルトの名無しさん [sage] 2021/04/25(日) 03:40:15 ID:vJWG11Gh >>643 外部データの読み込みは、fopen, _open, CreateFile、CFile のどの系統を使 ってる? http://mevius.5ch.net/test/read.cgi/tech/1594615908/644
645: デフォルトの名無しさん [sage] 2021/04/25(日) 03:43:25 ID:vJWG11Gh >>643 関係ないかもしれないが、HDDが寿命で故障寸前の時にHDDの読み込みが 時々極端に遅くなったりする現象を経験したことがある。 その場合は、そのプログラム以外でも同様の現象が起きるが。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/645
646: デフォルトの名無しさん [sage] 2021/04/25(日) 03:49:56 ID:vJWG11Gh >>645 もし、他のアプリやファイルマネージャーも遅くなることがあるなら、 CrystalDiskInfoなどで診断してみて欲しい。 そのアプリだけ遅くなるが、アプリの動作は正常、というなら、 メモリーやスレッドやOSリソースの使いすぎなども考えられなくは無いが。 何か極端に変わったことしてたりしない? http://mevius.5ch.net/test/read.cgi/tech/1594615908/646
647: デフォルトの名無しさん [sage] 2021/04/25(日) 09:07:00 ID:x26Nnfhp OutPutDegugなんちゃらの関数がファイル出力してるなら、単純にそのドライブのアクセス準備が整ってないとか。 以前、SSDに同じファイル名で一時ファイルの作成と削除を繰り返したら、SSDの仕組み上めっちゃ遅くなったことがある。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/647
648: デフォルトの名無しさん [sage] 2021/04/25(日) 09:59:46 ID:j6IXZwA/ >>642 どこの記事? ちょっと気になった http://mevius.5ch.net/test/read.cgi/tech/1594615908/648
649: 636 [sage] 2021/04/25(日) 10:38:16 ID:sRfn5IZk >>645-647 遅くなる原因の個所が分かった! 画像を読み込む時にメモリを操作して 16bitで読み込む部分があるんだけど これを32bitで読み込むようにすると どんなコードでもまったく遅くならない。 メモリの操作の部分がおかしかったみたい。 自分で書いたコードじゃないのでよくわからない。 32bitのやつと16bitのやつを載せるのでおかしい所あったら教えて。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/649
650: 636 [sage] 2021/04/25(日) 10:39:18 ID:sRfn5IZk これは遅くならないコード int X = 0; for(int y = ImageHeight - 1; y >= 0; --y){ X = 0; for(int x = 0; x < ImageWidth; ++x){ pPx[X] = ((DWORD*)pSrcBuf)[x + (y * ImageWidth)]; ++X; } pPx += Pitch; } http://mevius.5ch.net/test/read.cgi/tech/1594615908/650
651: 636 [sage] 2021/04/25(日) 10:42:37 ID:sRfn5IZk これが遅くなる場合があるコード WORD px, tmp; BYTE b; int X = 0; for(int y = ImageHeight - 1; y >= 0; --y){ X = 0; for(int x = 0; x < ImageWidth; ++x){ px = 0x00000000; pPx[X] = px; b = (BYTE)((((DWORD*)pSrcBuf)[x + (y * ImageWidth)] & 0xff000000) >> 24); //A tmp = 15 * (b / 255.f); px |= tmp << 12; b = (BYTE)((((DWORD*)pSrcBuf)[x + (y * ImageWidth)] & 0x00ff0000) >> 16); //R tmp = 15 * (b / 255.f); px |= tmp << 8;
b = (BYTE)((((DWORD*)pSrcBuf)[x + (y * ImageWidth)] & 0x0000ff00) >> 8); //G tmp = 15 * (b / 255.f); px |= tmp << 4; b = (BYTE)((((DWORD*)pSrcBuf)[x + (y * ImageWidth)] & 0x000000ff)); //B tmp = 15 * (b / 255.f); px |= tmp; pPx[X] = px; ++X; } pPx += Pitch; } http://mevius.5ch.net/test/read.cgi/tech/1594615908/651
652: 636 [sage] 2021/04/25(日) 10:46:22 ID:sRfn5IZk pPxは、32bitの時はDWORD*で、16bitの時はWORD*になってた。 全て載せると長くなるので変更すると速度が変わる部分だけ載せたよ。 16bitの方でも>>636のダミーを入れれば遅くならないんだよね。 やっぱメモリが壊れてるのかな? http://mevius.5ch.net/test/read.cgi/tech/1594615908/652
653: デフォルトの名無しさん [sage] 2021/04/25(日) 11:02:40 ID:vJWG11Gh >>651 pSrcBuf, pPx, Pitch の型、及び、それらを初期化しているコードが重要。 そこに問題があるとバッファオーバーランしている可能性が捨てきれない。 http://mevius.5ch.net/test/read.cgi/tech/1594615908/653
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 349 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.039s