C++相談室 part133
: デフォルトの名無しさん (ワッチョイ 1fcf-H1rY) [] 2017/11/24(金) 16:52:50.43:WoNXR2ax0 次スレを立てる時は本文の1行目に以下を追加して下さい !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part132 ttp://mevius.5ch.net/test/read.cgi/tech/1507561894/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 ttp://mevius.5ch.net/test/read.cgi/tech/1509780815/ ■長いソースを貼るときはここへ。■ ttp://codepad.org/ ttps://ideone.com/ [C++ FAQ] ttps://isocpp.org/wiki/faq/ ttp://www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured : デフォルトの名無しさん (ワッチョイ 5fcf-H1rY) [sage] 2017/11/24(金) 16:53:45.38:WoNXR2ax0 STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。 ---- テンプレ ここまで ---- : デフォルトの名無しさん (ワッチョイ 8746-TjkM) [] 2017/11/24(金) 17:23:34.21:tVS6N6Kc0 >関数内で作ったベクターやマップは関数を抜けたらメモリ解放されると考えてよかです? だって今回の話はmove関係ないし 質問とは関係ない余計なことを言って知識をひけらかしたかっただけの人でしょ 今回の話であれば 「自動変数であればスコープを抜けるときにデストラクタが走って解放される」 というだけの話 それ以上の話はまた別の話 >うん、信じていい >XXから抜けるときにムーブコンストラクタでtmpへ移動され >createmapから抜けるときに解放される >このときoperator deleteが呼び出されるが >operator deleteがどのようなタイミングで解放しているかには依存すべきでない >我々が関心を持つべきはoperator deleteが呼び出されるタイミングで実装の詳細ではない ↑依存すべきでは無い、と言っておいて、関心を持つべき、と言ってみたり 実装の詳細に関心を持つべきでない、と言っておいて、vectorの実装詳細を語ったり 言ってることやってることが支離滅裂で、意味不明だろう ついでにバージョンによってRVOどうのこうのも、質問には関係が無い余談だし そもそもバージョンの話するんなら昔のC++はmoveセマンティクス無いし しかし、どうであれ、どのみち質問には関係が無い : デフォルトの名無しさん (ワッチョイ 5fb3-9Jqp) [sage] 2017/11/24(金) 19:29:11.47:FCfoZStM0 何故建てたし : デフォルトの名無しさん (アウアウカー Sadb-ZI9b) [] 2017/11/24(金) 20:40:51.17:X0HwtQDQa 保守 : デフォルトの名無しさん (ワッチョイ 5f34-y0n2) [sage] 2017/11/24(金) 20:43:34.75:06etO6GG0 いつまでこの糞テンプレ張り続けるんだおい : デフォルトの名無しさん (ワッチョイ 0778-4Z1+) [] 2017/11/24(金) 22:22:42.08:l1+FhW7v0 v(^・^)vはどこ行った? : デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq) [] 2017/11/24(金) 22:59:15.71:9/UAKu4i0 前スレ995 ttps://mevius.5ch.net/test/read.cgi/tech/1507561894/995 おまえは何を言っているんだ? = delete;が03でNGになるのは当たり前だろ : デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq) [] 2017/11/24(金) 23:01:10.76:9/UAKu4i0 おまえも何を言っているんだ? operator deleteが呼び出されるタイミングを vectorの詳細とでも言っているなら病院へ行ったほうがいい : デフォルトの名無しさん (ワッチョイ 8746-TjkM) [sage] 2017/11/24(金) 23:25:11.19:tVS6N6Kc0 前スレのおバカさんか >このときoperator deleteが呼び出されるが >operator deleteがどのようなタイミングで解放しているかには依存すべきでない >我々が関心を持つべきはoperator deleteが呼び出されるタイミングで実装の詳細ではない ↑これの説明してみ? 好意的に解釈することもできるが、どのみち意味不明すぎる : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq) [sage] 2017/11/24(金) 23:43:36.87:lG8HVUMw0 そっちこそ何言ってるんだ? 今は RVO の話だろ? : デフォルトの名無しさん (ワッチョイ 8746-TjkM) [sage] 2017/11/24(金) 23:59:00.33:tVS6N6Kc0 まぁ、の意味不明な文章の解釈などどっちでも良いんだが 質問者はvectorな自動変数の寿命に関して、RAIIが正しく行われるか 不安だから聞いているだけなのに、moveがどうとかドヤッた挙句 RVOが働いたらmoveされないんじゃね?ってのはお粗末すぎる return vec;で、RVOが働くか、ムーブコンストラクタになるか、コピーコンストラクタになるか、は コンパイラの銘柄とバージョンと最適化のオプションによるだろうし もしかしたら、コンパイラの気分で変わるかもしれないし なんだったら、関数がインライン展開されたらまた前提が変わってくるだろうよ なんで、こんなことは考えるだけ無意味であるし というか、考えなくてよいように作ってあるし むしろ、考えてはダメというか、依存させてはいけないという意味で 余計なこと(悪いこと)は考えないほうが良いし 結局、質問者には vectorな自動変数はスコープを抜けると寿命が尽きてデストラクタが呼ばれて解放される というC++の根底のDNAである、RAIIのルールだけ言えばよいわけで : デフォルトの名無しさん (ワッチョイ 8746-TjkM) [sage] 2017/11/25(土) 00:07:29.16:gBFdbUKG0 vectorな自動変数 という表現はちょっとアレだったかもしれん まぁ、vector型として宣言された自動変数 のこと・・ : デフォルトの名無しさん (オッペケ Srfb-gBtc) [sage] 2017/11/25(土) 00:10:16.37:5IwBrrUdr 「コンパイラの銘柄とバージョンと最適化のオプションによる」 少なくとも991の置いたC++17の前提ではムーブコンストラクターやコピーコンストラクターは有り得ないのだが、 ひょっとして前提をすり替えられたのだろうか : デフォルトの名無しさん (ワッチョイ 8746-TjkM) [sage] 2017/11/25(土) 00:27:25.13:gBFdbUKG0 それはが言ってるだけで 質問者はC++17とは言ってない 質問者に対して、もしC++17の場合は必ずRVOになるので〜〜という説明をしたとして これもあまり意味が無いというか、関係が無い 質問者はvectorがRAIIを徹底していのるか心配になったから聞いているだけ その意味ではRVOだろうがムーブだろうがコピーだろうが、関係が無い : デフォルトの名無しさん (ワッチョイ 5fe7-8Ex9) [sage] 2017/11/25(土) 00:33:53.19:Sg1k8TV00 991がC++17のことを言っているのはちょっと脱線しただけであって、 話の前提でもないし質問の意図に沿ったものでもないよな : デフォルトの名無しさん (ワッチョイ 5fb3-CDhT) [sage] 2017/11/25(土) 09:33:20.80:+Jz8ZPqE0 なけなしの知識でドヤってるだけやろ w : デフォルトの名無しさん (ブーイモ MM7f-N4rA) [sage] 2017/11/25(土) 21:47:56.71:fPJ/ssThM const参照を返す関数があるのだけど、autoで効率よく戻り値を受け取るには const auto&とか書かなきゃいけないの? それともdecltype(auto)とかするの? : デフォルトの名無しさん (ワッチョイ 5fbd-hcjg) [sage] 2017/11/25(土) 23:24:46.27:afKc1pIZ0 ↑嘔吐するから漏れには関係ない それよか想定上はconstメソッドなのだが実際のところ実装がどうされるかわからない抽象仮想関数にconstをつけて良いものかどうか いつも悩む : デフォルトの名無しさん (ワッチョイ 7fa5-5mWG) [sage] 2017/11/25(土) 23:33:46.79:mxSpQEHX0 autoで受けて余計なコピーを発生させちゃう困ったちゃん : デフォルトの名無しさん (ワッチョイ c74b-gliV) [] 2017/11/26(日) 03:45:55.11:I/ckFlEt0 良い。 : デフォルトの名無しさん (ワッチョイ dfeb-+V5r) [sage] 2017/11/26(日) 03:58:55.87:DFCtUaBX0 考えたこともなかった困ったちゃん参上! 正直スマンかった以後気をつけるわ : デフォルトの名無しさん (ワッチョイ 5fcc-tupB) [] 2017/11/26(日) 04:29:20.65:g3197Gxk0 最近勉強始めたばかりで100までの範囲の数字を入力したらそれが1〜10,11〜20,・・・91〜100のどの範囲にあるか判定したいけどif文10個用意する方法より綺麗にするにはどうしたらいい? : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd7f-PBlX) [sage] 2017/11/26(日) 04:32:18.07:KjdhQPtsd -1 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd7f-PBlX) [sage] 2017/11/26(日) 04:33:56.38:KjdhQPtsd switch ((x - 1) / 10) : デフォルトの名無しさん (ワッチョイ 5fcf-H1rY) [sage] 2017/11/26(日) 04:42:41.92:Dn1yAmWU0 pair<int, int>の配列を用意してループする ttps://ideone.com/0pYJWk : デフォルトの名無しさん (ワッチョイ 07b3-5mWG) [sage] 2017/11/26(日) 09:12:00.52:8WHK08hV0 (x-1)/10 : デフォルトの名無しさん (ブーイモ MMcf-V9cG) [sage] 2017/11/26(日) 10:40:50.63:q1KSvIhfM sys/param.h howmany : デフォルトの名無しさん (ブーイモ MM7f-N4rA) [sage] 2017/11/26(日) 11:43:40.48:OJziPoG6M >>20 結局どうしたらいいの... : デフォルトの名無しさん (オッペケ Srfb-gBtc) [sage] 2017/11/26(日) 11:56:21.91:OeykFUMSr auto &&unko = f(); : デフォルトの名無しさん (アウアウカー Sadb-Fzm/) [sage] 2017/11/26(日) 17:24:53.04:+CosUOwya Win32とかだとフラグ管理でビット演算利用してるけど、今どきのc++17だとどのようにするのがベスト? : デフォルトの名無しさん (ワッチョイ 07eb-5mWG) [sage] 2017/11/26(日) 17:30:11.12:DaGrByo80 C++入門書でよく勉強したはずなのにautoとかconstexprとか知らんもんが一杯… : デフォルトの名無しさん (ワッチョイ 077f-lrN+) [] 2017/11/26(日) 17:31:42.72:CoQMqJ/C0 何年に発売した入門書なんだ : デフォルトの名無しさん (ワッチョイ 272d-eGxq) [sage] 2017/11/26(日) 17:33:33.90:mkIW06Zo0 変わらず std::bitset 使い続けてる ベストかは自信ないけど不便もないので : デフォルトの名無しさん (ワッチョイ 07eb-5mWG) [sage] 2017/11/26(日) 17:38:44.74:DaGrByo80 やさしいC++第3版 大体9年前に買ったのを寝かしといて最近になって勉強し始めたが、そんなに仕様変更ないと思ってたが間違いだったようだ : デフォルトの名無しさん (ワッチョイ 07eb-5mWG) [sage] 2017/11/26(日) 17:39:04.93:DaGrByo80 だった : デフォルトの名無しさん (ワッチョイ 0778-4Z1+) [] 2017/11/26(日) 17:42:35.83:LgT/GDJu0 CはそれほどでもないけどC++は11以降どんどん変わるようになったね : デフォルトの名無しさん (ワッチョイ 5fcf-H1rY) [sage] 2017/11/26(日) 17:46:59.07:n7ZC4ZKm0 Effective Modern C++を俺は使ってる でもC++17が出たらまた新刊出るね これC++11/14対応版だしすぐに古くなる : デフォルトの名無しさん (ワッチョイ 07eb-5mWG) [sage] 2017/11/26(日) 17:52:39.37:DaGrByo80 Effective Modern C++17出たら買ってみるわ : デフォルトの名無しさん (ワッチョイ bf3f-ThNz) [sage] 2017/11/26(日) 17:56:44.90:kRx46ugP0 もうC++を本で勉強するのは無理なのではないだろうか : デフォルトの名無しさん (ワッチョイ bf4b-g2WY) [] 2017/11/26(日) 18:04:02.71:rgo+yBBa0 C++を始めようと思うんですがおすすめの参考書知りたいです。Cの知識はありませんがPythonでプログラミングは経験したのでプログラミング初学者ではないです。 : ◆QZaw55cn4c (ワッチョイ 5f60-2JzH) [sage] 2017/11/26(日) 18:09:15.89:rNgJnhxq0 accelarated c++ c++11 以前の古い本だが、C を経由せずに C++ をある程度マスターできることを評価したい : デフォルトの名無しさん (スップ Sdff-2b6l) [] 2017/11/26(日) 18:09:43.82:wYDDxvKDd 今は規格から追ってった方がいいと思う 規格書そのものの通読は大変だろうから、cpprefjpとか眺めてわからなくなったら規格に当たってコード書いて試してが一番早いよ プログラミング完全初心者はそうも行かないだろうけどPython知ってるなら大丈夫だろ : デフォルトの名無しさん (ワッチョイ bf4b-g2WY) [] 2017/11/26(日) 18:12:38.67:rgo+yBBa0 英語の本ではなく日本語の本で何かありませんかね? 英弱なもので^^; : デフォルトの名無しさん (ワッチョイ bf4b-g2WY) [] 2017/11/26(日) 18:14:59.44:rgo+yBBa0 訂正 日本語版もありますね すいません(^^;; : デフォルトの名無しさん (ブーイモ MM7f-N4rA) [sage] 2017/11/26(日) 19:17:54.77:C7WBrdWqM 残念ながら、続編はもうないんだ… : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/26(日) 20:18:30.38:po9rLop30 C++ の定本は、ロベールだけど、ものすごい分厚い これは、ちょっと古めの本だけど、 ドワンゴ江添などの新しい規格の本は、古い規格を知っていないと読めない 猫でもわかるC++プログラミング 第2版 数言語知っているなら、簡略なこの手の本で、お茶を濁す とにかく、C++は言語の最高峰だから、 スッキリJava で、オブジェクト指向をマスターしていないと、取得できない。 理解できるまでに数年以上掛かる まずこの本で、オブジェクト指向を学ぶ スッキリわかる Java入門 第2版、2014 その後、この2冊をこの順に読む たのしいRuby 第5版、2016 みんなのPython 第4版、2017 : ◆QZaw55cn4c (ワッチョイ 5f60-2JzH) [sage] 2017/11/26(日) 20:45:07.56:rNgJnhxq0 >とにかく、C++は言語の最高峰だから、 いや、関数型の諸言語の方が、わけわからなくてすごい、と思うときもあるのでした。最古参の lisp とか… : デフォルトの名無しさん (ブーイモ MM4b-N4rA) [sage] 2017/11/26(日) 20:52:23.29:I1XRhGjPM thx! : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/26(日) 20:54:50.87:po9rLop30 関数型は、コンセプトが難しいだけだが、 Elixir みたいに分かりやすい言語もある 一方、C++ はポインタとか、実装が難しい。 実装に直面させられるから Rust では、実装の詳細をどう回避しようとしてるのか、よくわかる : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq) [sage] 2017/11/26(日) 21:10:38.95:lLN9GSgU0 うーん、 Scheme スレ住人の私からすると、 LISP はS式表現の考え方で引っかかってる人の方が多い印象があるな。 関数型たって、副作用にややこしい手順が必要なのは Haskell くらいで、 LISP に「関数型」であるが故の難しさはそんなにない。 : デフォルトの名無しさん (アウアウカー Sadb-Fzm/) [sage] 2017/11/26(日) 21:13:13.79:T8jkbpd5a なんでc++の勉強するのになんでrubyやpythonの本を読まなきゃいけないんだよ? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq) [sage] 2017/11/26(日) 21:17:17.78:lLN9GSgU0 必須ではないにせよ様々なパラダイムについて見識を持つのは無駄にはならないと思う。 ただ、入門者が色々手を出すと混乱する可能性も大きいんじゃないか。 : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/26(日) 21:38:23.19:po9rLop30 C++ は、エベレストみたいなもの。 まず、色々な山で練習しろってこと スクエニなんて、社員が何千人もいるのに、C++ を募集してるだろ。 社員の平均勤続年数は、7年だけど誰もできない 最近では、言語の募集をしても、全然できない。 言語を知っていても、何もできない コンピューターリテラシー、つまり環境・OS を含めて、 すべてを知ってる人でないと、無理 C++ では、Ruby などの関数型とか、勉強できない。 ビジネスロジックの話ができない。 メモリとか、余計なものが付きまとってくるから C++ で勉強していると、ものすごい時間が掛かって、非効率 : デフォルトの名無しさん (アウアウカー Sadb-Fzm/) [sage] 2017/11/26(日) 21:40:21.18:T8jkbpd5a pythonスレでもrubyの宣伝しててうるさいからつい。 無駄にはならないけどc++への理解は遠ざかるんじゃないかな? : デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq) [] 2017/11/26(日) 21:46:20.31:SBifPocB0 足切り点がちょっと高めで、落ちるやつは容赦なく落ちるというだけ いつぞや足切り点を低くしようというCOBOLとかいう試みがあったが 結果は周知のとおり 落ちたやつにはエベレストに見えるのかw : ◆QZaw55cn4c (ワッチョイ 5f60-2JzH) [sage] 2017/11/26(日) 21:57:16.96:rNgJnhxq0 うーん Ruby/Python/Java で実装した例を読むと、即座に C++ に直す、というか、どうしてもそうしたくなってしまうんだよ 薄い本なのにぜんぜんはかどらない : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq) [sage] 2017/11/26(日) 22:01:25.91:lLN9GSgU0 Ruby/Python/Java の薄い!? : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/26(日) 22:05:23.77:po9rLop30 OS 周りの事は、Python よりも、Ruby の方が楽。 Vagrant, Chef で、仮想OS もできるし Python は、AI とか数値計算用。 次世代は、Elixir, Rust の2択 社員数何千人の大企業が、C++ を募集すること自体が、そもそもおかしいだろ。 何千人もいて、できる奴が、1人も見つからないなんて そもそも、そんなに簡単だったら、皆、こんなに挫折しないって。 こんなに本屋に、難しい本が並ばないから 何十年も、C で手続き型をやってる老害どもが皆、 C++ のオブジェクト指向で、討ち死にしてる : ◆QZaw55cn4c (ワッチョイ 5f60-2JzH) [sage] 2017/11/26(日) 22:07:18.82:rNgJnhxq0 いやいや 言語自体の話ではなくて、応用例の話で いまはまっているのは ttps://www.amazon.co.jp/dp/4627847610 で、こういうのを読むと c/c++ で書いてみたくなるという… : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/26(日) 22:13:20.12:po9rLop30 Go は老害が作っているから、結局、手続き型から言語から、抜け出せなかった。 C から、C++ へ移行できない、老害と同じ 一方、Elixir, Rust とかを見れば、どの概念を抽象化したのか、よくわかる : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/26(日) 22:21:12.28:po9rLop30 C++, Rust を比較すれば良い。 どの概念を抽象化したのか、よくわかる ニコ生も今、Rust で作り直してる最中 : デフォルトの名無しさん (アウアウウー Sacb-DWFp) [] 2017/11/26(日) 22:26:56.58:tkabk1y3a C++を勉強したいという人にrubyやpython,javaの本をすすめるなんて 遠回りな事言うんだなと思ったらだもんな・・・ : デフォルトの名無しさん (ワッチョイ 5fe7-8Ex9) [sage] 2017/11/26(日) 22:33:03.00:A1ZwwN/70 難しい難しいと言って「ポインタとか」という例が出てくるところで察し : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/26(日) 22:33:41.66:po9rLop30 素人がエベレストを目指しても、ダメ。 レベル5 の冒険者が、レベル50 のモンスターを倒せない。 小学生が大学数学を解けない 実際に大企業では、プログラマーが何十人来ても、即日サヨナラが続いてる 漏れは、C++ のプロジェクトに採用された事があるけど、 派遣から来ても、ほとんどが即日サヨナラ 何十年も、C をやってる老害でも、C++ は全くできないし : デフォルトの名無しさん (ワッチョイ 47b3-lrN+) [sage] 2017/11/26(日) 22:37:49.56:okic0QgR0 できるとかできないとかどのくらいのレベルのことを言っているのか気になる : ◆QZaw55cn4c (ワッチョイ 5f60-2JzH) [sage] 2017/11/26(日) 22:39:44.04:rNgJnhxq0 どのくらいの C++ スキルが必要とされるの? : デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq) [] 2017/11/26(日) 22:48:32.43:SBifPocB0 > 小学生が大学数学を解けない ちゃんとこう言ってるじゃないかw : ◆QZaw55cn4c (ワッチョイ 5f60-2JzH) [sage] 2017/11/26(日) 23:13:47.64:rNgJnhxq0 うーん、auto、よくわからんなあ… : デフォルトの名無しさん (ワッチョイ 47b3-lrN+) [sage] 2017/11/26(日) 23:35:44.48:okic0QgR0 例えが分かりにくいのでC++で例えてほしい : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/26(日) 23:39:50.10:po9rLop30 最近の大企業では、言語の募集をしても、全然できない人が来る。 言語を知っていても、何もできない だから、コンピューターリテラシー、 つまり環境・OS・アルゴリズムなど、すべてを含めて必須 OS のコマンドを知らないとか、アルゴリズムを知らないとか、 仮想OS を構築できないとか、Vagrant, Chef, Docker を知らないとか、 LLVM, MFC を知らないとか C++ なんて、ほぼすべてが必須だろ。 だから求人票には、コンピューターリテラシー必須って書いてある 言語の知識ぐらいでは、何もできないから、派遣から来ても、即日サヨナラとなる Emacs を使えない人は、お断りっていう会社もあるほどw プロなら、自分が使うツールにも、こだわりがあるはずだから : デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq) [] 2017/11/26(日) 23:49:41.52:SBifPocB0 チンパンジーに因数分解みたいな話に例えもへったくれもねえだろ : デフォルトの名無しさん (ワッチョイ 5fcf-H1rY) [sage] 2017/11/27(月) 00:33:44.81:1bUH4ri10 この場合はstd::inializer_listになるよ : デフォルトの名無しさん (ワッチョイ 5fcf-H1rY) [sage] 2017/11/27(月) 00:34:52.25:1bUH4ri10 ◯std::initilizer_list だからstd::beginとかstd::endが使える : デフォルトの名無しさん (アウアウウー Sacb-Fzm/) [sage] 2017/11/27(月) 01:16:09.67:4bHQN/8na 趣味でやってるから企業の事などさっぱりだがそれはc++以外だと不要なのか? : デフォルトの名無しさん (ブーイモ MMeb-V9cG) [] 2017/11/27(月) 01:26:50.56:fAclYYwOM >>64 : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/27(月) 01:52:56.54:x+zk8UEy0 最近の大企業では、言語の募集をしても、全然できない人が来る。 言語を知っていても、何もできない だから、コンピューターリテラシー、 つまり環境・OS・アルゴリズムなど、すべてを含めて必須 だから募集要件が、コンピューターリテラシーがある人になる 確かに、何の言語でも、そうなる : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq) [sage] 2017/11/27(月) 02:14:06.37:GAML79c/0 あ、すまん、それは薄い本 (同人誌のことをいうスラング) に反応してしもうたというジョークなので気にしないで。 : デフォルトの名無しさん (スップ Sdff-SHUC) [sage] 2017/11/27(月) 02:36:02.00:T7rLcZV0d C言語できますって言って2進数知らない人とか来るもんね : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/27(月) 03:58:40.54:x+zk8UEy0 まあ簡潔に言えば、C++ を学びたい場合、直接C++ を学ぼうとしても無理。 文法だけを学んでも、全く何もできない 周辺知識(コンピューターリテラシー)から埋めていかないと、どうにもならない 高山列車が直接、真上に進めないのと同じ。 切り返ししながら、徐々に上がっていく感じ 何十年も、手続き型言語のC をやってる老害が、 オブジェクト指向に移行できないのも、そう 平山尚のセガ本もあるけど、文法を学んでも、オブジェクト指向が理解できない。 やっぱり「スッキリJava」から始める必要がある : デフォルトの名無しさん (ワッチョイ 5f34-y0n2) [sage] 2017/11/27(月) 04:39:24.98:/nBMg24u0 Javaみたいなオペレータもテンプレートも使えない糞言語薦めるな : デフォルトの名無しさん (ワッチョイ 5f34-y0n2) [sage] 2017/11/27(月) 04:41:34.85:/nBMg24u0 ヒエラルキーのトップC++にはなにもかも無駄な知識 Javaもrubyもpythonも : デフォルトの名無しさん (ワッチョイ 0793-C/lT) [sage] 2017/11/27(月) 06:30:05.16:O6svWDNK0 C++を使うのにオブジェクト指向に対する理解が必要、という意見にはある程度賛成できる。 しかしながら、そのために先にJavaの本を読め、てのはどうなんだろ。 C++の入門書でオブジェクト指向の解説までカバーした本、てのは存在しないのかな。 C++の本を書くような人はオブジェクト指向の説明をするのは沽券に関わると思っているのか、 あるいは「C++の専門家」にはオブジェクト指向を教える能力がないのか。 : デフォルトの名無しさん (ワッチョイ 47b3-h3cN) [] 2017/11/27(月) 06:41:19.35:/wh5qHzF0 オブジェクト指向言語じゃないので。 : デフォルトの名無しさん (ワッチョイ 47b3-h3cN) [] 2017/11/27(月) 06:42:27.76:/wh5qHzF0 C++の学び方はパタヘネを読むところから始まる。 : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/27(月) 08:33:19.56:x+zk8UEy0 オブジェクト指向をわかりやすく説明した本は、世界中にない。 だから「スッキリJava」が出た 2011年は、オブジェクト指向にとって、エポックの年 この本以降、C++ を学ぶのに「スッキリJava」から始めるという道筋ができた。 この道筋で学べるのは、日本だけ 他国では、もっと苦労してるはず。 まあ、漏れの勝手な意見だけど : デフォルトの名無しさん (ワッチョイ 678a-nf8U) [sage] 2017/11/27(月) 08:42:09.94:T6hD1Djz0 いや意見というより妄想 : デフォルトの名無しさん (ワッチョイ 278a-I1Jk) [sage] 2017/11/27(月) 08:46:30.99:U9yOEuDb0 Javaみたいなゴミ薦めるな。ソフィーの世界の方がマシ : デフォルトの名無しさん (ワッチョイ 07b3-5mWG) [sage] 2017/11/27(月) 09:19:29.64:tczRDnba0 いろんな言語のおいしいとこだけ使って個々の言語に深入りしないのが得策 おいしいところを繋ぎ合わせる能力のほうが大事 : デフォルトの名無しさん (ワッチョイ ff9f-hvxY) [sage] 2017/11/27(月) 09:19:54.22:aghVPiEK0 better Cとして使うのはいかんのか? : デフォルトの名無しさん (ワッチョイ bfa1-Mq0t) [sage] 2017/11/27(月) 10:06:43.21:AedLfSQl0 イカンことはないと思うが、C の環境に行った時に困るぞ。 まあ最近の C には大体取り込まれてるみたいだけど。 : デフォルトの名無しさん (ワッチョイ 8746-TjkM) [sage] 2017/11/27(月) 12:03:50.36:pjE3KxE70 例の約一名入ってることがおかしくて まず初心者というか入門で、C++の文法などを覚えたいという話なのに コンピュータリテラシーが無いと現場では使えない、とか 今それ関係ないし : デフォルトの名無しさん (アウアウカー Sadb-Fzm/) [sage] 2017/11/27(月) 12:14:01.72:889bi2PQa 他の言語の本は無しとしてオススメの本ある? c++11以前だったら独習C++が良かった。 : デフォルトの名無しさん (オイコラミネオ MM0b-d/GA) [sage] 2017/11/27(月) 12:45:48.74:O7ueEetiM c++ プライマー第5版くらいしかないと思う。 c++の基本的な文法から解説してあってc++11対応。他の言語を学んでいるなら読めると思う。 : デフォルトの名無しさん (ワッチョイ 07eb-5mWG) [sage] 2017/11/27(月) 12:49:42.23:vi7VqSly0 遠回しに他の言語の本読めって言っとるようなもんだ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq) [sage] 2017/11/27(月) 12:51:23.55:GAML79c/0 C++11 が成立するより前だと「詳説 C++ 第2版」が良かったと思う。 ttp://amzn.asia/4C6Q7x9 : デフォルトの名無しさん (オイコラミネオ MM0b-d/GA) [sage] 2017/11/27(月) 13:10:56.02:O7ueEetiM 説明が悪かったけど、プログラミングの全くの初心者が読むにはちょっと難しいかもってこと。 : デフォルトの名無しさん (ワッチョイ 07eb-5mWG) [sage] 2017/11/27(月) 13:23:45.26:vi7VqSly0 ああそういうことね : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/27(月) 20:00:43.82:pbeBNwkp0 > 入門書でオブジェクト指向の解説 ここがそもそも間違っている。 オブジェクト指向は肥大化(10k行以上)するソフトウェアを整理して記述するための方法論であって、 肥大化してない(1k以下)ものすら書けない初心者(入門書を読む層)には不要だからだ。 だから、ない。要らないから、無いんだよ。 少し考えれば分かるはずだが、世界中の誰も出来ないと思うかい?そんなわけないだろ。 ただし、日本のシステムでは必要なんだよ。 日本では大量の馬鹿(新入社員)でもプロジェクトの足しにする方向だから、 せいぜい100行しか組めないド新人にもオブジェクト指向を強いる。それが日本のJavaだ。 既に稼働中の大規模システムに組み込むコードは、 それが新人が書いたものであっても、正しくオブジェクト指向してないと困るから。 言い換えれば、大量の馬鹿が少しずつ組み上げることに日本は特化している。 これは平均的ド素人の最低レベルが保証される社会だから出来る方式でもある。 逆に海外はおそらくそんな馬鹿が大規模システムに組み込むコードを書く前提にしてない。 熟練し、正しくオブジェクト指向できる奴だけでメンテする前提であり、馬鹿は死ね、だ。 これはITドカタの給与の平均値からも分かる。だいたい海外は日本の2倍だ。 だから初心者にオブジェクト指向を教える意味がないんだよ。 オブジェクト指向自体は別段難しいものではなく、また、手続き型(Cスタイル)と(実は)地続きだから、 十分に熟練すれば自然と理解できるし、「手続き型だ」と言い張ったところでどうしても中身は似てくる。 Java鹿は、オブジェクト指向と手続き型が別物だと勘違いしている。 ド新人に「オブジェクト指向(キリッ」と洗脳し、その意味すら理解できない馬鹿が教える側に回って、悪循環してる。 普通に考えれば、C++の仕様でstructとclassがほぼ同じことからも、 また、未だにインスタンスメソッドとクラスメソッドの区別が文法以外にほぼ無いことからもこれは分かる。 (instance.method()とstaticMethod(instance)の実行時の違いがほぼ無い、 或いは、結局はレシーバをどう記述するかだけの話だ、と言った方が分かりやすいか。 Goに至ってはこの点、どっちでもいいです、という仕様にしてしまっているし) : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/27(月) 20:02:10.31:pbeBNwkp0 Cで大規模なシステムを組むと、どうしてもstruct*を多用することになる。 これ自体がオブジェクト指向そのものだ。 ただしCにはこれをサポートするための文法が無く、全部自分でやらないといけない。 だからちと辛いし、class構文欲しい、というのは自然な流れだ。 おそらくLinusがC++erを毛嫌いしているのはこの辺で、(彼が嫌っているのはC++ではなくC++erね、念のため) Cにはサポート構文がないだけであって、 自前でやる気なら正しくオブジェクト指向できるし、 それが昨今の「継承イラネ、全面委譲で」なら実は大して手間は変わらない。 この場合、「C文法で組め」と言われても、「ああ、これならまあ」程度でしかない。 これについてグダグダ言う奴は理解できてない馬鹿だからイラネ、ってのは当たってる。 そもそも、入門者の言う「オグジェクト指向が難しい」の理由は、 「オブジェクト指向で組めない」ではなく、 「オブジェクト指向の利点が分からない」「なぜこんな記述方式にする必要があるのか?」だろ。 元々大規模のコードを整理するための手法なんだから、 大規模なコードが書けない新人には理解できないのは当たり前。 それを理解しろ、という日本方式に無理があるんだよ。 あと、Javaの問題は、かなり制限された言語だから、 他言語だとすごく単純に記述できることを デザインパターン(キリッをこねくり回して意味不明な構造にしないといけないことが多いこと。 だからC++入門者にJavaを勧めるというのはやっぱりキチガイだよ。 そしてこの意味で老害が一番多いのはJavaだと思うよ。 と言うか、ちょっと逝っちまっていることを言う奴はたいていJava鹿だ。もそうだろ。 例のスタティックおじさんの話もJavaだし。(あれは双方の言い分も分かるが) : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/27(月) 20:03:35.06:pbeBNwkp0 C++の問題は、「何でも出来る最強言語」を目指しているのか、本当に何でもありすぎる点だ。 だから新人が戸惑ってしまうのも分かるし、無駄に覚えることも多すぎる。 例えば、継承した場合に隠蔽できるが、あれなんてマジで要らないだろ。 (virtualでないメソッドをoverride(とは言わないが)して隠蔽、って奴ね) この辺、バランスが取れているのはC#だ。そもそもそこが狙いのようだし。 Cに関しては、老害ではなく、「老」が多い。これは古い言語だから。 ただしC++への移行はいつでも出来たし、既に書いたがオブジェクト指向とは地続きだから、 文法的にオブジェクト指向してないだけで中身はオブジェクト指向そのもの、ってのはよくある話だ。 そしてCは元々関数ポインタを扱えた。これはものすごく大きい。 Javaが糞なのは、全く関数ポインタを扱えず、 その結果デザインパターン(キリッする糞言語になっている点だ。 ただしあの頃はまだ「関数ポインタの有用性」がさほど理解されておらず、致し方なかった面もある。 C#もこの辺、記述方式が二転三転しているし、C++もやっとラムダを取り入れたばかりだ。 K&Rも「関数ポインタも使えるよ」としか書いて無い。あれはもっと力説されて然るべきだった。 でも、今新しい言語を作るとして、関数ポインタが使えないのはマジで糞だろ。 そしてこの点、文法的にではなく、 「社内ルールで」関数ポインタの使用を制限する「老害」が多いのは圧倒的にJavaに決まっている。 Cは元々使えたし、C++は(読みやすくはないが)ファンクタを使えたので、有用性は「老」でも理解している。 Javaにはそもそも関数ポインタの使い方を理解している「老」がいない。 Java8で文法的には取り入れられたものの、おそらく大半の職場では相当期間制限されるはず。 : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/27(月) 20:05:06.84:pbeBNwkp0 海外の連中の話だと、「プログラミング自体」を学ぶのに一番早いのはPythonだと言われてる。 (俺はPythonを使ったことがないから分からんが) 例えば、入門者のよくある質問、 「元データがこういう配列で、このうち○○を含むものだけを抜き出したい」等、 どうプログラミングするか、という所から学ぶケースだ。 この辺の本当の初心者に対しては、 C++の、よし、ここはスマポだ、とか、 Javaの、そこはオブジェクト指向で云々、とかは邪魔なんだよ。 本当にフォーカスすべき案件に集中できない。 この意味ではC++は最初の言語には向いていない。 だからド初心者用の入門書の良書は少なく(需要がない)、逆にeffective系が多いのだと思う。 ただしPython自体も古くてゴミな部分もあるから、(ラムダに制限がある) 基礎を組めるようになったら早く卒業し、 C/C++やJavaScript等の「無制限な」言語で色々やったほうが上達するとは思うが。 この意味ではJavaやPythonは制限されすぎていて駄目で、 C#は適切に制限されているから、現実解としてはかなりありで、 C/C++やJavaScriptは自由すぎて(上達はするが)大規模システムを組むには怖く、 だからこそJavaが現代版COBOLとしてのさばっている、という構図だが。 だから、C++erが大規模システムの為に安全なJava言語を選ぶ、というのはありなのだが、 Javaしか出来ないJava鹿が知ったような口を利くからおかしなことになる。 Javaがどれほど制限されているのか理解していればそんなことは言えない筈なんだがな。 この辺、新しく出てきたGoは色々整理されているはずだと期待したんだが、 かなり糞だったので逆に驚いた。あれではC+GCでしかない。 今更Generic出来ないとかマジで糞過ぎる。 逆に言えば、今でもC文法そのままでよく、GCだけ欲しい人にはGoは向いているが。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq) [sage] 2017/11/27(月) 20:24:50.03:GAML79c/0 Go はさっぱりあかん言語だというのには同意するが、 現実にはその程度で良かったという話なんだよ…… : デフォルトの名無しさん (ワッチョイ 67c3-+V5r) [sage] 2017/11/27(月) 20:46:19.07:FoS8Dw4c0 全くの初心者なら、まずはC言語の勉強をしてからのc++ プライマー第5版などを読むのがいいかもしれないね 俺の知っているC言語の本で一番分かりやすかったのは、アスキーラーニングシステムの「入門C言語 新装版」と「実習C言語 新装版」だけど、さすがに古いかな? 同じ著者の本で2008年に出ている「Cプログラミング講座」というのもあるけど、これは読んだことがないな というか、こっちもすでに絶版になっているっぽいな... : デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq) [] 2017/11/27(月) 21:02:33.36:u8FYnIqP0 発狂しやがったw : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/27(月) 21:58:25.69:x+zk8UEy0 ゲームプログラマになる前に覚えておきたい技術、平山 尚、2008 この本は賞を取ってるけど、セガの平山は、 1冊で、C++ の文法と、ゲームプログラミングの2つを、 同時に習得できる本を目指したけど、無理だった 結局、C++の文法だけで、2007年のロベールの分厚さが必要。 人間の読める限界を超えている。 それでも、日本にはロベールがあるだけマシ。 外人は、やさしい本が無いから、もっと苦労してる 結局、1冊でJava の文法と、オブジェクト指向の2つを説明したのが、 2011年の「スッキリJava」 ここまで、待たなければならなかった。 外人は、スッキリも無いから、もっと苦労してる 外人の場合、専門書しかないから、偏差値70未満は、単純に振るい落とされるだけ。 日本のように、学ぶことはできない : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/27(月) 22:04:03.51:pbeBNwkp0 あれは言っちゃあ悪いがC++のオブジェクト指向が暴走した反動だよ。 C++が無駄に複雑化しなければ全くのゴミだったはず。 それ以前にC++はGC嫌いが宗教じみてる。 無駄にスマポで頑張るのではなく、VC++/CLIのgcnewを導入した方がましだったと思うよ。 Goは全く新しい機能がなくてびっくりした。 ただ、C++が複雑化しすぎてWeb系(というかバックグラウンドがない初心者)に厳しいのは事実。 そしてゆとり版C++=Goってのも分からなくもない展開だ。 ただ、持ち上げている連中の非力感は否めない。 あれは関数型()と同様に大騒ぎしてポシャる可能性もあると思う。 : ◆QZaw55cn4c (ワッチョイ 5f60-2JzH) [sage] 2017/11/27(月) 22:37:12.11:b0u4s5jJ0 独習c++ いいね、ハーバード・シルトは要点を押さえてさえている、独習Java がダメダメだったのとは一線を隔しているね 演習問題に std::string を再実装する、という山場があるが、それを乗り越えると c++ の初級者になれると思う : デフォルトの名無しさん (アウアウカー Sadb-NhOl) [] 2017/11/27(月) 22:38:46.80:c8zZNJxQa 明確な強い理由がない限り言語なんて大概何でもいいだろ どこの現場でも出来る奴ってのは、モジュール設計のセンスとネーミングセンスのある奴じゃなかろうか : ◆QZaw55cn4c (ワッチョイ 5f60-2JzH) [sage] 2017/11/27(月) 22:55:46.68:b0u4s5jJ0 Java のいいところは、一文字一文字丁寧に読んでいければだれでもわかるように書けるところにあるのでは? それは一つの到達点だと思う BigInteger.ONE とか、ちょっと嫌だな、と思う書き方はあるが、仕方がない (gmp なら 普通に 1 と書けば文脈を読んで BigInteger(1) というコンストラクタが働くのだが、昔の Java はそもそもオートボクシングがなかったくらいだし) C/C++ ならスタックにデータを置けても規模が大きくなると、new/delete する方向になるのを見込んで、Java が最初からクラスをスタックに置かないことに徹したのも、 定石どおりでいい感じ、Java は尖がったところがないので好感をもっている 昔はアルゴリズムの教科書といえば pascal で記述されたものだが、最近は Java で記述されているものもよくみかける 私は Java を非難したくはないな… : デフォルトの名無しさん (ワッチョイ bfe7-5mWG) [sage] 2017/11/27(月) 23:07:39.99:ot/xhhe10 unique_ptrとshared_ptrのことちゃんと解説してる日本語本ってないだろ(C++1xのマニア向け本除く) レガシーコードのメンテするんでもない限り生ポインタで一生懸命あーだこーだしてる古い本なんて役に立たないしむしろ有害だよ 規格書読んだほうがまし : デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq) [] 2017/11/27(月) 23:08:39.40:u8FYnIqP0 じゃあ、おまえの主張どおりC++にGCを実装するなら どんな実装になっていたんだ? 俺はベアメタルのROM屋だが 今でさえ例外だのRTTIだのでさえ殺意を覚えているんだが : デフォルトの名無しさん (ワッチョイ 7f81-fNTp) [sage] 2017/11/27(月) 23:26:49.34:gwom9yQZ0 マニア向けも何もunique_ptrもshared_ptrも1x以降に実装されたんだから当たり前やろ : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/27(月) 23:28:11.32:x+zk8UEy0 unique_ptr, shared_ptr などは、たぶん、Boost の本に載ってるかな? C++ は、Rust, Elixir へ移行している C++ では、多重継承も難しいから、Java, C# では単一継承だけになった : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/27(月) 23:32:43.41:pbeBNwkp0 だから書いたろ。gcnewだよ。 ttps://msdn.microsoft.com/ja-jp/library/te3ecsc8.aspx 動きとしては、C#やJavaのnewと同じ。 ただしnewだと予約語で被るのでgcnewになってる。 C++はランタイムが無いから、std::GCを作って、 gcnewを1回でも呼んでいるようならそれをリンクしてやればいいだけ。 まあ今からでもできる拡張だからやってくれ、とも思うが。 ただ、GCは絶対に入れない宗教なんだろC++は。 : デフォルトの名無しさん (ワッチョイ 7f81-fNTp) [sage] 2017/11/27(月) 23:34:27.97:gwom9yQZ0 いくらなんでもGCはいらんやろ : デフォルトの名無しさん (ワッチョイ 077f-lrN+) [] 2017/11/27(月) 23:37:10.60:Tgpr/JpE0 リソースを全部GCで管理してくれるならいいんだけど 自分で解放しないといけないリソースもあってなんだそりゃっていつも思う : デフォルトの名無しさん (ワッチョイ 5f34-y0n2) [sage] 2017/11/27(月) 23:38:00.85:/nBMg24u0 GCなんて負の遺産だろ 崇高なC++にそんなもん混ぜんな : デフォルトの名無しさん (ワッチョイ 7f81-fNTp) [sage] 2017/11/27(月) 23:39:22.69:gwom9yQZ0 ほんこれ んで結局usingだのwithだのって、ええ…って感じ : デフォルトの名無しさん (ワッチョイ 474f-2aMW) [sage] 2017/11/28(火) 00:15:26.24:MNvbCMHv0 c++プライマー第5版で解説してる。 : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/28(火) 00:27:26.85:S7QzL+/B0 Java自体はオブジェクト指向の完成形になるはずだったのは認める。 問題は、Javaに関数ポインタがなく、それが致命的だったことだよ。 というかあの頃のC++/C#/Javaの連中は誰も関数ポインタの有効性に気づいてない。 だからC++でも匿名関数をサポートしてなかった。 関数ポインタ=オブジェクト指向(多態)を手動でやるときに必要=クラス構文でサポートしたからイラネ という判断だったのだろう。C#のdelegateもまずクラス(thisの受け皿)ありき、だからね。 あとはcallback出来ればいいや、位か。 関数型のように関数ポインタを常用する事になるとは思ってもいなかったはず。 ところがLisp-Erlang-Haskellの連中は匿名関数の有効性に気づいていて、 おそらくJavaScriptでそこに日が当たってしまった。 そして匿名関数のサポートがないのは間違いだったと気づき、C++/C#/Javaの全てはこれを導入した。 (後は関数がfirstClassObjectになるかどうかだが、 今のC++の雰囲気なら、じきに何らかのサポートを入れると思う) ここで問題なのは、C++/C#は以前から関数ポインタを(見やすくはないが)使えたから、 ユーザも使えるし、コードも必要ならそう記述してあること。 一方、Javaはユーザ側にその知識がないし、 関数ポインタが無い為に継承等で無理に実装してあるコードが既に大量にあること。 Javaユーザが勉強熱心だとはお世辞にも思わないし、何周も他言語ユーザから遅れてしまっている。 そして大量に居るJava鹿の為、すぐにJava8を導入できるとも思えない。 ただしC#は進化し続けた=ユーザーに勉強を強い(時間を奪い)、 また環境にも負荷をかけ続けた(いちいち新しいコンパイラ等を整備する必要がある)為、 結果的にエコシステムの構築が遅れ、 下位互換でしかないJavaに対してかなり出遅れている感じは否めない。 ここら辺は結果論でしかないが、分からん物だね。 単純にいい言語が繁栄するわけでもないし。 : デフォルトの名無しさん (ワッチョイ 7fa5-5mWG) [sage] 2017/11/28(火) 00:41:52.09:+e31yHtn0 ワッチョイ便利だね。 : デフォルトの名無しさん (ワッチョイ 0775-forR) [] 2017/11/28(火) 01:00:11.14:g1MyZtTV0 煽りカスさん乙 : デフォルトの名無しさん (アウアウカー Sadb-Fzm/) [sage] 2017/11/28(火) 01:05:09.69:4Z4gLCZka 匿名関数はラムダやろ? : デフォルトの名無しさん (ワッチョイ 8746-TjkM) [sage] 2017/11/28(火) 01:10:37.08:pJ0hWez80 古典的な同期プログラムなど、いまどき何で書いても同じ 問題になるのは 非同期処理やら 例外安全(処理の巻き戻し)やら マルチスレッドでデッドロックしない云々やら いわゆるトランザクションのようなものをどう実現するかやら そのへん 超高級言語で、いわゆるスクリプトなどなど 高級なくせに上記のサポートが何もないのが真の糞言語で 無駄に重たいだけで、「今まで何やってたの?」状態 動的型なんか何も意味無かったし、本当に何やってたんだろうな : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq) [sage] 2017/11/28(火) 02:18:11.95:1OfFiaid0 Go はランタイムごと新しく作ったからな。 : デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq) [] 2017/11/28(火) 05:29:42.55:VD3vPh0F0 おまえアンカーミスったか? 俺の問いに対して一言も答えていないんだが : デフォルトの名無しさん (ワッチョイ c780-U9VW) [] 2017/11/28(火) 06:46:20.76:RUZbaLWb0 new自体ほぼ使わないのにgcnewを導入しろとかアホか : デフォルトの名無しさん (ワッチョイ 0793-C/lT) [sage] 2017/11/28(火) 07:49:07.52:tl7kMs1v0 一連の投稿(同一ワッチョイによる)を一通り読んだけど、 マトモに議論(賛成にしろ反論にしろ)できるほど理解できなかったわ。 自分の読解力というか、多くのプログラミング言語を比較評価できるだけの 知識の欠如が原因で、投稿者を批判するわけじゃないんだが。 ただ一応は読んだ、という証拠を示す意味で一言。 にある「Javaしか出来ないJava鹿」って言い回しは気に入った。 意識して書いたか分からないけど、ウマくかかってる。 : デフォルトの名無しさん (ワッチョイ 278a-I1Jk) [sage] 2017/11/28(火) 08:26:28.34:Qe8OZN310 他の言語のスレに行ってJAVAを薦める「Javaデモ」はいらん。 デモもピケもお断り : デフォルトの名無しさん (ワッチョイ 47b3-h3cN) [] 2017/11/28(火) 11:27:26.73:QyLugM0S0 Javaはいいぞう〜。 : デフォルトの名無しさん (ワッチョイ 07eb-5mWG) [sage] 2017/11/28(火) 12:26:15.71:+ODnZXKO0 Java原人がいるようだね : デフォルトの名無しさん (ワッチョイ 47b3-h3cN) [] 2017/11/28(火) 20:00:44.77:w5+ReiF20 煽っても無駄ですよ! : デフォルトの名無しさん (ワッチョイ dfeb-+V5r) [sage] 2017/11/28(火) 20:32:34.90:yKt6vWJv0 D言語はなぜ流行らなかったのか・・・・・・ : デフォルトの名無しさん (ワッチョイ 0778-4Z1+) [] 2017/11/28(火) 20:33:55.36:HaaNvQJm0 俺、D言語の方が好きなんだ : デフォルトの名無しさん (ワッチョイ 5fbd-hcjg) [sage] 2017/11/28(火) 20:43:15.23:Zbhkl8PP0 規格の更新速度が遅すぎた : デフォルトの名無しさん (スプッッ Sdff-T4vC) [sage] 2017/11/28(火) 20:56:09.01:VZsT4wzqd pairを戻り値とする関数内でmake_pairを返そうとしてる pair<string, string>( vector<string> vec) { return make_pair<string,string>(vec[0],vec[1]) } 要素数が2より小さいときにペアが作れないから他のものを返したいのだけど こういう場合は何を返せば良いのだろうか? 受けてる先では map<string,string>にinsertをしてる : デフォルトの名無しさん (スプッッ Sdff-T4vC) [sage] 2017/11/28(火) 20:59:58.28:VZsT4wzqd 見直して意味わからんかったので直しました pair<string, string> XXX( vector<string> vec) { return make_pair<string,string>(vec[0],vec[1]) } int main() { map<string,string> map: map.insert(XXX(vector)) } : デフォルトの名無しさん (ワッチョイ 272d-eGxq) [sage] 2017/11/28(火) 21:14:23.08:/W89QHRM0 C++17の std::optional を使うところかな 戻り値をstd::optional<std::pair<string, string>>にして 意味論的に不正な場合は std::nullopt を返す C++17以前なら boost::optional もあり : デフォルトの名無しさん (ワッチョイ c780-U9VW) [] 2017/11/28(火) 21:16:00.33:RUZbaLWb0 しらんがな。返したいもの返せよ : デフォルトの名無しさん (ワッチョイ 07b3-/3HV) [sage] 2017/11/28(火) 21:17:15.47:nsdKAlOZ0 tupleじゃあかんの?常に2以下なんかね : デフォルトの名無しさん (ワッチョイ 07b3-8Ex9) [sage] 2017/11/28(火) 21:27:48.71:elkBwSAY0 あぁスマンmapに入れるのか でも1つしか無かった場合もmapに入れたいのかエラーにしたいのか?? あとmake_pairは関数だからテンプレート引数は省略できるよ : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/28(火) 21:59:35.14:S7QzL+/B0 キチガイ死ね 韓国人死ね それはCへの回帰だぞ。お前は多分理解して無いと思うが。 : デフォルトの名無しさん (ブーイモ MMcf-N4rA) [sage] 2017/11/28(火) 22:39:29.70:lP6TeLLOM nullobjectパターンかね mapで絶対検索されないキーを突っ込んでおくとか : デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq) [] 2017/11/28(火) 22:45:01.20:VD3vPh0F0 何を返しても嘘になるので、返してはダメ if (vec.size() < 2) throw logic_error{"runt vector"}; : デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq) [] 2017/11/28(火) 22:46:39.17:VD3vPh0F0 もしくはassert(vec.size() >= 2); : デフォルトの名無しさん (ワッチョイ 0778-4Z1+) [] 2017/11/28(火) 22:54:08.70:HaaNvQJm0 name=valueみたいなのを分割してmapに入れる感じ? 俺も例外投げて止めてしまった方がいいねと思うね : デフォルトの名無しさん (ワッチョイ 47b3-h3cN) [] 2017/11/28(火) 23:41:38.36:w5+ReiF20 だが待ってほしい。 例外を投げるということは誰かに責任を押し付けることではないだろうか。 : デフォルトの名無しさん (ワッチョイ 7f81-nM14) [sage] 2017/11/28(火) 23:44:58.64:KluQKWh40 上位処理「ハンコ押してください」 : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/28(火) 23:53:44.75:S7QzL+/B0 C++より簡単でお気軽な言語が大量にある今、C++で全くの初心者用の環境を要求すること自体が間違い。 それはトレーラやユンボでド初心者を教習するのに近い。 そうではなく、まず普免を取ってからこれらの特殊車両だろ。 お前は「俺はトレーラー乗りになりたいから、最初からトレーラーでやってくれ」とゴネている教習生なんだよ。 C++のオブジェクト指向でいい本が「世界中に」ない=C++やるような奴にはそんなもの需要がない でしかない。お前はそれすら理解出来ない馬鹿なのに、 > C++の本を書くような人はオブジェクト指向の説明をするのは沽券に関わると思っているのか、 > あるいは「C++の専門家」にはオブジェクト指向を教える能力がないのか。 ってのは自意識過剰すぎる。世界はお前を中心に回っているわけではない。 C++を使う必要がある局面でC++を使う人たちには、今更オブジェクト指向なんて教える必要がないんだよ。 それは自明だから。 そして本を書いている奴らも別段崇高な精神を持って布教しようとしているわけでもない。 いや、そういう奴もいるかもしれないが、当然「売れるから書く」という下俗な奴も世界には必ず居るはずであり、 そういう奴らすらいない=売れない=需要がない=みんな既に知っているから、でしかない。 だいたい、オブジェクト指向ってのはプログラミング手法であり、 言語とは別の軸なのだから、「『C++の専門家には』オブジェクト指向を」ってのも論理的におかしい。 : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/28(火) 23:54:34.49:S7QzL+/B0 そもそもオブジェクト指向がさも特別で崇高な存在だ、なんてのはJava教団がそうしたがっているだけで、 実際のところは、Cで大規模コードを扱うと、最初はstruct*、次に関数ポインタの嵐になり、 これらをどうにかしてコンパイラに自動的にやらせよう、として生まれたのがC++のオブジェクト指向だ。 だから既に言ったがC→オブジェクト指向は完全に地続きなんだよ。 これは出自からしても当然で、 Cの典型的な問題点を新たな言語サポートにより解決することを目指したものがC++だから。 逆に言えば、C++98で搭載されている機能はほぼ全てCの問題点の克服であり、 Cを使いこなしていた連中にとっては当たり前に「その気持ちは分かる」ものでしかない。(なお同意するかは別) そしてオブジェクト指向もこの中に入っている。 だから当初からオブジェクト指向の有効性をわざわざC++で語る意味はなかったし、 他お手軽系言語が乱立している現在、さらに輪をかけてその必要性がなくなっている。 : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/28(火) 23:55:33.62:S7QzL+/B0 それでも初心者が「オブジェクト指向自体を学びたい」ときにはどうすればいいかと言えば、 俺個人は「まず3k行程度なら平気で書けるようになってからでいい。そうすればおのずと分かる」という立場だ。 しかしそれでもHellowWorld直後のド初心者に教えようってのならJava教団みたいに洗脳していくしかない。 どう見ても実行に直接関係ない記述の嵐であり、ド初心者にとっては「無駄じゃね?」としか見えないだろうし。 だからこの意味ではJava教に入信しろ、というのもありではあるのだが、 問題はJava教団はJava教の不備は絶対に認めないというか、気づいてないことだ。 関数ポインタさえあれば非常に単純に実装できることを、無理に継承を導入したおかしな構造で対応し、 しかもそれをデザインパターン(キリッと公式化しようとしている所が滑稽だ。 しかし、Java教信者は関数ポインタの存在を知らないから、この教義がおかしいとも気づけない。 また、Javaのオブジェクト指向は今既に邪道で、オブジェクト指向するのが目的化してきてる。 例えばprivateにすること、イテレータを実装することが目的になってるだろ。 だから実際に前スレ896みたいな事も平気でやる。本当に全く意味が無い。 (これについてはLinusはC++erも同様だと言っているが) だからJava教でオブジェクト指向を学ぶのは、邪教というか、 邪オブジェクト指向を学ばされる可能性がかなり高いのでオススメしない。 : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/28(火) 23:56:37.90:S7QzL+/B0 結局、オブジェクト指向は「学ぶ」物ではなく、本来は「悟る」物なんだよ。 そしてそれは涅槃の境地で解脱しろ、みたいな崇高なものではまったくなく、 「この交差点、信号無いと危なくね?」位の、普通に運転してりゃ分かるだろ、程度の物でしかない。 だからわざわざ解説するほどのことでもないんだが、結果的に、 「オブジェクト指向しろ」と言われる割には解説本がなく、初心者にとってはなんだかよく分からん状況になっている。 そしてお前みたいな馬鹿は「幼稚園で『どこに信号を立てるべきか』きっちり教えるべきだ! 俺は教わっていないから分からない!教えられる先生もいないのか!」 と主張するわけだが、完全にモンペ通り越してキチガイだろ。 オブジェクト指向は幼稚園で教えるべき内容ではないし、教えなくとも自然と理解できる物だし、C++は幼稚園ではないし。 そして脱線すると、「結局オブジェクト指向はよく分からんね」というゆとりが逃げ出した結果が関数型祭りだ。 いや結果的にはC++/C#/Javaの全てがラムダを導入したのだから、一定の成功を得た、と評すべきかもしれんが。 しかしErlangみたいに「オブジェクト指向での限界を突破する」為の明確な方策がなく、 単に馬鹿な連中がより簡単な関数型に逃げ出しただけであり、そこで何か新しい境地が拓けるものではなかった。 そしてGoも俺はこれに似た匂いを感じてる。C++出来ないゆとりが集まっただけじゃんこれ、みたいな。 ただし、確かにC++は無駄に複雑化しているのも事実だが。 > Java鹿 それ、読み方は「Ja馬鹿」ね。ただ表記上分かりやすいので「Java鹿」にしてるが。 : デフォルトの名無しさん (ワッチョイ c776-4mbd) [sage] 2017/11/28(火) 23:57:04.62:7WoPw74F0 HellowWorld : デフォルトの名無しさん (ワッチョイ 5f34-y0n2) [sage] 2017/11/28(火) 23:59:42.90:layR/96s0 また長文ウンチ君かよ : デフォルトの名無しさん (ワッチョイ 07eb-5mWG) [sage] 2017/11/28(火) 23:59:58.99:+ODnZXKO0 ワッチョイって神だわ : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/29(水) 00:05:12.43:LrQLLGRZ0 まあ俺はゆとりは死ねとしか思って無いからな。 つか、この程度の文も読めないのなら、お前ら仕様書や本も読めないだろ。 向いて無いからプログラマ辞めろよ。 : デフォルトの名無しさん (ワッチョイ 7fa5-5mWG) [sage] 2017/11/29(水) 00:13:55.97:jItlzFQF0 そこはまぁその関数の仕様として、呼び出す側が確実にcatchする責任があるわけだな。 それを忘れると例外が呼び出し階層を突き抜けていっちゃう。 そういう事態を防ぐために考えられたのが検査例外だけど、これはこれで使いづらい面があるんで Java以外にはあまり採用されなかった。 そんなことを考えてみると程度の目的で例外などという暴力的な仕組みを使うのがそもそも 適切なのかどうか。Goの選択もそういうことなんだろう。 : デフォルトの名無しさん (ワッチョイ 47b3-lrN+) [sage] 2017/11/29(水) 00:19:11.17:gRQoJ5CS0 ttp://nekko1119.hatenablog.com/entry/20120625/1340602468 main関数の最後にあるstringへのキャストでエラーがでるのですがなぜですか。 エラー C2440 '型キャスト': 'Any' から 'std::string' に変換できません。 コンパイラはvc++2017です。 : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/29(水) 00:22:57.10:LrQLLGRZ0 > Goの選択もそういうことなんだろう。 Goのって「自分でthrowしないといけない例外」だろあれ。 あれなら普通の例外のほうがよかったんじゃ…と思ったけどね俺は。 : デフォルトの名無しさん (ワッチョイ 7f81-fNTp) [sage] 2017/11/29(水) 00:29:49.23:+gz4D8Lj0 (string)をany_cast<std::string>にすれば通りそうだが : デフォルトの名無しさん (ワッチョイ 47b3-lrN+) [sage] 2017/11/29(水) 00:36:37.38:gRQoJ5CS0 通す方法ではなくてなぜ通らないのかが聞きたいのですが template<Type> operator Type() で暗黙の型変換のオーバーロードを定義しており、 int型やHoge型に対して代入する際にそれが使われているのに std::stringに対してだけうまくいかない理由はなぜかが知りたいです。 : デフォルトの名無しさん (ワッチョイ 7f81-fNTp) [sage] 2017/11/29(水) 00:44:30.01:+gz4D8Lj0 intのとこもHogeのとこもキャストは使われてないように見えるが… でもまぁ確かに呼ばれてほしい気もするね static_castでもだめ? : デフォルトの名無しさん (ワッチョイ 47b3-lrN+) [sage] 2017/11/29(水) 00:45:54.72:gRQoJ5CS0 すいません。勘違いしてる部分がありました。 std;;stringだけじゃなくて他の型でもダメみたいですね。 質問取り下げます。もう一度自分で考えてみます。 失礼しました。 : デフォルトの名無しさん (ワッチョイ 5fe7-8Ex9) [sage] 2017/11/29(水) 00:51:28.18:AJHdDibY0 gcc 7.1.0とclang 6.0.0では通った ただしstd::type_infoと書くべきところをただtype_infoと書いてる個所があるので、それは直したけど。 それより下のコンパイラバージョンだとエラーになった。(ambiguous conversion) そして (string)val の代わりに (const string&)val と書いたらclang 4.0.1でも通った。 : デフォルトの名無しさん (ワッチョイ 47b3-lrN+) [sage] 2017/11/29(水) 01:02:17.23:gRQoJ5CS0 (int)valはいけますけど (Hoge)val, (std;;string)valはダメのようですね。 で、ご指摘のとおり (Hoge&)val, (std::string&)valは通りました。 前者と後者の違いは分からないですが。 : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/29(水) 01:27:40.52:/RfTzpPk0 & の意味が分からないなら、プログラミングできない (int)val 普通、こういうキャストの書き方は、しない static_cast など数種類あるキャストの書き方の中から、 キャストの種類を指定してキャストする 君は、入門書を読んでいないだろ : デフォルトの名無しさん (ワッチョイ c780-U9VW) [] 2017/11/29(水) 02:04:04.04:qCLwkY6K0 newの代わりにmalloc使ってるとか思ってるアホ? 今時new使うやつは以下のどれか * Javaから来たC++初心者 * 化石コンパイラ使わさせられてる可哀想なやつ * 自身が化石な可哀想なやつ * パフォーマンスのために用意されてない構造の実装が必要なライブラリ設計者 お前は1番目と3番目の複合型だろうね。 : デフォルトの名無しさん (ワッチョイ 47b3-lrN+) [sage] 2017/11/29(水) 02:17:56.38:gRQoJ5CS0 template<class Type> Any::operator Type() const 上をやめて、下の2つを定義したらmain関数の記述そのままでうまくいきました。 template<class Type> Any::operator Type&() const template<class Type> Any::operator const Type&() const 理由は分からないです。分かる方がいたら教えてください。 : デフォルトの名無しさん (ワッチョイ 7f80-xsLR) [sage] 2017/11/29(水) 03:01:43.02:/RfTzpPk0 & の意味が分からないなら、プログラミングなんて出来ない。 初歩の初歩なのに まず、入門書を読むこと : デフォルトの名無しさん (ワッチョイ a723-SHUC) [] 2017/11/29(水) 03:06:58.25:l2Be3tXA0 質問の意味わからんでレスしてる奴うざいわ : デフォルトの名無しさん (スプッッ Sdff-T4vC) [sage] 2017/11/29(水) 04:38:58.34:llo+D0tpd 基本的には2以下は存在しないから例外処理組み込もうと思ったけどnullobjectってのがあるのね おそらく俺の理想的にはこいつが適してそうだからこいつを調べてみるよ の言うとおりに絶対に呼ばれないキーをいれておくのも検討違いな気はしてる : デフォルトの名無しさん (スプッッ Sdff-T4vC) [sage] 2017/11/29(水) 04:50:10.36:llo+D0tpd まさにそれをしようとしてる そこのロジック的には空文字入れる予定だから必ず2以上になるのだけど 関数分割していて関数としては何が返ってくるか不明なため 問題が起きたときのコードを記載しようとしてる vectorのsizeが0や1の時にアクセス違反になってしまうからどうやれば回避できるのかなぁと悩んでる 例としてはこんなん =value key=value key= ==value : デフォルトの名無しさん (スップ Sd7f-cUxe) [] 2017/11/29(水) 07:52:20.02:o9GGe8w4d 確かにそうだね それにclangの最新だと通ることから、それなりにややこしい話かと思う : デフォルトの名無しさん (ドコグロ MMdb-CDhT) [sage] 2017/11/29(水) 08:27:09.91:WoWbjmOBM > key=value これは正常ケースだよね > key= 仕様によるけどvalueに空文字入れときゃいいんじゃね? > =value > ==value エラーでしょ? 例外発生させるなり、ログ採ってnullptr返すなりしなよ そんなものを無理矢理 map に突っ込もうとするのがおかしいと思うぞ : デフォルトの名無しさん (ワッチョイ 0778-4Z1+) [] 2017/11/29(水) 08:58:03.16:p7HSt6hG0 >vectorのsizeが0や1の時にアクセス違反になってしまうからどうやれば回避できるのかなぁと悩んでる vectorの要素数が不確定の場合はatで取り出せばいいよ、なんかあったらout_of_rangeが飛んでくるから : デフォルトの名無しさん (スプッッ Sdff-T4vC) [sage] 2017/11/29(水) 09:33:07.40:llo+D0tpd 空文字入れるのはできてる ただベクターの生成は別関数が行うから引数に渡されるベクターにいくつ値が入っているか不明 だからマップ作成側で個数を意識する対策する必要あるよね?って話 ベクターの生成に関しては実際問題ない try catchするしかないのかな nullopt返そうとしたけど実装無理だったわ... : デフォルトの名無しさん (ワッチョイ 8746-TjkM) [sage] 2017/11/29(水) 10:42:28.73:IulhJnoW0 例外投げるかなにかしとけばよいって ロジック的に要素数2未満はあり得ないし想定してないんでしょ? 余計なことする必要ないって、以降の処理が余計ややこしくなるだけだから エラー処理が適切 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-KsIq) [sage] 2017/11/29(水) 10:50:41.36:nr0c2ixN0 あってはいけないことなら assert で止めてしまえよ : デフォルトの名無しさん (ワッチョイ 8746-TjkM) [sage] 2017/11/29(水) 10:58:33.93:IulhJnoW0 assertは良いがリリースビルドで消えてなくなるから それがあってるかどうかだな よほど条件に自信があればassert : デフォルトの名無しさん (ワッチョイ bf9f-8Ex9) [sage] 2017/11/29(水) 11:00:19.45:VlCz8ge40 複雑なことをせずに設計しなおせばいいんじゃね? : デフォルトの名無しさん (ワンミングク MM3f-U9VW) [] 2017/11/29(水) 11:28:13.62:CqyTJd2aM おいおい、例外をエラー処理以外に何に使うってんだよ : デフォルトの名無しさん (ワッチョイ 47b3-h3cN) [] 2017/11/29(水) 11:33:09.98:51eC79nG0 メッセージの通知に! : デフォルトの名無しさん (ワッチョイ 8746-TjkM) [sage] 2017/11/29(水) 12:07:51.67:IulhJnoW0 だから、エラー処理が適切だから 例外投げてエラー処理でもしとけば?と書いてあるはずだが・・・ ただこの手合い、例外投げて、それを受け取ったからと言って リカバリーしてプログラムを再開できるかはわからないよなぁ プログラム本体の状態を一切汚さずに(書き込まずに) 新規領域のみで何か処理をして 例外が飛んで来たら全てを無かったことにする・・・とか 例外でやる場合は例外安全を確保するのが結構面倒なんで プログラムの末端から例外投げるのは最後の手段にしたい だから「実際に実行してみないとエラーが出るかわからない」系のエラーが無いのであれば 早期の段階で入力データにエラーがあるかどうか精査して、エラーがあればその旨返して 以降はエラーが発生しない前提で処理する(ので巻き戻すことは考えない) もし不慮のエラーが発生したら、バグであるからログ吐いて異常終了 可能なかぎり、なるべくこちらで行きたいわけで : 139 (ワッチョイ 272d-eGxq) [sage] 2017/11/29(水) 12:10:47.10:/Yd3ZvxU0 optionalを挙げたものだけど 惑わせたようで申し訳ない insert 前にチェックして不正ならそもそもinsertしない設計を考えてました 結局 optionalを返す insert / find を自前実装することになるから そんな面倒な事せずに 素直にXXXで例外投げても全く構わないと思う 一応詫び代わりに書いてみたけど 鵜呑みにはしないでください C++17 例外なし 読みやすさのためにautoなし ttps://wandbox.org/permlink/rag4d7YPqwPKQpNq : デフォルトの名無しさん (ワッチョイ 7f6e-Mqmq) [] 2017/11/29(水) 12:13:09.20:f8CPZ7/S0 182=184 同じ臭いがする : デフォルトの名無しさん (スップ Sd7f-cUxe) [] 2017/11/29(水) 12:14:34.01:o9GGe8w4d 検査可能な事前条件はそりゃ呼び出し側の責務にしたいわな : デフォルトの名無しさん (ドコグロ MMdb-CDhT) [sage] 2017/11/29(水) 12:52:35.24:WoWbjmOBM > ただベクターの生成は別関数が行うから引数に渡されるベクターにいくつ値が入っているか不明 .size で取ればいいだけだろ そもそも name=value のパース結果をベクターで渡してくると言うの設計もどうかと思うが > だからマップ作成側で個数を意識する対策する必要あるよね?って話 そうだよ、その対策をにかいたつもりだが... もしかして name= と =value の両方とも vec[0] にしか入れてこないとかなってるんじゃないよね? だとしたら生成部分を直さないとどうしようもないけど : デフォルトの名無しさん (ワッチョイ 47b3-h3cN) [] 2017/11/29(水) 13:49:04.14:51eC79nG0 ヴェクターノズル搭載。 : デフォルトの名無しさん (スプッッ Sdff-T4vC) [sage] 2017/11/29(水) 14:47:34.47:llo+D0tpd 色々とありがとう 最終的には呼び出しもとでtrycatchすることにしました 両方とも0 1の要素に値いれてるね もう一個別件なのだけど ファイルの存在チェックとファイルのオープンエラーについて教えてほしい ある設定値は特定の設定ファイルが存在するにも関わらず読み込めなかったときに有効になるものとしたい 且つ設定ファイルが存在しないときもある (設定する値が二つある。ひとつはkey=valueの形のvalue、もう1つは正常にファイルから値がとれたか否か) ファイルが存在しないときはvalueの値をデフォルトで扱う必要があるので、 単純にファイルオープン処理を用いて一度で処理できなかった (ファイルがなくて開けないのか、あって壊れていて開けないのか判断できないので) そのため statでファイル存在有無チェック→ファイルオープンとしたのだけど タイミングが一致してないので刹那のタイミングでのファイル焼失を担保できないと言われている どうすればファイルがなくて開けないのか、ファイルが壊れていて開けないのかを判断できますか : デフォルトの名無しさん (ワントンキン MM3f-fNTp) [sage] 2017/11/29(水) 15:03:14.59:IvqqBLy1M ファイルオープンの開けませんでした例外をキャッチしたらええやろ : デフォルトの名無しさん (ワンミングク MM3f-U9VW) [] 2017/11/29(水) 15:30:10.25:CqyTJd2aM keyにデフォルト値が存在するなら、最初にデフォルト値のmapを持つ。 ファイルを読み込んで存在したキーだけ上書き更新する。 だけでいいだろ。ファイル読み込まれなければ全部デフォルト値のままだ。 : デフォルトの名無しさん (ワッチョイ bfe7-5mWG) [sage] 2017/11/29(水) 18:22:28.81:U+t8Y71p0 例外見ろよ std::ifstreamならstd::ios_base::failureだからcode()の戻り値見ろ 何のために投げてると思ってるんだ : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/29(水) 20:17:29.87:LrQLLGRZ0 ゆとり死ね お前は何も分かってないし、学ぶ知能もない > 刹那のタイミングでのファイル焼失を担保できないと言われている てかそいつに聞けよ。 課題として与えられてるのなら、そいつは「考えさせることに意味がある」と思っているのだから、 こんな糞上司に付き合ってられるか、と思ってないのなら自分で考えろよ。 ここで聞いているのは宿題の答えだけ写しているようなもので、全く上達しないぞ。 : デフォルトの名無しさん (ワッチョイ bfe7-5mWG) [sage] 2017/11/29(水) 20:25:15.41:U+t8Y71p0 ファイル存在チェック→オープンがアンチパターンなのは常識だろ何言ってんだお前 : デフォルトの名無しさん (ワッチョイ 5f34-y0n2) [sage] 2017/11/29(水) 20:31:50.13:6NgtQx/F0 相変わらず持論展開ウザ杉るの自覚してないな アスペウンチ君 : デフォルトの名無しさん (ワッチョイ 5fbd-hcjg) [sage] 2017/11/29(水) 21:17:19.68:6HlzpX8E0 ハローワールド逝け : デフォルトの名無しさん (ワッチョイ 079f-5mWG) [sage] 2017/11/29(水) 21:43:44.23:LrQLLGRZ0 C++スレすらゆとり汚染ひどいのかよ 世も末だな : デフォルトの名無しさん (ワッチョイ 07eb-5mWG) [sage] 2017/11/29(水) 21:47:36.72:ZCDC/+v90 実際にスレ汚しとるのはお前だけどな : デフォルトの名無しさん (ワッチョイ 8746-TjkM) [sage] 2017/11/29(水) 22:29:25.62:IulhJnoW0 割とタイムリーな話題というか、ここ一週間ぐらい、実行時エラーやら例外やらが発生したとき どうやったらプログラムを安全に再開するか考えてた で、至った考えは、ひとまとまりの一連の処理を二つに分割して まず前半はread onlyセクションで、プログラム本体の状態を書き換えてはならないが そのかわり例外が発生したら、無かったことに出来る(なのでread onlyにしておく) 後半はwritableセクションで結果をプログラム本体に反映させるが、その代わり例外(失敗)は許さない bool func(){ hoge_type result; try{ result = sub1(); sub2(); }catch(...){ /*リカバリ可能*/ return false; } try{ hoge = result; }catch(...){ /*リカバリ不可*/ abort(); } return true; } ただこれでもあまりうまくいかなくて、sub1()とsub2()が上記ルールに従ってたとしても sub1()は成功してsub2()は失敗した場合に困る 全体としては失敗だけどsub1()は既に成功していて結果も反映されているので sub1()の実行を無かったことにして巻き戻すのは難しい sub1()をsub1_read_only()とsub1_writable()に分解するという方法もあるかもしれないが データの受け渡しで苦労するし、可読性が落ちるうえ、複雑なことはしにくくなる もう一つの別の要求もあって、重たい処理は別スレッドで実行して即座にGUIスレッドに制御を返したい ということはユーザーは重い処理のキャンセルが出来るだろうが 処理のキャンセルは例外からのリカバリと本質的には全く同じこと また、先ほどのread onlyセクションはプログラム本体の状態を書き換えない前提なので 別スレッドで実行したり非同期に同時並行で実行したりが出来る (ただし、誰かがwritableセクションを実行したら、そいつ以外の処理結果は無効になる 古いデータに基づいて処理した結果ということになるので・・) : デフォルトの名無しさん (ワッチョイ 8746-TjkM) [sage] 2017/11/29(水) 22:30:19.77:IulhJnoW0 上記のようなことを総合的にまとめると void func(){ // read only セクション barrier(); // writable セクション } という結論に至った ただし、func()はコルーチンから呼び出す read only セクションでは、必要であれば処理を別スレッドで処理を実行することが出来、自身はyield_returnする 投げた処理が終わるとメインスレッドにて続きから再開してもらう read only セクションでは、新たなコルーチンを作成することが出来、作成元のコルーチンと親子関係を構築する 親子関係を持つコルーチンの全てがbarrier()に到達するか終了してからでないとbarrier()以降は実行されない 親子関係を持ついずれかのコルーチンがread only セクションにて補足されない例外を発生するか もしくは外からキャンセルされると、無かったこと扱いになって 全ての親子関係を持つコルーチンにおいてbarrier()以降は実行されない (親子関係の有る複数のコルーチンの処理が一端barrier()で止まって、全てが成功したのを確認してからbarrier()以降が再開される) コルーチンにはグループNoを設定することが出来る 違ったグループNoを持つコルーチンを同時に実行することはできない(終わるまで待つ) 同じグループNoを持つコルーチンは同時に実行できるが いずれかのコルーチンがyield_returnした段階で、それと親子関係のあるコルーチン以外はすべてキャンセル扱いになる たとえばボタンAを押して処理Aが始まったが処理Aが終わる前にボタンBが押されたら 処理Aはキャンセル扱いになって処理Bが反映される キャンセルされると困るような処理は別のグループNoにしておく というような感じでひとまず落ち着いた グループNo周りはかなり暫定的な感じだが・・・ 以上日記 : デフォルトの名無しさん (ワッチョイ 3d9f-JjO2) [sage] 2017/11/30(木) 00:09:19.12:fhhh9IM80 32 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/26(日) 17:30:11.12 ID:DaGrByo80 [1/4] C++入門書でよく勉強したはずなのにautoとかconstexprとか知らんもんが一杯… 35 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/26(日) 17:38:44.74 ID:DaGrByo80 [2/4] やさしいC++第3版 大体9年前に買ったのを寝かしといて最近になって勉強し始めたが、そんなに仕様変更ないと思ってたが間違いだったようだ 36 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/26(日) 17:39:04.93 ID:DaGrByo80 [3/4] だった 39 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/26(日) 17:52:39.37 ID:DaGrByo80 [4/4] Effective Modern C++17出たら買ってみるわ 95 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/27(月) 12:49:42.23 ID:vi7VqSly0 [1/2] 遠回しに他の言語の本読めって言っとるようなもんだ 98 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/27(月) 13:23:45.26 ID:vi7VqSly0 [2/2] ああそういうことね 132 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/28(火) 12:26:15.71 ID:+ODnZXKO0 [1/2] Java原人がいるようだね 156 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/28(火) 23:59:58.99 ID:+ODnZXKO0 [2/2] ワッチョイって神だわ 199 名前:デフォルトの名無しさん (ワッチョイ 07eb-5mWG)[sage] 投稿日:2017/11/29(水) 21:47:36.72 ID:ZCDC/+v90 実際にスレ汚しとるのはお前だけどな さすがゆとり、これらが役立つ投稿のつもりらしい。 : デフォルトの名無しさん (ワッチョイ 5deb-JjO2) [] 2017/11/30(木) 00:38:22.38:trGz4Mxl0 いつの間にかIP信者になったんだ・・・W : デフォルトの名無しさん (ワッチョイ 6680-9RvO) [sage] 2017/11/30(木) 01:15:02.77:aDlGM/9P0 バックアップの、3-2-1 ルール 同じデータをコピーして、3つ持つ。 2つの媒体に保存する。 1つは、離れた場所に持つ : デフォルトの名無しさん (ワッチョイ 3d9f-JjO2) [sage] 2017/11/30(木) 02:04:31.87:fhhh9IM80 SQLite3使ってみろ。 C++はyeildも入れたのか?と思ったがstd::yieldはただのsleep(0)か。 まああまり凝ったことしても、とも思うし、そもそもGUIはC++で無理に組む意味無いぞ。 それも含めて自由にやればいいとも思うが。 君は何が言いたかったのだ? 分かると思うが俺がゆとり死ねと言っている奴だ。 見る限り、君は話す気はあるようだ。 125は唐突過ぎてスルーしたが、相手してもいいぞ。 ただし125はバラけ過ぎているからテーマを絞れ、と言いたいところだったが、 その日記を読む限り上段落の話は一連のテーマか? だったらWeb系の連中ならそこは「DBを使う」って事になっている。 C++は自前で何でもできるから、無意味なほど精神論で速度を追求するわけだが、 そこらへんをサクッと割り切るあいつらのやり方にも学ぶ物はあるぞ。 そもそも自前でトランザクションを実装するとか、検証の手間まで含めたらありえんだろ。 精神論でゴリゴリではなく、上手く手抜きするコツも覚えるべきだ。 : デフォルトの名無しさん (ワッチョイ 8d46-5y5x) [sage] 2017/11/30(木) 03:11:44.92:b5fP6Zaz0 実際問題、メモリやデータだけを復元の対象とするとしたら DBなど使わなくとも原本を保存しておけば何があっても元に戻せるのだが そういう話ではないし どのみち非同期処理にC#よろしくコルーチンが使いたいわけで ただしそのままでは並行して細切れに処理が走って危険なので 書き込む前にbarrierを設けようというアイデアがまずあって そうすることでついでに例外安全性も確保できるし ならばキャンセル処理もできますわなぁという巡り合わさった面白い話 : デフォルトの名無しさん (スップ Sdea-hmNI) [sage] 2017/11/30(木) 06:56:30.13:XcXaihxMd 確かにそうだね ありがとう 自分なりに調べて回答も出たのでそれでいくことにします : デフォルトの名無しさん (ワッチョイ 3d9f-JjO2) [sage] 2017/11/30(木) 07:37:52.31:fhhh9IM80 > 巡り合わさった面白い話 まあ俺は単に張り切りすぎだと思うけど、 そういうところを含めて無駄に熱いのがC++erのいいところでもあるとは思う。 Web系の奴らは上手くこなすことだけを考えていて、自分で考えることを止めてしまってる。 あれでは上達しないのも分かる。 一応捕捉しておくと、SQLite3はDBだが鯖形式ではなくCのライブラリ(DLL)だからC++から直接呼べる。(はず) ソースはパブリックドメインだからDLできるし、もちろんincludeしても使える。 ( ttps://www.sqlite.org/quickstart.html // サンプルが extern "C" ではなく include かよ!) DBはメモリ上にも置け、当然爆速だ。自前でトランザクション/ロールバックの仕組みを作るよりだいぶ楽。 公式に素晴らしいドキュメントがあるから詳しくはそこを読みまくったほうがいい。 C++erなら問題はSQL位だが、どうせいつかLINQもC++に導入されるだろうし、予習だと思ってやっとけ。 : デフォルトの名無しさん (ワッチョイ 5db3-JjO2) [sage] 2017/11/30(木) 10:44:54.02:YoaAbc9R0 例外投げるってのは自分の責任の範囲外の事象が起きたときじゃないのかね 有効無効の意味合いならブール値返したほうがいいと思う : デフォルトの名無しさん (ワッチョイ a66e-hJGX) [] 2017/11/30(木) 11:49:07.85:/QNJXUpA0 禿本4thのP.351あたり読んだ? : デフォルトの名無しさん (ワッチョイ 8d46-5y5x) [sage] 2017/11/30(木) 12:26:19.48:b5fP6Zaz0 一応いまのところこんな感じで書けるようになってる やってることが非同期処理なので多少ややこしいのは本質的に仕方がない int func_async( int n ){ if( n == 0 ){ return 0; } a_wait() << [&]{ sleep( 10*1000 ); }; //↑非同期で何か重たい処理 //↑別スレッドに投げたのちyield_return; int resunt; a_sync() << [&]{ //コルーチン作成 resunt = func_async( n - 1 ); //再起呼び出し }; //throw nanika; //↑仮に誰かが例外を投げれば親子関係のあるすべてのコルーチンの処理が //↑キャンセルされて、どのコルーチンもbarrier以降は実行しない //barrier前なのでresultの値は不定 barrier(); //barrier後なのでresultの値が決まる return n + result; } int main(){ a_sync() << [&]{ //コルーチン作成 int result; a_sync() << [&]{ result = func_async( 10 ); }; //コルーチン作成 barrier(); printf( "%d\n", result ); } message_loop(); return 0; } : デフォルトの名無しさん (ワッチョイ 3d9f-JjO2) [sage] 2017/11/30(木) 19:19:19.63:fhhh9IM80 なんか無駄に複雑化してるだけに見えるが、、、 > どのみち非同期処理にC#よろしくコルーチンが使いたいわけで なおVC++2015からはasync/yieldは使えるらしいぞ。 ttps://msdn.microsoft.com/ja-jp/magazine/mt573711.aspx ttp://espresso3389.hatenablog.com/entry/2015/12/03/015157 : デフォルトの名無しさん (ワッチョイ 9e9f-Cyes) [] 2017/11/30(木) 20:12:10.25:OtOqgvDg0 C++の名前空間と呼ばれるのがあまり理解出来ないんだが Javaでいうパッケージ的なやつ? それともそれを使うためのパスワード的なやつですか? : デフォルトの名無しさん (ワッチョイ 8d46-5y5x) [sage] 2017/11/30(木) 20:42:22.43:b5fP6Zaz0 複雑っていうけど、元から非同期処理なんか、どう書いたって複雑だろ はお遊びでワザとコルーチン作りまくってるだけだし あの程度の事なら本当はこれでいけるわけで int func_async( int n ){ if( n == 0 ){ return 0; } a_wait() << [&]{ sleep( 10*1000 ); }; //非同期処理 return n + func_async( n - 1 ); } int main(){ a_sync() << [&]{ printf( "%d\n", func_async( 10 ) ); }; message_loop(); return 0; } 別に複雑と言うほどでもないし 非同期処理を同期処理みたいにかけるというだけ あとはキャンセルと例外安全のためにbarrierの機能を追加しただけ : デフォルトの名無しさん (ワッチョイ 392d-qkbZ) [sage] 2017/11/30(木) 20:59:54.72:+psSmwi50 <future>のasync,futureじゃダメ? C++11で標準になりましたけど ttps://wandbox.org/permlink/cACSVRCACSAl92OH wait_for_allが欲しかったのでBoost使ってます 元は ttps://gist.github.com/chandraprakash/8666426 で これを少し改造 : デフォルトの名無しさん (ワッチョイ 3d9f-JjO2) [sage] 2017/11/30(木) 21:03:11.80:fhhh9IM80 まず、君が書いているんだから君が好きなようにやるべきだし、 実験的な意味合いも含めて色々やること自体はいいと思うが、、、 非同期にしてるのは何故?GUIからの呼び出しでC#のasync Taskと同じ状況か? それなら確かにどうしようもないが、しかし今見てみるとC#のasyncもだいぶ筋が悪いとは感じるね。 そのケースなら、普通にマルチスレッドした方がすっきり書けるはず。 あと、コルーチンからのthrowって、君の意図しているようにドミノ倒し的に回収できるものなのか? これは俺が仕様を知らないだけではあるが、普通はコルーチンってそういう使い方しないと思うし。 : デフォルトの名無しさん (ワッチョイ 8d46-5y5x) [sage] 2017/11/30(木) 22:29:42.54:b5fP6Zaz0 >>あと、コルーチンからのthrowって、君の意図しているようにドミノ倒し的に回収できるものなのか? そういう風にコルーチンを実装した 具体的にはコルーチンのメンバにキャンセルフラグを持たせておいて コルーチンを外部からキャンセルしたいときはそのフラグを立てる・・・だけ コルーチンがyieldから再開したら真っ先にそのフラグを読みに行って もし立ってたら自発的に例外を投げてスレッドを巻き戻す >そのケースなら、普通にマルチスレッドした方がすっきり書けるはず。 あくまでこれは例だからなぁ 上で書いた内容もそうだけど、ひとつコルーチンがシングルスレッドというのがミソになってて マルチスレッドだと排他処理が非常に面倒なことになる場面でも コルーチンはシングルスレッドだから問題にならない ただ、yieldの前と後ろで時間的につながりが無いことが問題になるので 誰かが何かを書き換える前にbarrier()を設けるルールを作って、他のコルーチンを無効にする 非同期処理なんかまともにやったら頭がおかしくなるに違いないので 横断的に静的に管理したいなぁと 今までコルーチンは全然使わなかったし、完全にマルチスレッド脳だったんだが コルーチンはかなり脳の負担が少なくてよい 自分が動いているときは必ず他人は止まっているという性質が良い yieldの前後だけ気を付ければ後は完全にシングルスレッドのノリで排他処理が要らない ただ逆に同期オブジェクトをLockしたままyieldしたら終わるという >C#のasyncもだいぶ筋が悪いとは感じるね。 正直、あれの使いどころは俺もよくわからないんよなぁ 複数のコルーチンが同時並行で走ったら危ないから結局画面をロックせざるを得ないんじゃないかとか キャンセルを受け付けられるようにするためには例外安全についても考えないとダメなんじゃないかとか 色々思うところは有るが、実はよく知らん : デフォルトの名無しさん (ワッチョイ 8abd-17nN) [sage] 2017/11/30(木) 23:00:20.60:oM5vIjZA0 async/awaitのしくみはawaitするタスクの完了時に呼ばれるべきコールバック関数登録の糖衣構文にすぎないとかそんな感じ、 ttps://qiita.com/ryosukes/items/db8b45c8ea42f924f02f (まんまC#の関数で説明したページもあったはずだがどっかいったのでJavaScriptの例↑ で、ネイティブスレッドX上でasync/await呼び出しをいくつ書いても上記コールバック関数は単一スレッドで実行されるので Xに対して同期的なデータへのアクセスはロック不要 ウィンドーズホンのGUIをぬるぬる動かすのがほぼ唯一の存在意義 : デフォルトの名無しさん (ワッチョイ 8abd-17nN) [sage] 2017/11/30(木) 23:07:19.56:oM5vIjZA0 つまり同一スレッド内であればasync/awaitをいっぱい書いても複数のコルーチンが順不同でresumeされる感じにはなるが真に同時並行で実行されることにはならない : デフォルトの名無しさん (ワッチョイ 8abd-17nN) [sage] 2017/11/30(木) 23:13:29.49:oM5vIjZA0 なお順不同なresumeというシチュは、関数A内でawaitされるasyncタスクB内でタスクCをawaitする…とかいったケースで容易に生じる この場合A内のawaitに引き続くのコードと、B内のawaitに引き続くコードのは順不同でどっちが先にresumeされるかわからん しかし真に同時並行ではなく、同期的 : デフォルトの名無しさん (ワッチョイ b5b3-HgL3) [] 2017/11/30(木) 23:19:09.22:AS96YR/U0 ttps://stackoverflow.com/questions/1724036/splitting-templated-c-classes-into-hpp-cpp-files-is-it-possible Your template classes must represent only data structures not the algorithms. This enables you to hide more valuable implementation details in separate non-templatized class libraries, the classes inside which would work on the template classes or just use them to hold data. この回答の具体的な例を教えて頂けないでしょうか。 std::vector(データ)とstd::algorithm(アルゴリズム)と思ったのですが、 std;;algorithmはnon-templatized classではないですよね。。。 : デフォルトの名無しさん (ワッチョイ 3d9f-JjO2) [sage] 2017/11/30(木) 23:40:55.16:fhhh9IM80 > あくまでこれは例だからなぁ もしかしてコルーチンを自動的にマルチスレッド展開して加速させる為のラッパを用意してるってことか? それならまあそのコードの感じになるのかもしれん。 ちなみに言っておくと、俺が普通に実装したらと同じようなものになる。 単純に、「ディスパッチして、joinを待って、commitする」としか読めないコードにする。 ただこれは君ももちろん分かっていて、あのコードなのだとは思う。 なお俺はC#のasyncは設計ミス、 ・UIコンポーネントがUIスレッドからでしか触れないこと の対策だと思っている。あれが無いと毎回invokeするとか、ちょっと回りくどい書き方をするしかない。 実際、Thread->backgroundWorker->Task->async Task だったっけ?何度も変更されていて、 こういう場合は通常、 ・修正している奴が馬鹿だから修正のたびに新たなバグを仕込んでしまい、収拾がつかない わけだが、ヘルズバーグとMSがそこまで馬鹿なはずも無く、もう一つのケース、 ・根本の問題を修正せずに表面的に対策をしているから、収拾がつかない のだと思っている。そして、根本の問題は、最初に書いたUIガー、って奴。 これについて「根本のUIスレッドの問題直せやボケエ」ってをずいぶん前にC#スレで議論した覚えはあるが、 UIをマルチスレッドにして悲惨だった歴史が既にあるらしく、 「オメーがラップすりゃいいだけだろボケエ」と返され、あ、確かにそうだな、と思って終わった。 ま、とにかく、UI関係のコードをスッキリさせる為の物だから、気になってないのなら放置でいいと思う。 > yieldの前後だけ気を付ければ後は完全にシングルスレッドのノリで排他処理が要らない コルーチンの方がいいケースについてか。 うーん、どうなんだろうなあ?俺もコルーチンはほぼ使ってきてないが、 マルチスレッドする場合にはほぼ干渉しない場合に限っていたから、 逆に言えば、コルーチンを使えばもっと並列化できるということか? : デフォルトの名無しさん (ワッチョイ fa96-JU5h) [sage] 2017/12/01(金) 09:48:37.54:eHCFERDK0 Eigenで透視投影変換行列を作るのは次の書き方でいいんでしょうか? なんか結果をみても微妙にずれているのですが... Eigen::Matrix4f perspectiveMatrix(float left, float right, float bottom, float top, float near, float far) { Eigen::Matrix4f m; m << 2.0f*nearZ/(right-left), 0.0f, (right+left)/(right-left), 0.0f, 0.0f, 2.0f*near/(top-bottom), (top+bottom)/(top-bottom), 0.0f, 0.0f, 0.0f, -(far+near)/(far-near), -2.0f*far*near/(far-near), 0.0f, 0.0f, -1.0f, 0.0f; return m; } : デフォルトの名無しさん (ワッチョイ 8d46-5y5x) [sage] 2017/12/01(金) 09:59:25.68:DoXCr8LG0 await/asyncのコルーチンは並列化じゃなくて非同期処理を同期処理っぽく書くための物だとおもうよ 「これを実行して、終わったらこれを実行してね」 っていうときに、スタックの内容がそのまま残ってるからデータの受け渡しが楽というだけだろう ただが言ってるように順不同のresumeが起こったらアブナイので 何か書き込む前にbarrierを張って自分に関係が無い実行中のコルーチンを全部キャンセルして始末してしまおうという (実際にはbarrierだけじゃなくawaitのタイミングでも始末するようにしているが) ただキャンセルするために例外安全性とかも重要になってきて ここでもbarrierとコルーチンの仕組みがそのまま活躍するのが、なんか不思議な感じなんだが 読み込みオンリーだけどキャンセルできるセクションと、書き込みできるがキャンセルできないセクションに 処理を分けるというアイデアはなかなか汎用性が有るんじゃないかと で、二つのセクションは別関数にせずにコルーチンでつないで一つの関数に収めbarrier前/後とし barrier前ならawaitも使える、と、2,3のことが同時にかたづいて気持ちが悪い : デフォルトの名無しさん (ブーイモ MMc9-ZS+9) [sage] 2017/12/01(金) 10:56:33.99:HkxgtxKmM 今日もA-10学校に、まで読んだ : デフォルトの名無しさん (スップ Sdea-hmNI) [sage] 2017/12/01(金) 11:05:05.82:Y7mfb9sId exec execve などいくつかあるけど こいつらの違いを理解できない ここの人たちはmanページを読んで理解できるもんなの? : デフォルトの名無しさん (ササクッテロラ Spbd-Wo5e) [sage] 2017/12/01(金) 11:40:18.96:ZhxOnODbp ttps://msdn.microsoft.com/ja-jp/library/cc372887.aspx これを参考にしてみては 右手系の場合はRH、あと行列の扱い方によっては転置が必要だけど : デフォルトの名無しさん (ワッチョイ fa96-JU5h) [sage] 2017/12/01(金) 15:52:06.92:Xp3BajG00 解決しました。あれで合ってました。 間違ってのはモデル変換行列の方でした。 : デフォルトの名無しさん (オッペケ Srbd-MUmZ) [sage] 2017/12/01(金) 18:53:54.97:1uEPS/Zvr C++17が出たけど既にN4700しか読んでない : デフォルトの名無しさん (ワッチョイ 3d9f-JjO2) [sage] 2017/12/01(金) 19:27:41.27:quTLstwT0 最終的に何をしたいんだ? 俺にはそこが見えない。 一つずつ詰めると、頭三行 > await/asyncのコルーチンは並列化じゃなくて非同期処理を同期処理っぽく書くための物だとおもうよ > 「これを実行して、終わったらこれを実行してね」 > っていうときに、スタックの内容がそのまま残ってるからデータの受け渡しが楽というだけだろう については同意する。これは含めて3人の共通理解でいい。 (ただし俺には逆に、君自身は「並列化の為に」async/awaitを使おうとしているように見える) > ただが言ってるように順不同のresumeが起こったらアブナイので これについては、一般的には逆だ。順序が逆になったら危ないような物を非同期にしてはいけない。 違う言い方をすると、非同期の結果をbarrierを張ってキャンセルするのではなく、 barrier後に非同期にして、結果は必ずcommit出来る構造にする。 ちなみにJavaScriptの連中はここら辺が分かっていなくて、 (というより連中は制御構造云々を議論できるレベルではないのでこれ以前なのだが) 同期前提の制御構造で非同期を扱おうとするからおかしなことになる。 JavaScriptには非同期しかないんだから、選択の余地もないんだが。 C#のasyncはこれとはちょっと違って、イベントで起動するから必ずUIスレになるんだが、 それにジョブをやらせるとUIがカクつくから他スレッドを起動しろ、 しかしそれだと結果を画面に表示できないからそこだけUIスレッドを呼び戻せ、 ただこれだとソースが汚いから、asyncというキーワードをつけ、あたかも全てUIスレッドが処理しているように見せる、 みたいな、なんだかなあ、という状況になっている。 つまり処理順と処理スレッドを入れ替える為の糖衣構文のようなものであって、 本来のasync/awaitのように、非同期を同期的に書くための物自体ではない。ただしそうとも使えるから流用してるが。 それで話を戻すと、君は非同期部分に一般とは逆の「非同期の結果を普通にキャンセルできる構造」を作ろうとしているようだが、 これは何故?或いは何のメリットがあると考えている? : デフォルトの名無しさん (ワッチョイ ea34-YBdU) [sage] 2017/12/01(金) 19:37:06.05:BNKPu+/90 Java厨はハードの基本がわかってないニワカなんちゃってPGが殆どだからな : デフォルトの名無しさん (ワッチョイ f1c8-wAwf) [] 2017/12/02(土) 00:35:41.73:i2vG1ua/0 最近長えレスが多くて辛えぞえ : デフォルトの名無しさん (ワッチョイ 398a-fjL1) [sage] 2017/12/02(土) 00:43:05.07:fU6v9rJN0 予告犯でホリエモンもどきがシンブンシにそんな事言っていたな : デフォルトの名無しさん (ワッチョイ a580-o8PC) [] 2017/12/02(土) 01:17:01.05:Ppnhc3/B0 コルーチンをキャンセルとか意味わかんない事言ってるから途中から読んですらない。 : デフォルトの名無しさん (ワッチョイ 8abd-17nN) [sage] 2017/12/02(土) 02:10:43.54:YZ0QjRT20 漏れはもう説得をあきらめたゾ : デフォルトの名無しさん (ワッチョイ 6680-9RvO) [sage] 2017/12/02(土) 03:07:38.26:UE7qzU9L0 引数が違うだけで、内部的には、どれも同じだろ。 つまり、ラッパー関数 OS をすべて知っている奴は、いない だから皆、神の書と呼ばれる、この本を枕にして寝ている。 著者は、man ページの作者。 この本が翻訳されているのは、日本だけ Linux プログラミング・インタフェース、2012 : デフォルトの名無しさん (オッペケ Srbd-MUmZ) [sage] 2017/12/02(土) 17:32:32.90:oDhEkD2+r >この本が翻訳されているのは、日本だけ もうだめだこの国 : デフォルトの名無しさん (ワッチョイ 6680-9RvO) [] 2017/12/02(土) 20:34:54.85:UE7qzU9L0 Linux 資格の、LPIC 取得者も、半分以上は日本人だろ 日本は、Linux 大国 : デフォルトの名無しさん (ワッチョイ ea34-YBdU) [sage] 2017/12/02(土) 20:40:02.69:hpEyyDG+0 pthreadとかPOSIX系は扱い易い : デフォルトの名無しさん (ワッチョイ b5b3-9GJZ) [] 2017/12/02(土) 21:04:09.64:TmTI6KJY0 Linuxは日本に入ってきたのが早かったし、最初期に一気に広まった。 日本がLinux王国というのは間違いではない。 しかし、それを生かせなかった。 なんでだろ。 : デフォルトの名無しさん (ワッチョイ 5d78-ToxZ) [] 2017/12/02(土) 21:06:05.55:IxwO1O770 PC98がMSDOSを採用し続けたせい : ◆QZaw55cn4c (ワッチョイ 4a60-CnPo) [sage] 2017/12/02(土) 21:14:00.87:4pmjT1Fk0 PC98 のリソースが freebsd に注がれ、linux への移植が遅れたため : デフォルトの名無しさん (ワッチョイ b5b3-9GJZ) [] 2017/12/02(土) 21:25:07.65:TmTI6KJY0 当時書店でBoWとか売ってたけど、そのせいで遅れたような感じはしなかったけどなあ。 むしろLinuxでX11動かすのに四苦八苦してた頃、すでにコンソールで日本語が使えてたのは、 UNIXの人たちのおかげのような気がする。 : デフォルトの名無しさん (ワッチョイ b5b3-9GJZ) [] 2017/12/02(土) 21:38:52.02:TmTI6KJY0 検索してみるとコンパックショックが1994年なんだな。 DOS/V機自作したのが1993年だからもうちょっと前かと思ってたけど。 正規流通前にショップが輸入して売ってたんだろか。 : デフォルトの名無しさん (ワッチョイ 6680-9RvO) [sage] 2017/12/02(土) 22:17:42.90:UE7qzU9L0 その当時、漏れは、Windows 3.1 で、UNIX プログラミングやってた。 テキストエディタ MIFES を使っていた Oracle で、銀行とか、新幹線とか : ◆QZaw55cn4c (ワッチョイ 4a60-CnPo) [sage] 2017/12/02(土) 22:46:06.08:4pmjT1Fk0 >銀行とか、新幹線とか 暗号方式はなにを使っていましたか? : デフォルトの名無しさん (ワッチョイ 398a-fjL1) [sage] 2017/12/02(土) 23:44:03.24:fU6v9rJN0 PANIXの遅さはすごかったな : デフォルトの名無しさん (ワッチョイ ea34-YBdU) [sage] 2017/12/03(日) 01:07:06.72:ti2y6lW/0 NECは当時経営陣が自社の社員が開発したソフトを押し退けてMSのソフトをごり押ししてたからな 終わっているよな : デフォルトの名無しさん (ワッチョイ a580-o8PC) [] 2017/12/03(日) 01:40:24.23:MtUE51Zo0 そんなに糞だったのか自社製ソフト : デフォルトの名無しさん (ワッチョイ b5b3-HgL3) [sage] 2017/12/03(日) 08:02:49.76:YKcJD0pm0 派生クラスのデストラクタでなにもしないなら、 基底クラスのデストラクタを仮想にしなくてもいいですか? : デフォルトの名無しさん (ワッチョイ 9e9f-GQwd) [sage] 2017/12/03(日) 08:56:43.57:I8IEjg5G0 自由にクラスを設計すればいいよ。 デストラクタを仮想クラスを必ず定義しておかなければならないとか、そんな義務はない。 あらかじめ定義しておくと、仕様変更があった時などで、派生クラスで、デストラクタを使いたい時に、基底クラスをいじらずに定義できるだけだよ。 仮に、複数人で、アプリを作ってるなら、基底クラス担当がいたとして、わざわざ基底クラスをいじりますよーとか連絡しないでいいという利点はあるかもな。 もし、基底クラス担当で、他人に基底クラスを触らせたくないなら定義しておいたほうがいい。 基底クラスをいじられて、変なバグとか追加されても困るw : デフォルトの名無しさん (ワッチョイ eab3-YtI1) [sage] 2017/12/03(日) 09:05:51.65:pXIsIngK0 頓珍漢すぎて笑えない... : デフォルトの名無しさん (ワッチョイ a66e-hJGX) [] 2017/12/03(日) 09:26:11.28:hz5Rl7cd0 うん、これは頭悪い発言スレでやればウケてた : デフォルトの名無しさん (ワッチョイ a580-o8PC) [] 2017/12/03(日) 09:31:06.52:MtUE51Zo0 規格は知らんが問題が発生するコンパイラは存在しないと思う。が、デストラクタで何もしないというのはデータメンバーも含まれるからね。 派生クラスにstd::stringのメンバーが居るだけでアウト そんな事を気にするより素直にvirtual付けるか基底クラスでdeleteされないようにする方が有意義に時間を使えると思うよ。 : デフォルトの名無しさん (ワッチョイ 8abd-17nN) [sage] 2017/12/03(日) 09:49:40.40:lnc2VqP30 >派生クラスにstd::stringのメンバーが居るだけでアウト それだけでアウトなのではない DerivedがBaseの派生だとして、実体はDerivedなのにコンパイラからはBaseにしか見えないケースで問題になるだけ DerivedをDerivedとして宣言したらスコープを抜けたらちゃんとDerivedのデストラは呼ばる 問題なやつの例: Derived g_d; void foo() { Base* p = (Base*)&g_d; /*...*/ delete p; // Base::~Base()は呼ばれるがDerived::~Derived()は呼ばれない } : デフォルトの名無しさん (ワッチョイ 8abd-17nN) [sage] 2017/12/03(日) 09:53:01.97:lnc2VqP30 ごめ、一点抜けた 誤: 実体はDerivedなのにコンパイラからはBaseにしか見えないケース 正: 実体はDerivedなのにコンパイラからはBaseにしか見えない状態で当該オブジェクトが破棄されるケース なお、(規格でどういう言葉使いをしているかわ知らんが、) Derivedが多態性をきちんと実装してあるなら、Derivedは「コンパイラからはBaseにしか見えないケース」には該当しない : デフォルトの名無しさん (ワッチョイ 8abd-17nN) [sage] 2017/12/03(日) 09:53:10.45:lnc2VqP30 ごめ、一点抜けた 誤: 実体はDerivedなのにコンパイラからはBaseにしか見えないケース 正: 実体はDerivedなのにコンパイラからはBaseにしか見えない状態で当該オブジェクトが破棄されるケース なお、(規格でどういう言葉使いをしているかわ知らんが、) Derivedが多態性をきちんと実装してあるなら、Derivedは「コンパイラからはBaseにしか見えないケース」には該当しない : デフォルトの名無しさん (ワッチョイ a580-o8PC) [] 2017/12/03(日) 09:57:14.66:MtUE51Zo0 だから 「基底クラスでdeleteされないようにする方が」 って言ってんだろ : デフォルトの名無しさん (ワッチョイ 8abd-17nN) [sage] 2017/12/03(日) 09:58:13.14:lnc2VqP30 大事なことなので2回ry まあ一般論として、の問題なやつがプログラム内に存在しないことの確実で安価で ウザく無い検出方法というものはこの世に存在しないので、 継承関係を使うならデストラクタを見たらvirtualにするパブロフの犬に徹するべきではある : デフォルトの名無しさん (ワッチョイ b5b3-HgL3) [sage] 2017/12/03(日) 10:48:30.75:YKcJD0pm0 >delete p; // Base::~Base()は呼ばれるがDerived::~Derived()は呼ばれない ~Derived()が呼ばれないけど、 呼ばれたとして何も仕事をしないのであれば、呼ばれなくても不都合ないのでは? : デフォルトの名無しさん (ワッチョイ b5b3-HgL3) [sage] 2017/12/03(日) 11:01:45.65:YKcJD0pm0 なにも仕事をしないデストラクタという前提がおかしいのですか? : デフォルトの名無しさん (スップ Sdea-t0Iq) [] 2017/12/03(日) 11:06:05.82:OF+rgUqYd メイヤーズが言ってる ポリモーフィズムを目的とした基底クラスはvirtualデストラクタにする それ以外はしないってルールでいいだろ : デフォルトの名無しさん (オッペケ Srbd-MUmZ) [sage] 2017/12/03(日) 11:12:49.55:TXqrw7wLr Yes デストラクターの仕事はプロクラマーの書いたコードだけではない : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph) [sage] 2017/12/03(日) 13:16:36.90:15ZXM/fw0 このあたりで話題になったことがある。 ttps://echo.5ch.net/test/read.cgi/tech/1478440682/651- 結論から言うと不都合は有る。 少なくとも言語仕様上は未定義に踏み込むのでクラッシュしても泣かない強い心を持ち合わせているのでなければやらない方が良い。 : デフォルトの名無しさん (スプッッ Sdea-gD61) [] 2017/12/03(日) 13:39:28.04:JZXkgVFzd 暗黙的なメンバー変数の破棄が呼ばれるべきってのはあるけど、何もアウトなことはないぞ? : デフォルトの名無しさん (ワッチョイ a580-o8PC) [] 2017/12/03(日) 13:42:24.66:MtUE51Zo0 お前質問読んでないだろ : デフォルトの名無しさん (ササクッテロロ Spbd-Wo5e) [sage] 2017/12/03(日) 13:52:29.29:nekR+Iu8p その考えはどうかと思うけどな vtblが邪魔になるような、メモリ上では純粋にデータしか持たないクラスとか作れなくなるぞ : デフォルトの名無しさん (ワッチョイ eab3-YtI1) [sage] 2017/12/03(日) 16:06:00.67:pXIsIngK0 > 継承関係を使うなら : デフォルトの名無しさん (オッペケ Srbd-MUmZ) [sage] 2017/12/03(日) 16:29:14.83:gYv1de+4r 継承関係を使う=vtbl と考えてしまうような無知な者には理解するのは難しい 他人の作ったものも構わずナマポをdeleteしておいて「virtualにしておけば安全」というのはマッチポンプと言えよう : デフォルトの名無しさん (ワッチョイ eab3-YtI1) [sage] 2017/12/03(日) 16:39:32.89:pXIsIngK0 正直何を言いたいのかはよくわからん w まあみたいな頓珍漢野郎なんだろう... : デフォルトの名無しさん (ワッチョイ b5b3-4T5h) [sage] 2017/12/03(日) 17:09:40.29:bFUfg9md0 いや、この件に関してはお前の方が無知だぞ : デフォルトの名無しさん (ワッチョイ b5b3-HgL3) [sage] 2017/12/03(日) 17:12:44.51:YKcJD0pm0 結局のところ 何も仕事をしないデストラクタはあるが、(空のデストラクタかつメンバ変数なし) 基底クラスのデストラクタだけで派生クラスをdeleteすることが未定義だから 基底クラスのデストラクタは仮想にしないとダメという理解でよろしいでしょうか。 : デフォルトの名無しさん (ワッチョイ ea34-YBdU) [sage] 2017/12/03(日) 17:28:04.25:ti2y6lW/0 デストラクタは仮想にしておくことにより通常の仮想関数と違って継承元辿って全自動ですべて呼び出されるから基底はやることなくても以後継承で実装を変更することがあるのなら空の{}で括っておいたほうが良いよ : デフォルトの名無しさん (ワッチョイ 66eb-YNoK) [sage] 2017/12/03(日) 17:49:35.39:PHD8+7P20 =defaultじゃだめなん? : デフォルトの名無しさん (ワッチョイ eab3-YtI1) [sage] 2017/12/03(日) 17:50:12.92:pXIsIngK0 まあそう思ってりゃいいんじゃね? w : デフォルトの名無しさん (ワッチョイ b5b3-4T5h) [sage] 2017/12/03(日) 19:52:12.45:bFUfg9md0 もしかして本当に継承使ったPOD型に思い至ってないのか : デフォルトの名無しさん (ワッチョイ 8abd-17nN) [sage] 2017/12/03(日) 19:55:36.14:lnc2VqP30 くそーの簡潔すぐる日本語のせいで暗黒の日曜日になってしまったわ、 だいたい質問者のも簡潔すぐる 初心者質問と思ったし、だいたい理解している上で確認の意味で質問しているのならそう書いてホスイ、 : デフォルトの名無しさん (ワッチョイ 5deb-JjO2) [sage] 2017/12/03(日) 20:15:25.15:mwO2JS4O0 もうここ完全に初心者様質問無しにしろよ 上級者様もそれで満足だろ : ◆QZaw55cn4c (ワッチョイ 4a60-CnPo) [sage] 2017/12/03(日) 20:16:39.17:lZQcP+Ql0 それは困ります… : デフォルトの名無しさん (ワッチョイ 8abd-17nN) [sage] 2017/12/03(日) 20:21:06.32:lnc2VqP30 漏れのように語りたい初心者は一体どうすれば…orz : デフォルトの名無しさん (ワッチョイ a66e-hJGX) [] 2017/12/03(日) 21:05:16.05:hz5Rl7cd0 自殺乙 : デフォルトの名無しさん (ワッチョイ 3d04-4NBu) [sage] 2017/12/04(月) 12:17:24.94:gpGY1qga0 祝・C++17発行! : デフォルトの名無しさん (ブーイモ MM81-ZS+9) [sage] 2017/12/04(月) 12:38:47.34:vRsxBueGM これまでinlineを関数に適用するとインライン展開されるんじゃなかったでしたっけ? c++17の説明を読むと翻訳単位で共通のアドレスになるって書いてあるのだけど仕様が変わった? : デフォルトの名無しさん (オッペケ Srbd-MUmZ) [sage] 2017/12/04(月) 12:45:21.76:i0vOJ/Wzr 何を言っているんだお前は ISO/IEC 14882:1998 7.1.2/p4 An inline function with external linkage shall have the same address in all translation units : デフォルトの名無しさん (ブーイモ MM81-ZS+9) [sage] 2017/12/04(月) 12:56:42.17:vRsxBueGM ナンダッテー : デフォルトの名無しさん (ドコグロ MM12-3/o9) [sage] 2017/12/04(月) 13:08:03.78:VjK2Ds3GM 以前void f(A &a, int num)をa.f(num)みたいに呼べる機能が追加されるとかされないとかを見た気がするんだけど知ってる人いたらURLか機能名を教えてほしい : デフォルトの名無しさん (ワッチョイ b5c8-Syir) [sage] 2017/12/04(月) 13:10:08.18:zqEI2rJ60 unified call syntax : デフォルトの名無しさん (ドコグロ MM12-3/o9) [sage] 2017/12/04(月) 13:22:55.68:VjK2Ds3GM ありがとう : デフォルトの名無しさん (ワッチョイ 3d04-4NBu) [sage] 2017/12/04(月) 14:58:45.86:gpGY1qga0 ウニファイドコールシンタックスは死んだのだ。 よみがえれ! : デフォルトの名無しさん (ワッチョイ ea34-YBdU) [sage] 2017/12/04(月) 15:48:40.92:hZXt5yd00 残念だったな : デフォルトの名無しさん (ワッチョイ 3d04-4NBu) [sage] 2017/12/04(月) 16:16:56.14:gpGY1qga0 はう。 : ◆QZaw55cn4c (ワッチョイ 4a60-CnPo) [sage] 2017/12/04(月) 18:00:57.88:ESsPBxjD0 accelerated c++ をやっている人いませんか? 今やりなおしているけれども、5年ほど前の自分の回答をなくしてしまった… 4章章末練習問題4-6の回答を、よろしければお見せいただけませんか? この章、EOLine と EOFile を std::cin の eof フラグ 1 個でなんとかしようとしているのが非常にまずいと分かりましたが 逆に教科書掲載のプログラムでうまくいっているのが不思議です…取り組まれた方のコメントをお待ちしています… 普通 getline() をつかうんだろうけれども、なんでこんなに変てこな実装になっているのだろう? 教科書の内容 ttp://https://ideone.com/rdtZWG "> ttps://ideone.com/rdtZWG : デフォルトの名無しさん (ワッチョイ a580-o8PC) [] 2017/12/04(月) 19:13:30.50:gGPHcFu90 メソッドチェインしたいだけなら拡張メソッドの方が筋がいいだろ。そっち応援してやれよ : デフォルトの名無しさん (ワントンキン MM7a-Syir) [sage] 2017/12/04(月) 19:27:49.25:I5+tBH1vM 拡張メソッドってデコレータパターンで充分なのに、なんで最近の言語には結構ついてんだろ。 : ◆QZaw55cn4c (ワッチョイ 4a60-L6cJ) [sage] 2017/12/04(月) 19:43:03.25:ESsPBxjD0 結局のところ、std::stringstream を使うべきだという結論になりました。(std::stringstream は今回初めて知った) 教科書本文(64ページ、項4.2.3、70ページ、項4.5) ttp://https://ideone.com/F761bo "> ttps://ideone.com/F761bo 73ページの練習問題4-5の方は ttps://ideone.com/H9iE4j このように : デフォルトの名無しさん (ワッチョイ a66e-hJGX) [] 2017/12/04(月) 21:39:45.95:k2OIwnad0 : デフォルトの名無しさん (ワッチョイ 3d04-4NBu) [sage] 2017/12/04(月) 21:40:55.38:gpGY1qga0 ん? : デフォルトの名無しさん (ワッチョイ 8abd-17nN) [sage] 2017/12/04(月) 22:43:49.08:5AQkRrK70 別に驚くほどのことじゃないし… 関数のインライン展開と、同じ機能の非インライン関数の存在は両立する の規定は関数のアドレスをとられたときのため用 : ◆QZaw55cn4c (ワッチョイ 4a60-CnPo) [sage] 2017/12/05(火) 10:37:05.67:x6DQdw1l0 template の話もお願いしていいですか? 型安全を優先するあまりに instantiate(これいい訳がないね) してまで、という思考と void * を許してしまう思考の両方について、比較していただくとうれしいんですけれども : ◆QZaw55cn4c (ワッチョイ 4a60-CnPo) [sage] 2017/12/05(火) 10:45:00.72:x6DQdw1l0 std::make_shared はあっても unique 版はない、とかなんとか、そこらへんが徹底されていない、とか、確かあったような気が : ◆QZaw55cn4c (ワッチョイ 4a60-CnPo) [sage] 2017/12/05(火) 10:50:30.93:x6DQdw1l0 ファイルのopen/close とか、RAII /デストラクタが Java にもあればなあ、と思っています。 あと、Java の syncronized って、結局、テキトーなダミー変数を mutex 代わりにしちゃう、とかありません? : ◆QZaw55cn4c (ワッチョイ 4a60-CnPo) [sage] 2017/12/05(火) 10:53:52.88:x6DQdw1l0 古来ゆかしき Boehm GC を思い出しました。これ、C++11 later とかの対応はどうなんだろう? ttp://www.hboehm.info/gc/ よくわからん… : ◆QZaw55cn4c (ワッチョイ 4a60-CnPo) [sage] 2017/12/05(火) 10:58:49.04:x6DQdw1l0 >K&Rも「関数ポインタも使えるよ」としか書いて無い。あれはもっと力説されて然るべきだった。 これが本題かな? いや、関数ポインタってそんなに特筆すべきものだったかな…むしろ setjmp()/longjmp() の方がインパクトが、ってこれはexception として広く採用されていましたっけね いや、関数ポインタってコールバック(とvtable)は別として、何か使えるネタが他にあるかなって考えてました、今のところ思いつかないな… : ◆QZaw55cn4c (ワッチョイ 4a60-CnPo) [sage] 2017/12/05(火) 11:06:41.81:x6DQdw1l0 >(instance.method()とstaticMethod(instance)の実行時の違いがほぼ無い、 うーん、Java で、これでもか、これでもか、と this が null でないことをチェックするのを読んだことがあります。 C++ だと(virtual でなければ)普通に this = 0 にして this->method() できちゃうんですが、この this の null チェックって、広く行われているのでしょうか? ttp://codepad.org/gtEBWFKR : ◆QZaw55cn4c (ワッチョイ 4a60-CnPo) [sage] 2017/12/05(火) 11:20:19.80:x6DQdw1l0 これでおしまい try〜catch はいいとして、finally って使いにくい、というか使い方がわからないんですが、finally って意味あるんでしょうか? : デフォルトの名無しさん (オッペケ Srbd-MUmZ) [sage] 2017/12/05(火) 12:10:12.56:4pWc4df5r > RAII /デストラクタが Java にもあればなあ、と思っています RAIIは7年前にジャバに入った筈だが 何を言っているのだろうか : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph) [sage] 2017/12/05(火) 18:56:58.67:+5IMShlD0 C++ 的にはなるべくデストラクタで後始末がつくようにやれというスタンスっぽい : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph) [sage] 2017/12/05(火) 19:00:20.98:+5IMShlD0 C++ ではヌルポインタからメンバ関数を呼び出すのは未定義だよ。 メンバ関数内でデータメンバにアクセスする要素がなかったとしても未定義。 : ◆QZaw55cn4c (ワッチョイ 4a60-CnPo) [sage] 2017/12/05(火) 19:12:28.94:x6DQdw1l0 え! : デフォルトの名無しさん (ワッチョイ dee7-JjO2) [sage] 2017/12/05(火) 19:18:52.02:EmfbEE5b0 this->method()は(*this).method()と等価で、ぬるぽに*適用したらその時点で未定義だからアウト : デフォルトの名無しさん (ワッチョイ c576-jUU9) [sage] 2017/12/05(火) 19:33:35.46:EFbqYV3B0 未定義だけどvirtualじゃなきゃ大抵動く だからNULLチェックも意味がある : デフォルトの名無しさん (ワッチョイ 398a-RK4k) [sage] 2017/12/05(火) 19:58:57.51:U9JLSPtA0 thisをNULLチェックするようになったらそれはもう終わってるコード : デフォルトの名無しさん (ワッチョイ c576-jUU9) [sage] 2017/12/05(火) 20:02:17.22:EFbqYV3B0 終わってるヤツでも使えるようにする よくあること : デフォルトの名無しさん (ワンミングク MM7a-o8PC) [] 2017/12/05(火) 20:52:26.72:sgxJpWORM 呼び出されなくても泣くなよ : デフォルトの名無しさん (ドコグロ MM6d-YtI1) [sage] 2017/12/05(火) 20:53:39.04:TKR/EMkrM catchの中で再スローしてもとにかくリソースを解放したいとか普通にあるでしょ : デフォルトの名無しさん (ドコグロ MM12-YtI1) [sage] 2017/12/05(火) 21:07:41.41:njWV82p8M 俺はしない 以上! : デフォルトの名無しさん (ワッチョイ 398a-RK4k) [sage] 2017/12/05(火) 23:32:01.27:U9JLSPtA0 RAIIを徹底すればそんな危なっかしいことは不要 : デフォルトの名無しさん (ワッチョイ 36fb-MUmZ) [sage] 2017/12/05(火) 23:35:55.54:+TIDOo7u0 自分にレスすんなよ 見てて恥ずかしいだろ : デフォルトの名無しさん (ワッチョイ 398a-RK4k) [sage] 2017/12/05(火) 23:52:38.14:U9JLSPtA0 std::make_uniqueがあるだろうが(C++14) : デフォルトの名無しさん (ワッチョイ 59e3-HgL3) [] 2017/12/05(火) 23:55:11.50:WoyHGfNJ0 返答を期待しないでただ聞いて文句言ってもらいたんですけど 03以来久し振りにc++いじってます 17だか20の最新仕様も未だにclassでgetter/setter定義しなきゃいけない仕様なんですかね? C#のpropertyがあれば便利と思うんですけど。今あるか知りませんが どうなんでしょ?今後の仕様も導入予定なし? おやすみなさい : デフォルトの名無しさん (ワッチョイ 6681-Syir) [sage] 2017/12/06(水) 00:03:17.02:nXK3hnHv0 そもそも状態を露出するな : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph) [sage] 2017/12/06(水) 01:18:56.49:s33DVBsR0 いや、俺は意図通りに動かない場合にガチで遭遇したことあるからこれはホントにお勧めしない。 : デフォルトの名無しさん (ワッチョイ 3d04-4NBu) [sage] 2017/12/06(水) 01:21:27.27:+0bHqE6f0 そもそも、せったげったってそんなに重要か? : デフォルトの名無しさん (ワッチョイ ea33-MbHU) [sage] 2017/12/06(水) 01:48:19.95:K0RLdWNW0 ttps://wandbox.org/permlink/i6CwiXS4NMgpintS : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph) [sage] 2017/12/06(水) 02:05:35.10:s33DVBsR0 一応 を解説しておくと、 this が真のときはもちろん真だし、 this が偽 (ヌル) のときは未定義なのでどういう挙動をしてもかまわないので真と解釈してもええやろという超推論で常に真として扱われる。 : デフォルトの名無しさん (ワッチョイ b5b3-9GJZ) [] 2017/12/06(水) 04:07:36.86:hjP5HWFz0 ++thisってやるとどうなるんだろうねえ。 : デフォルトの名無しさん (ワッチョイ a66e-hJGX) [] 2017/12/06(水) 05:07:17.55:yhpve1PE0 できないよ thisは常にconst修飾されている 禿本1stではthisへの代入があったんだけどね : デフォルトの名無しさん (ワッチョイ 36fb-MUmZ) [sage] 2017/12/06(水) 07:19:10.64:Fjj6BXu50 >thisは常にconst修飾されている それは規格のどこに書いてあるのですか : デフォルトの名無しさん (スプッッ Sdea-gD61) [] 2017/12/06(水) 08:02:56.90:vAzWmOhld thisってprvalueじゃないのか? : デフォルトの名無しさん (ワッチョイ fa96-JU5h) [sage] 2017/12/06(水) 08:25:21.60:ROyOilcp0 This is a pen. : デフォルトの名無しさん (ワッチョイ 6679-mNEL) [sage] 2017/12/06(水) 08:33:58.89:BltAOSs70 ISO、C++17の仕様「ISO/IEC 14882:2017」を発行 ttps://mag.osdn.jp/17/12/05/171500 「ISO/IEC 14882:2017」 ttps://www.iso.org/standard/68564.html : デフォルトの名無しさん (ワッチョイ a66e-hJGX) [] 2017/12/06(水) 10:56:56.20:yhpve1PE0 ご指摘どうも struct X { void f() { decltype(auto) that(this); that = nullptr; //ok } void g() { X* const it(nullptr); decltype(auto) that(it); that = nullptr; //error } }; 確かにそのようで : デフォルトの名無しさん (ワッチョイ a580-o8PC) [] 2017/12/06(水) 11:12:02.00:J84WjEud0 それはメンバー関数の修飾によっても変わるやろ : デフォルトの名無しさん (ワッチョイ a66e-hJGX) [] 2017/12/06(水) 11:21:40.65:yhpve1PE0 void f() constのことを言っているなら見当違いだが : デフォルトの名無しさん (スプッッ Sdea-gD61) [] 2017/12/06(水) 11:44:06.58:vAzWmOhld *thisじゃなくてthisのことだよね? 何かで「const pointerである」って読んだことあるような気もするけど、 そもそもprvalueにしか思えない。 : デフォルトの名無しさん (ワッチョイ a66e-hJGX) [] 2017/12/06(水) 12:20:51.70:yhpve1PE0 this = だの &this なんてことは考えもしないので気がつかなかった : デフォルトの名無しさん (ワッチョイ ea34-YBdU) [sage] 2017/12/06(水) 13:26:30.44:+UwbONVA0 this is it : デフォルトの名無しさん (ワッチョイ 5d78-ToxZ) [] 2017/12/06(水) 16:04:03.08:S418wH960 this, this... this... : デフォルトの名無しさん (ワッチョイ 6a12-JjO2) [sage] 2017/12/06(水) 18:31:30.07:Kh6EF+Se0 =0とかじゃなくてpureとかそのまま書ければいいのに そもそもなんで0入れるんだ : デフォルトの名無しさん (ワッチョイ dee7-JjO2) [sage] 2017/12/06(水) 20:25:22.49:EpXMgW7A0 vtblの関数ポインタをNULLにセットするっていうK&R時代の発想で決まった文法 : デフォルトの名無しさん (ワッチョイ dee7-JjO2) [sage] 2017/12/06(水) 20:29:30.14:EpXMgW7A0 独自拡張で0の代わりに関数ポインタ代入できるようにした糞コンパイラと それ使ってイベントハンドラかなんかの設定するようになってる糞システムが なんかあったような気がするけど誰か覚えてない? : デフォルトの名無しさん (ワッチョイ a66e-hJGX) [] 2017/12/06(水) 21:00:00.17:yhpve1PE0 実際には存在し得ない抽象クラス単体オブジェクトが指すためのvtableな bcc32のバグで存在し得たことはあるが : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/07(木) 01:28:26.94:lJwR2NaH0 =0、漏れはしゅき!!!!1!!!!!11! キーワードを増やさなくて済む 切り札は最後までとっておくべきものじゃ : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/07(木) 01:56:58.07:lJwR2NaH0 つかpureみたいな柔弱で恥ずかしい感じのキーワードを追加してくれなくて本当に良かった : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/07(木) 02:03:07.27:5gbe7aWB0 ピュア関数の提案は出てたよ。最適化に効くとかで。 : デフォルトの名無しさん (ワッチョイ 9f34-Xhpf) [sage] 2017/12/07(木) 02:13:17.50:ETsKWPG+0 ピュアプリズム! : デフォルトの名無しさん (ワッチョイ 5778-T1Xs) [] 2017/12/07(木) 02:18:10.34:clrrPlpA0 C++98だかでポインタ値にNULLじゃなくて0を使うのが推奨されていた頃の名残じゃないかな の割にはnullptrを指定するとエラーになるけど : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-StTJ) [sage] 2017/12/07(木) 02:43:01.31:vxJqQn/b0 文脈依存キーワードを導入しちゃったからな。 pure も有りといえば有りな気はしないでもない。 : デフォルトの名無しさん (ワッチョイ bfe7-F7Qh) [sage] 2017/12/07(木) 19:18:50.53:TKFMtTzr0 pure関数って状態を持たない関数であって純粋仮想関数とは別物だぞ : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/07(木) 19:49:26.48:5gbe7aWB0 標準委員の人がそういう意味じゃないよ。適当に決められたんだよ。って言ってた。 : デフォルトの名無しさん (ドコグロ MMeb-45bT) [sage] 2017/12/07(木) 20:45:51.07:G7lyLovKM この話の流れで virtual pure function でないと思ってるお前が不憫だよ... : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/07(木) 22:05:02.33:lJwR2NaH0 =0は最初ボーランドが勝手に実装した、とどこかで読んだが じゃあ=0より前のC++には純粋仮想関数は無かったのやろうか… : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/07(木) 22:43:46.61:lJwR2NaH0 ていうか class Foo { public: void someMethod() { } }; と書くしかなかったものが class Foo { public: void someMethod() = 0; }; になったのだとしたら 文字数的にもバランスがとれた良い追加構文 : デフォルトの名無しさん (ワッチョイ ff6e-5CBX) [] 2017/12/08(金) 07:14:19.07:zfye+4U00 そこは俺もそう思う しかし=0;なのにvirtualが必須なのはイヤ 基底指定子にpublicがいちいち必要なのと同じくらいに : デフォルトの名無しさん (ワッチョイ bf8a-ufcO) [sage] 2017/12/08(金) 08:40:57.49:t5VCrWbM0 ダダこねるな : デフォルトの名無しさん (スップ Sd3f-jN+0) [sage] 2017/12/08(金) 10:07:38.22:Z3siquAKd publicが嫌ならstructで宣言しろよ : デフォルトの名無しさん (ササクッテロル Sp8b-AVOn) [sage] 2017/12/08(金) 10:07:41.82:2Zvn0bTbp pure virtualだろ?virtual pureってなんだよ : デフォルトの名無しさん (ワッチョイ 9f34-Xhpf) [sage] 2017/12/08(金) 10:10:30.07:vOIFbJvh0 ピュアトゥインクル! : デフォルトの名無しさん (ドコグロ MMdf-45bT) [sage] 2017/12/08(金) 13:00:32.45:PXTxgSdcM すまん、そんなアホなところにまで突っ込まないとダメなほど必死だとは思わなかったよ w : 357 (ワッチョイ 57b3-wJM8) [sage] 2017/12/08(金) 18:17:55.92:eC9D+0x50 必死なのはお前だろ 誰と同一人物だと思ったんだw 俺この話に参加したの初めてだぞ : デフォルトの名無しさん (ワッチョイ 57b3-wJM8) [sage] 2017/12/08(金) 18:29:46.65:eC9D+0x50 ていうかは宛てじゃねーの? それを踏まえて文脈依存うんぬんだと思うが : デフォルトの名無しさん (ワッチョイ 9f72-QvkH) [sage] 2017/12/08(金) 20:49:15.62:oKg6KkSA0 質問があります。 コンパイラはMicrosoft(R) C/C++ Optimizing Compiler Version 19.12.25830.2 for x86 class A { public: explicit A( void ) {} }; struct B { A a; }; int main( int, char ** ) { B b; B b2( {} ); B b3 = {}; B b4{}; return 0; } 上記のソースをオプション/std:c++latestを付けるとエラー、つけないとエラー無しになります。 対処だけだったらAのコンストラクタからexplicitを取れば良いのですが、 何故エラーになるのかがイマイチ理解できていません。 C++17の波括弧初期化の型推論の新規則あたりがそれっぽいですがその辺を読んでも理解できていません。 (そもそも引数無しのコンストラクタにexplicitを何故付けるのかって突っ込まれそう) : デフォルトの名無しさん (スップ Sd3f-Hl5D) [sage] 2017/12/08(金) 21:05:07.58:5s0/Hyw7d 今時なんで32ビットなんて使うんだろ? : デフォルトの名無しさん (ワッチョイ bf8a-ufcO) [sage] 2017/12/08(金) 21:19:10.75:t5VCrWbM0 エラーメッセージ読めねーのか? : デフォルトの名無しさん (ワッチョイ 9fb3-Hxc3) [sage] 2017/12/08(金) 21:25:34.24:2vsjK8u+0 ベイトレのatomが32bitという負債 : 320 (ワッチョイ b7e3-qmOZ) [] 2017/12/08(金) 23:32:07.03:uQLcRAb10 前にgetter/setterプロパティ書いた者だす getter/setterは有効な回答得られず 03→17/20でも、例えば int& Status() { return m_status; } const int& Status() { return m_status; } const の二重定義必要? おやすみなさい : デフォルトの名無しさん (ワッチョイ bfe7-F7Qh) [sage] 2017/12/08(金) 23:52:39.34:IFoyYnlC0 そんな糞みたいなgetter書くくらいならpublic変数にしたほうがまし : デフォルトの名無しさん (ワッチョイ 9fb3-45bT) [sage] 2017/12/09(土) 00:00:04.12:jyWlwvil0 5chは初めてか? ちょっと肩の力抜けよ : デフォルトの名無しさん (ワッチョイ 9f34-Xhpf) [sage] 2017/12/09(土) 00:06:55.18:CGhksCFV0 プロパティー使いたいならエンバカ : デフォルトの名無しさん (ワッチョイ ff81-WAMQ) [sage] 2017/12/09(土) 00:30:19.70:/OGT/7c/0 そもそもプロパティをそのまま露出すんなって : デフォルトの名無しさん (ワッチョイ 5778-T1Xs) [] 2017/12/09(土) 00:37:11.06:t6DuUCjM0 hage.sizeof みたいな書き方があってもいいけど、別になくてもいいからな 話は上がっているんだろうけど、優先順位はかなり低いと思うね : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/09(土) 00:48:53.78:/xTkL2Yo0 constバージョンだけでよくない? 何で内部状態を他人に書き換え許可するのさ。 : デフォルトの名無しさん (ワッチョイ 57b3-wlc6) [sage] 2017/12/09(土) 02:05:41.93:X5cpE3G30 に言え : デフォルトの名無しさん (ワッチョイ 9fb3-45bT) [sage] 2017/12/09(土) 08:40:17.40:jyWlwvil0 夜中まで粘着 w : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/09(土) 11:10:57.47:VQtjhM8H0 のgetter/setterの中身はあくまでサンプルなのでは… いちいちメソッド呼び出しの度に状態を引数渡しするほうが内部状態の露出として醜悪かもしれん… つかデータメンバの書き換えはデータメンバの書き換えだからNGというものではなくて、 内部状態の整合性が保たれれば何だって良いんじゃ… データメンバ直書き換えでなくsetterなら整合性をチェックしたり与えたりするチャンスがある (あるいは排他制御とかやることもある…まあ慎重に考えたらsetterでやるよりロック回数が少ない方法がたいてい見つかるが、 : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/09(土) 11:13:16.09:VQtjhM8H0 アンカーミスった、 誤: 正: : デフォルトの名無しさん (ワッチョイ ff56-Nf6k) [sage] 2017/12/09(土) 12:28:24.94:IHtyR51x0 の実装はサンプルにしてもありえないだろう。 一度呼ばれて参照を保存されたら、変更を制御できなくなる。 int& status = a.Status(); status = 2; : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/09(土) 13:28:08.16:xT8UfS000 それな。 中身だけでなく外見(インターフェース)も糞。かつそのインターフェースなら例外なく中身も糞になる : デフォルトの名無しさん (ワッチョイ bf8a-ufcO) [sage] 2017/12/09(土) 13:40:30.88:JczXMZr10 ここでgetter/setter言ってるのは例外なくどうしようもない低能だから無視してあげて下さい : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-n3/l) [sage] 2017/12/09(土) 14:04:38.96:Mc+Fg8lHd int mydata() const; // getter void mydata(int data); // setter こういう感じの下駄瀬田は道南? : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/09(土) 14:29:29.91:VQtjhM8H0 のgetterの&を見落としていたorz m_dataへのmutableなポインタを返すのではm_dataのgetterとは言えぬ : デフォルトの名無しさん (ワッチョイ bfe7-F7Qh) [sage] 2017/12/09(土) 16:16:46.64:85CJr7Ot0 メンバ変数hogeにgetHoge,setHogeなんて名前の下駄雪駄を 機械的に作ろうとしてる事自体が間違いの可能性を考えろ class Window { int width, height; ... //まちがい int getWidth() const; int getHeight() const; void setWidth(int w); void setHeight(int h); //せいかい Size getCurrentFrameSize() const; void resize(int width, int height); }; : デフォルトの名無しさん (ワッチョイ bf9f-wlc6) [sage] 2017/12/09(土) 16:31:11.01:eDExTF/q0 は、C#の機能があると便利ですねー。セッター/ゲッターが毎回定義するの?っていうお題じゃねーの? どっからWindowやら、Sizeが出てきた? : デフォルトの名無しさん (ワッチョイ bfe7-F7Qh) [sage] 2017/12/09(土) 16:38:09.40:85CJr7Ot0 クラス内部状態の変更は意味のある操作単位として外部に公開すべきであって むやみに内部の変数を下駄雪駄として露出すんなっていうつもりだったんだが難しかったかな? : デフォルトの名無しさん (ワッチョイ bf9f-wlc6) [sage] 2017/12/09(土) 16:56:33.96:eDExTF/q0 そんな分かりきったことを議論することではないだろ。 C++の規格が新しくなってsetter/getterは従来道理なの?が質問。 set/getするときは、直の変数の読み書きの代用だけではななく、何かの処理をしたりして公開/制限付き公開するものじゃねーの? : デフォルトの名無しさん (ドコグロ MMdf-45bT) [sage] 2017/12/09(土) 17:16:31.79:rvn5Lgi+M だからプロパティ単体で読み書きするのが常に正しい訳じゃないでしょってこと > どっからWindowやら、Sizeが出てきた? 一例だってことわからないの? : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/09(土) 17:25:01.50:xT8UfS000 従来通りだよ。 何がしたいのかはっきりさせないからこうなるんだよ。 メンバーへの代入のような記述でメンバー関数呼び出ししたいということか? : デフォルトの名無しさん (スプッッ Sd3f-q8ec) [sage] 2017/12/09(土) 18:54:12.14:WISiBPL1d 昔どっかで下駄雪駄をクラスにして公開する方法が書いてあったな。 面白そうだったけと使おうとした事はなかった。 : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/09(土) 19:16:55.95:xT8UfS000 単にデータメンバー指定したらgetter setter相当のメンバー関数を自動生成するような機能が欲しいというなら他のやつが言うように思考停止したバカしか欲しがらない機能 EなんとかとかいうIDEには付いてるらしいが : デフォルトの名無しさん (ワッチョイ 17b3-G2/9) [sage] 2017/12/09(土) 20:17:03.24:FTIoFrRr0 理想はわかるけど、ある程度の規模のコードを書けば何だかんだでsetter/getterはけっこう書くだろ : デフォルトの名無しさん (ワントンキン MM7f-WAMQ) [sage] 2017/12/09(土) 20:17:55.36:qp4HeFcwM .netのPropertyは実際のオブジェクトがバッキングフィールドってとこに完全隠蔽されることがメリット C++では自動実装は不可能、同じ効果を得るならばpimplパターンでオブジェクトを隠蔽は可というのが答えではないだろうか : デフォルトの名無しさん (ワントンキン MM7f-WAMQ) [sage] 2017/12/09(土) 20:18:50.11:qp4HeFcwM getterはともかくsetterは書かない : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/09(土) 20:26:30.08:VQtjhM8H0 setter/getter批判論者は何を批判しているのかいまいちわからん… class SomeWidget { // GUIのパーツか何か Color m_FgColor; // 前景色 Color m_BgColor; // 背景色 ... }; とゆークラスがあったとして、 void SomeWidget::setFgColor(Color color) { m_FgColor = color; } void SomeWidget::setBgColor(Color color) { m_BgColor = color; } というのはsetterだからダメで、意味的にまとまりのある void SomeWidget::setColor(Color fgColor, Color bgColor) { m_FgColor = color; m_BgColor = color; } とかにしないとダメだとかそーいう主張? スゲーいらんお世話な気が… : デフォルトの名無しさん (ワッチョイ 57b3-wlc6) [sage] 2017/12/09(土) 20:43:02.98:X5cpE3G30 setter/getter自体を批判してんじゃなくて 自動生成をC++に求めるのを間違いだと言ってるだけだと思うが : デフォルトの名無しさん (ワッチョイ 9fb3-45bT) [sage] 2017/12/09(土) 21:05:37.85:jyWlwvil0 > void SomeWidget::setColor(Color fgColor, Color bgColor) { m_FgColor = color; m_BgColor = color; } > とかにしないとダメ それを意味的にまとまりがあると考えるお前がおかしい だからそんな頓珍漢なレスになるんだよ : デフォルトの名無しさん (ワッチョイ bfe7-F7Qh) [sage] 2017/12/09(土) 21:10:02.77:85CJr7Ot0 クラスにメンバーがいっぱい→それぞれの下駄雪駄をいっぱい作らなきゃ!→楽な書き方ないの? っていう発想から抜け出せてないんだろうけど この最初の矢印がそもそも間違いだって言ってんだよ まずはどんな操作をpublicで公開すべきなのかちゃんと設計しろ、話はそれからだ 結果的にただのgetterとsetterとして実装されるものはもちろんあるだろうし、それが悪いわけじゃないけど、 そんなのが自動生成しなきゃ追いつかないほど大量に出てくるようなら一回設計を疑うべきだ : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/09(土) 21:10:22.08:xT8UfS000 内部のデータメンバーからインターフェースを作るのではなく、インターフェースから内部実装を書くという当たり前の事を言ってるだけ。 : デフォルトの名無しさん (ブーイモ MMbb-fHNr) [sage] 2017/12/09(土) 21:14:57.20:Z61PcTBCM あんたすげーな : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/09(土) 21:17:58.04:xT8UfS000 これC++に限った話じゃないからね。これが理解出来ないようだったら自分のソフトウェアの設計能力はとてつもなく低いと自覚した方がいい : デフォルトの名無しさん (ワッチョイ ff81-WAMQ) [sage] 2017/12/09(土) 23:03:23.79:/OGT/7c/0 なんでコンストラクタで初期化しないの? : 320酔っ払い (ワッチョイ b7e3-qmOZ) [] 2017/12/09(土) 23:18:04.72:2CXK8lIl0 正直聞きたい事はそういうことじゃねーのよ 簡単に記述する方法が導入された、される予定があるか知りたいだけ C++にC#みたいなproperty要望無いの? const地獄解は消されたのかな? ってこれ! 具出すなは分かるの言う通り例が悪かった APIや世界に発信するライブライ作ってる訳じゃないけど これが普通なの?俺別にpublicゆーてないけど protectedでもこんなまわりくどい事すんの? そもそも設計が…言う前に”そんな方法は無い!”って言ってくれたら… つーか言えっつーのお願いマイメロディー : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/09(土) 23:20:31.63:/xTkL2Yo0 プロパティの言語サポートはない。 が、がんばればそれっぽいものをライブラリで作ることはできる。 : デフォルトの名無しさん (ワッチョイ 579f-F7Qh) [sage] 2017/12/09(土) 23:21:13.23:as7dcCOb0 VC++になら最初からpropertyはあるし使えるが。 : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/09(土) 23:23:36.06:VQtjhM8H0 mutableなオブジェクトとして書きたい(ときもある)から : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/09(土) 23:26:04.82:/xTkL2Yo0 それ、独自拡張かなんかでしょ? : デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ) [sage] 2017/12/09(土) 23:27:21.61:fRg177Ch0 プロパティ厨しつこい C#使ってろよ public変数使う言い訳探してんじゃねえよ : デフォルトの名無しさん (ワッチョイ 579f-F7Qh) [sage] 2017/12/09(土) 23:30:23.37:as7dcCOb0 もち : 320 (ワッチョイ b7e3-qmOZ) [] 2017/12/09(土) 23:30:53.06:2CXK8lIl0 手間掛けたくないのであればなーって 自作出来ても汎用性無いでしょ。汎用性関係あるプログラムじゃないけど VC独自拡張?知らんかった それが標準になりそうなら憶える価値あるだろうけど… : デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ) [sage] 2017/12/09(土) 23:34:15.72:fRg177Ch0 間違いが広がっては困るから一応言っておくけど が言っているのはC++とは全く互換性のないC++/CLIのことな : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/09(土) 23:35:31.46:VQtjhM8H0 ウィンドーズホン御用達言語のC++CXにもあるわ; : デフォルトの名無しさん (ワッチョイ 579f-F7Qh) [sage] 2017/12/09(土) 23:42:11.37:as7dcCOb0 覚えるも糞もあるかよ。C#のがそのままだよ。 というか、C#≒.NET≒VC++だから、C#の機能はVC++/CLIでは大概ほぼ使えるはずだが。 ttps://msdn.microsoft.com/ja-jp/library/2f1ec0b1.aspx なお死ねには同意。 C#が良ければC#を使えばいいだけ、C#ライクなC++が欲しいならVC++/CLIを使えばいいだけ。 : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/09(土) 23:43:07.64:xT8UfS000 お前死んだやろ… : デフォルトの名無しさん (スププ Sdbf-dpgO) [sage] 2017/12/09(土) 23:47:47.55:UFGZ9ZWld 一時期流行ってたprivate厨さんちーす : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/09(土) 23:48:58.02:VQtjhM8H0 ウィンドーズホンでネイティブC++を呼び出すための唯一の手段なので死んではいないハズ… ttps://docs.microsoft.com/ja-jp/windows/uwp/winrt-components/creating-windows-runtime-components-in-cpp : デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ) [sage] 2017/12/10(日) 00:02:10.31:dss2es1x0 C++/CLIのことをVC++っていうのやめろよ それにC++風ですらないし : デフォルトの名無しさん (ワッチョイ ffe9-+LjN) [sage] 2017/12/10(日) 00:11:55.72:MJKB1Uts0 それは.netへの過渡期中の言語ですね : デフォルトの名無しさん (ワッチョイ 579f-F7Qh) [sage] 2017/12/10(日) 00:13:30.39:Rt5tAWZZ0 いや通称VC++だし、unmanagedはほぼC++11だぞ。 ttps://www.ruche-home.net/program/cpp/msvc : デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ) [sage] 2017/12/10(日) 00:25:29.55:dss2es1x0 そっちじゃねえだろ こっちだろ ttps://ja.wikipedia.org/wiki/C%2B%2B/CLI : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/10(日) 00:27:56.18:Earl4FxN0 ウィンドーズホンが死んでるだろ…いい加減にしろ! ttps://www.gizmodo.jp/2017/10/winodows-phone-is-dead.html : デフォルトの名無しさん (ワッチョイ 579f-F7Qh) [sage] 2017/12/10(日) 00:52:59.90:Rt5tAWZZ0 なるほど君は知らないんだな。VC++/CLIは混ぜられるんだよ。 君が言っているのはmanagedで、俺が言っているのはunmanaged。 まあ、どうせ君は使わないのだろうし、深く知る必要はないが。 : デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ) [sage] 2017/12/10(日) 00:58:12.05:dss2es1x0 ID:Rt5tAWZZ0 こいつ話噛み合わなさすぎてやべえぞ : デフォルトの名無しさん (ワッチョイ bfe7-F7Qh) [sage] 2017/12/10(日) 06:32:52.80:dE7pgqu30 protectedこそちゃんと設計しないとメタメタになるだろうが publicもprotectedもコードの利用者が自由に使えることには変わらんから公開インターフェースには変わらんぞ お前もしかして「protectedだしメンバ全部下駄雪駄付けて継承先に丸出しするおー(^q^)」ってやってんの? 誰がどんな派生クラス作ってどんなふうにいじくって親クラスのふりして混入させてくるかわからないのに? 世界に発信しないからどうでもいいって?同僚や1年後の自分はたまったもんじゃねえな : デフォルトの名無しさん (ワッチョイ ff81-WAMQ) [sage] 2017/12/10(日) 09:34:29.32:H4MY5dOm0 死んでどうぞ : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/10(日) 10:23:51.33:jGY33Ae80 ただ単にforeground colorまたはbackground colorを変更するだけのために いちいちオブジェクトを破棄してGDIリソースを開放して再びGDIリソースを確保してオブジェクトを新規作成し直してどうぞ にとって不幸なことに、この惑星では現実のアーキテクチャーも現実の外部世界も移ろいゆくもの(mutable)なんじゃ : デフォルトの名無しさん (ワッチョイ ff81-WAMQ) [sage] 2017/12/10(日) 11:12:25.71:H4MY5dOm0 変更をstateとしてカプセル化しろという示唆だボケ 外からガチャガチャいじんな : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/10(日) 12:09:09.67:jGY33Ae80 setForgroundColor(Color color)がカプセル化の結論ではありえないとする根拠は? だいたいstateにせよ(=mutableな要素をオブジェクト内に受け入れる)というのはから話が逸れているわけだが : デフォルトの名無しさん (ワッチョイ bfe7-F7Qh) [sage] 2017/12/10(日) 12:12:47.79:dE7pgqu30 背景色が暗かったら前景色を明るくして見やすくするとかそういう制御はしないのか? 最初はしないつもりでも後から必要になったりリクエストが来たりしたらどうするんだ? 前景背景以外の第3の色のパーツが増えたらどうする? アルファチャンネルが増えて半透明時はその裏側の色にも合わせて制御する必要が出てきたらどうする? インターフェースってのは中のデータメンバーの下駄と雪駄とかそんなレベルで決めるもんじゃないんだよ お前の言ってることは次元が低すぎるんだよ : デフォルトの名無しさん (ワッチョイ bfe7-F7Qh) [sage] 2017/12/10(日) 12:17:16.01:dE7pgqu30 前景色をいつでも外部から独立に変えて良いオブジェクトならそれで構わないけど それをforeColorメンバ変数があってそのsetterだから〜みたいな程度の低い議論で決めたんだとしたら 後で大変な苦労をすることになるだろうな 今のお前はしなくてもお前の同僚やユーザーや1年後のお前がな : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/10(日) 12:22:05.28:jGY33Ae80 >背景色が暗かったら前景色を明るくして見やすくするとかそういう制御はしないのか? >最初はしないつもりでも後から必要になったりリクエストが来たりしたらどうするんだ? >前景背景以外の第3の色のパーツが増えたらどうする? >アルファチャンネルが増えて半透明時はその裏側の色にも合わせて制御する必要が出てきたらどうする? setForgroundColor()を備えた低水準なクラスを実現した上で、 ユーザーの好みや用途に合わせた高水準なクラスをかぶせる階層設計にする なんでもかんでも詰め込んだクラス設計はアレくね?の好みなのかもしれんが : デフォルトの名無しさん (ワッチョイ bfe7-F7Qh) [sage] 2017/12/10(日) 12:28:25.79:dE7pgqu30 どういう設計にするかって話じゃなくて 設計を決めるのに最初からデータメンバーと下駄雪駄ありきで考えるのをやめろって言ってるんだが 何一つ伝わってないようで残念だ : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/10(日) 12:35:10.91:jGY33Ae80 >設計を決めるのに最初からデータメンバーと下駄雪駄ありきで考えるのをやめろって言ってるんだが はげどうで、それにたいするスレ内に書かれた情報を前提とする答えが階層設計( 何一つ伝わってないようで残念だ ていうか 程度では可能性を列挙しているだけで何を作るべきなのか指定したことにならない 仕様提示も無しにクラスの詳細を設計せよとかどんだけ〜 : デフォルトの名無しさん (ワッチョイ bfe7-F7Qh) [sage] 2017/12/10(日) 13:12:04.65:dE7pgqu30 427は例えば前景背景色を変えるインターフェースを作るときに考慮しなきゃならなそうな事のほんの一例を挙げただけで 詳細設計しろなんて誰も言ってないんだが 最初に考慮すべきことはそもそも何を実現するつもりなのか、そのためにどういう操作を受け付けなきゃならないかであって、 privateのデータメンバーにbgColorがあるとかはどうでもいいし、必要ならそんなもの後から変えたっていいんだよ それをデータメンバーありきで脳死で下駄雪駄付けてたら、そのメンバーの存在が公開外部仕様になって簡単に変えられなくなるんだよ お前さんの例で言うと、不用意にsetFgColor()とsetBgColor()を公開したら、ずっとその2つを外部から独立に自由に変えられるようにしなきゃならなくなるの 本当にそうするべきなのかは、それこそオブジェクトの本来の目的次第で判断することでしょ? 「とにかくデータメンバーにbgColorとfgColorがあるんだからひつようなんです(^q^)」とか抜かしてたらバカで無能だと思うだろ? お前さんは今そう見られてるんだよ : デフォルトの名無しさん (ワントンキン MM7f-WAMQ) [sage] 2017/12/10(日) 14:15:05.98:g5uppkbRM buttonならselectedとかdeselectとか、たぶんそんなインターフェース。 color露出とか正気の沙汰ではない。 : デフォルトの名無しさん (ブーイモ MMcf-fHNr) [sage] 2017/12/10(日) 15:16:20.19:F4es0CSwM setColor()なんてグラフィックコンテキストのIFならありがちだけどな。 : デフォルトの名無しさん (ワントンキン MM7f-WAMQ) [sage] 2017/12/10(日) 15:18:46.15:g5uppkbRM 世の中のたくさんの組織で使われたりするような汎用ライブラリならね : デフォルトの名無しさん (ドコグロ MMdf-45bT) [sage] 2017/12/10(日) 15:25:40.37:NqbakoNJM そういうライブラリならあり得るんだろ? 要件もわからんのに頑なに否定する ID:dE7pgqu30 がアホと言う結論でよろしいか? : デフォルトの名無しさん (ワッチョイ 178a-ufcO) [sage] 2017/12/10(日) 15:48:26.65:wfBy9YeJ0 別にset〜Colorなんて普通にありだろ 変なふうに頭固いやついるね : デフォルトの名無しさん (ワントンキン MM7f-WAMQ) [sage] 2017/12/10(日) 16:44:14.11:g5uppkbRM 正直GUI系は納期に晒されやすいということもあってコードが汚くなりがちではある それが劣っているとか優れてるとかではなく気の毒ではある : デフォルトの名無しさん (ワッチョイ 9fb3-45bT) [sage] 2017/12/10(日) 18:11:24.37:o/NiMYKz0 設計の話してるのにいきなり実態を語るとか話をそらそうと必死 って言うことでいい? : デフォルトの名無しさん (ワッチョイ 9fbd-aiou) [sage] 2017/12/10(日) 18:26:16.47:jGY33Ae80 >最初に考慮すべきことはそもそも何を実現するつもりなのか、そのためにどういう操作を受け付けなきゃならないかであって、 いやまさしくおっしゃるとおりで、 グラフィック部品のforeground colorとbackground colorは通常の表示ハードウェアの元では独立に変えられるブツなのだから ハードウェア寄りなwrapperレベルの実装だとそれぞれ独立に露出するのが正しいという結論に… (独立に弄っても内部状態の不整合は起きない。これがgetter/setterを公開してもよい基準である >お前さんの例で言うと、不用意にsetFgColor()とsetBgColor()を公開したら、ずっとその2つを外部から独立に自由に変えられるようにしなきゃならなくなるの ならない 階層設計の意味がわかっていない? 漏れのやり方で起きることは、Foreground colorとbackground colorの2つを公開したクラスXのインスタンスをいつでも作れるというだけで、 上位水準で要求される操作のみを受け付けるべくXを利用して実現するクラスYではsetFgColor()とsetBgColor()を隠蔽することができる。 (単にYが使うXのインスタンスをprivateにすれば良い ていうか話を進める前にID:dE7pgqu30にはの2行目にお答えいただいてからにしていただきたいですのう… (の話が途中から変わっていることには目をつぶって差し上げても良いので : デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ) [sage] 2017/12/10(日) 21:00:01.55:dss2es1x0 そもそもセッターゲッター書きまくらなきゃいけなくなるんだけどどうすればいいの?っていう話では : デフォルトの名無しさん (ワッチョイ 9f34-Xhpf) [sage] 2017/12/10(日) 22:12:52.74:EDTuXCra0 ゲッターロボ発進! : 320 (ワッチョイ b7e3-qmOZ) [sage] 2017/12/10(日) 22:58:45.66:PwvSHD+00 俺が発端だとしたら書きまくるなんて言ってない 楽に書く方法導入されたかな〜って聞いただけ されてないのは分かったからもういけど : デフォルトの名無しさん (ワッチョイ 9fa6-ANK3) [] 2017/12/11(月) 01:44:26.10:NuxLjCLE0 残念ながら標準C++には無いねー。 俺の周りでも結構欲しがる人多いんだけど、何が良いのかいまいちわからないなー。 使うときに、変数を扱うような記法で、関数コールが出来るってだけだよね… 一文字減るだけで何が嬉しいのか… : 35歳 (ワッチョイ ffb3-5E0R) [age] 2017/12/11(月) 02:10:24.19:OsSLt9Cy0 Bronze取りました : デフォルトの名無しさん (ワッチョイ ffe8-G2/9) [sage] 2017/12/11(月) 02:22:58.14:EZmt4HgD0 自分は邪道なのを承知でマクロ使っちゃってるよ : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/11(月) 03:18:45.90:hyRKWo4y0 それについては to.setBackgroundColor(from.getTextColor()); より、 to.backgroundColor = from.textColor; の方が読みやすいから俺は否定はしない : デフォルトの名無しさん (ワッチョイ ffe8-G2/9) [sage] 2017/12/11(月) 05:56:14.63:EZmt4HgD0 後でカラーが変更されたときに処理を追加したくなったときに面倒 : デフォルトの名無しさん (ワッチョイ ff6e-MWkS) [] 2017/12/11(月) 06:39:45.71:HCkpHsZ20 という、そもそもの話に行き着くだけだな : デフォルトの名無しさん (ドコグロ MM5b-45bT) [sage] 2017/12/11(月) 07:14:44.24:WHbaikY8M 話の流れも読めないのかよ... : デフォルトの名無しさん (ワッチョイ ff6e-MWkS) [] 2017/12/11(月) 09:57:11.02:HCkpHsZ20 セッターとゲッターをいちいち作るのかという単純極まる話に流れもへったくれもあるか : デフォルトの名無しさん (ワッチョイ bfe9-dpgO) [sage] 2017/12/11(月) 10:07:16.62:hFPLSsub0 だからプロパティが欲しくなるって話なのに…… : デフォルトの名無しさん (ワッチョイ ff6e-MWkS) [] 2017/12/11(月) 10:33:50.92:HCkpHsZ20 欲しけりゃ作れというCいやBから続くハングリー精神を忘れた主張はいくら喚いても無駄だ : デフォルトの名無しさん (ワッチョイ bfe9-dpgO) [sage] 2017/12/11(月) 10:49:40.94:hFPLSsub0 話の流れ汲む気ねえな : デフォルトの名無しさん (ワッチョイ ff6e-MWkS) [] 2017/12/11(月) 11:08:12.08:HCkpHsZ20 そういうおまえさんも、ここ僅か数レスの流れから目を背けているだろうが : デフォルトの名無しさん (ワッチョイ 9f21-61ea) [] 2017/12/11(月) 15:05:22.47:HQgmyRrm0 不変条件がある→カプセル化(class) 不変条件がない→露出(struct) では駄目なの? : デフォルトの名無しさん (スップ Sd3f-aZj5) [sage] 2017/12/11(月) 15:51:19.48:iSg/oyC4d ちょっと違う : ◆QZaw55cn4c (ワッチョイ 9f60-T0Wg) [sage] 2017/12/11(月) 15:57:28.19:maeT9tJH0 try-with-resources/java.lang.AutoCloseable, java.io.Closeable/Java7〜 ですか : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/12(火) 01:07:23.70:taGmyuVj0 お前は とを100回読み直して出直してこい : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-qmOZ) [sage] 2017/12/12(火) 02:35:53.90:DNRoqyK/0 そうか。 : デフォルトの名無しさん (ワッチョイ bfe9-dpgO) [sage] 2017/12/12(火) 02:55:44.93:aBOGkUwZ0 >そういうおまえさんも、ここ僅か数レスの流れから目を背けているだろうが 何回読んでもこのレス最強すぎて草生える : デフォルトの名無しさん (ワッチョイ ffe8-G2/9) [sage] 2017/12/12(火) 05:03:27.37:GtRyHF+60 何に腹立ててるのかまったくわからん : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/12(火) 05:49:25.74:taGmyuVj0 いいから読み返してこい。自分がどんなトンチンカンなレス返したのか自覚するまで帰ってくるな。 : デフォルトの名無しさん (ワッチョイ ffe8-G2/9) [sage] 2017/12/12(火) 06:04:07.77:GtRyHF+60 すまんマジでわからん お手数ですが改めて解説して頂けますか? : デフォルトの名無しさん (ドコグロ MMeb-45bT) [sage] 2017/12/12(火) 07:20:11.15:55mcEBCKM プロパティっつーのは > to.backgroundColor = from.textColor; みたいなコードでも.backgroundColorが変更された時の処理が書ける って話だから : デフォルトの名無しさん (スッップ Sdbf-6IXG) [] 2017/12/12(火) 08:10:48.13:R9+tEHmjd プロパティが常に左辺値として扱えるってなら面白いけど、ただのシンタックスシュガーなんでしょ? : デフォルトの名無しさん (ワッチョイ 9f34-Xhpf) [sage] 2017/12/12(火) 08:35:44.42:CHSzHMzZ0 getsetなんちゃらより視覚的にわかりやすくて見た目がスッキリして汚物感がない : デフォルトの名無しさん (ワッチョイ bfe9-dpgO) [sage] 2017/12/12(火) 08:37:10.49:aBOGkUwZ0 あえて無視してるとかじゃなくてガチでわからんのか…… : デフォルトの名無しさん (ワッチョイ 9f34-Xhpf) [sage] 2017/12/12(火) 08:43:59.80:CHSzHMzZ0 getsetの()が汚物というかオムツ感 : デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ) [sage] 2017/12/12(火) 08:47:30.57:L7nvt31i0 to.backgroundColor.blue = 100; みたいに書いても意図通りに動かないからクソ : デフォルトの名無しさん (ワッチョイ bfe7-XaMH) [sage] 2017/12/12(火) 09:13:40.57:y1kEZ39i0 to.backgroundColor.blue(100); でいいだろ。 : デフォルトの名無しさん (ワッチョイ 9fa4-MWkS) [] 2017/12/12(火) 11:33:45.81:UV42xOWp0 あるデータメンバをpublicにしたほうが合理的と判断したならすればいい そこでいちいち教条主義にとらわれて見えない不安と戦うアフォは 物事の分別がわかるようになるまでROMってろ : デフォルトの名無しさん (ドコグロ MMeb-45bT) [sage] 2017/12/12(火) 13:18:37.14:55mcEBCKM また流れの読めない奴が来たのかよ... しかもドヤ顔 w > 物事の分別がわかるようになるまでROMってろ お前がな : デフォルトの名無しさん (ワッチョイ 9fa4-MWkS) [] 2017/12/12(火) 15:47:21.47:UV42xOWp0 読むに足る話をしていたつもりなら相当なコレ@だな : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/12(火) 16:11:45.84:taGmyuVj0 コンパイルエラーになるなら問題ないやろ : デフォルトの名無しさん (ワッチョイ ffe8-G2/9) [sage] 2017/12/12(火) 16:41:48.86:GtRyHF+60 それをC++でどうするかって話でしょ… そんなことで上から煽ってたんか 付き合う必要なかったな : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/12(火) 16:52:53.52:taGmyuVj0 お前がレスしたコメントが 「それをC++でどうするかって話」に読めたならマジで救いようがないな。 何がどうなってお前の中ではそうなったのか知らんがそれを外に出してくんな。 : デフォルトの名無しさん (ドコグロ MM5b-45bT) [sage] 2017/12/12(火) 17:02:23.33:WkB3oGfAM > それをC++でどうするかって話でしょ… そんな話しはしとらんし 引っ込みつかなくなってるのかマジで話の流れが読めないのかわからんけどしばらくROMっとけ : デフォルトの名無しさん (ワッチョイ 9f34-Xhpf) [sage] 2017/12/12(火) 17:07:23.51:CHSzHMzZ0 どうにかする以前に現状の標準規格ではどうにもならない : デフォルトの名無しさん (ワッチョイ ffe8-G2/9) [sage] 2017/12/12(火) 18:02:57.84:GtRyHF+60 お前こそスレタイ見直した方が良いぞ 引っ込みつかなくなってんのはどっちだか : デフォルトの名無しさん (ガックシ 068f-dpgO) [sage] 2017/12/12(火) 18:23:53.63:T04lnVIC6 ID:GtRyHF+60が悪い : デフォルトの名無しさん (ワッチョイ 9fa4-MWkS) [] 2017/12/12(火) 18:29:31.41:UV42xOWp0 要するに俺様の個人的好みがああだから言語もそれに合わせるべきと言っているだけ 周りと全会一致状態ならともかく批判的な意見に攻撃的な態度をとるだけ どっから見ても単なる厨二病の自己チュー : デフォルトの名無しさん (ワッチョイ 9fa4-MWkS) [] 2017/12/12(火) 18:31:17.47:UV42xOWp0 まあ言論の自由なんだけどね やってて恥ずかしおまへんか? : デフォルトの名無しさん (ワッチョイ bfe7-F7Qh) [sage] 2017/12/12(火) 18:32:23.92:bXatM7Na0 setの方はプロキシオブジェクト噛ませば無理矢理できなくもない(やる価値もない) getはどうやっても無理 : デフォルトの名無しさん (ガックシ 068f-dpgO) [sage] 2017/12/12(火) 18:33:41.16:T04lnVIC6 批判的な意見(噛み合ってはいない) : デフォルトの名無しさん (ドコグロ MM4b-45bT) [sage] 2017/12/12(火) 18:45:22.28:v/pth21HM マジで引っ込みつかなくなってるんだな... そろそろプロパティが導入されたかなぁ? されないねぇ、何が嬉しいのかよくわからんけど メソッドが読み書きするより読みやすいでしょ 変更時に処理を追加できないだろうが 一同 ファッ!?、ヤベーよ、こいつ w : デフォルトの名無しさん (ワッチョイ 9fb3-Hxc3) [sage] 2017/12/12(火) 19:01:09.51:0sOBySxq0 プロパティはmsvcだと普通に使えるし、実装できない訳じゃないでしょ つーかclangもマイクロソフト独自のプロパティに対応してるらしいとの噂 : デフォルトの名無しさん (ワッチョイ 9776-aZj5) [sage] 2017/12/12(火) 19:45:15.77:3ZbnKJrs0 C++と関係ない話題をふっておいて噛み合ってないとか : デフォルトの名無しさん (ワッチョイ 9776-aZj5) [sage] 2017/12/12(火) 19:46:18.45:3ZbnKJrs0 本気で疑問なら調べる手段はいくらでもあるのに : デフォルトの名無しさん (ワッチョイ 9776-aZj5) [sage] 2017/12/12(火) 19:47:35.03:3ZbnKJrs0 一応、手間を惜しまなければ代入くらいは出来るけど : デフォルトの名無しさん (ワッチョイ 9776-aZj5) [sage] 2017/12/12(火) 19:48:28.11:3ZbnKJrs0 代入とか書くと変な勘違いするヤツがいるか 設定 : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/12(火) 19:55:46.38:taGmyuVj0 出来るけどテンプレート引数やautoと相性悪いからあまりオススメしない : デフォルトの名無しさん (ワッチョイ bfe9-dpgO) [sage] 2017/12/12(火) 20:05:47.73:aBOGkUwZ0 ヤベー奴怒りの4連投 : デフォルトの名無しさん (ワッチョイ 9776-aZj5) [sage] 2017/12/12(火) 20:34:17.86:3ZbnKJrs0 おすすめしないのは当然 C++なんだから : デフォルトの名無しさん (ワッチョイ 778a-ufcO) [sage] 2017/12/12(火) 20:43:27.77:9uFqgfKJ0 バカですか? : デフォルトの名無しさん (ワッチョイ 778a-ufcO) [sage] 2017/12/12(火) 20:46:50.47:9uFqgfKJ0 C++でC#みたいなプロパティがサポートされる日は永遠に来ないからもう駄々こねるな : デフォルトの名無しさん (ワッチョイ 57eb-F7Qh) [sage] 2017/12/12(火) 20:55:07.83:+86TRiAH0 頭いっちゃってる奴らがサイドショーでもやってんのか? : デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ) [sage] 2017/12/12(火) 22:04:04.36:L7nvt31i0 C#以外のメジャーな言語に採用されたら有用性を認めてやる : デフォルトの名無しさん (ワッチョイ 579f-F7Qh) [sage] 2017/12/12(火) 22:20:18.74:4svaTAZj0 JavaScriptにはあるよ。 便利だが、基本的にアジャイルで頻繁に変更する環境向けであり、 C++みたいにゴリゴリやりたいところに向くかは少し疑問。 とはいえ、俺は導入に賛成だが。 : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/12(火) 22:24:39.30:taGmyuVj0 Python Kotlin Swift : デフォルトの名無しさん (ワンミングク MM7f-WAMQ) [sage] 2017/12/12(火) 22:27:11.88:jXjdcIPTM Swiftにはないよ。 Computedプロパティと.Netのプロパティを同じだと思ってるなら一から勉強し直したほうがいい。 : デフォルトの名無しさん (ワッチョイ 9780-yV1O) [] 2017/12/12(火) 22:30:05.03:taGmyuVj0 Storedプロパティに限定した話だったの? 俺そっち要らない派だからどうでもいいんだけど。 : デフォルトの名無しさん (ワッチョイ 9fb3-45bT) [sage] 2017/12/12(火) 22:32:20.45:Vo2kP02L0 読んでまだそんなこと言ってるなら相当ヤベーぞ w : デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ) [sage] 2017/12/12(火) 22:32:51.93:L7nvt31i0 C#のプロパティはカプセル化の範疇を超えた使い方する奴が出てきてからクソだと思い始めた : デフォルトの名無しさん (ワッチョイ 579f-F7Qh) [sage] 2017/12/12(火) 22:43:30.63:4svaTAZj0 可能であれば例よろしく。URLでいい。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-qmOZ) [sage] 2017/12/12(火) 22:44:50.18:DNRoqyK/0 いや、どんな機能もクソな使い方をする奴は少なからずいるよ。 そんなもんだよ。 : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/12(火) 22:48:51.09:qpuoD4bc0 C言語にバックポートしてほしい機能はテンプレート一択。 何を言っているのかわからないと思うが。。。 : デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ) [sage] 2017/12/12(火) 23:10:28.93:L7nvt31i0 プロパティ便利すぎとか言ってる同僚が書いた200行を超えるゲッターや初回だけ挙動が違うセッターなど publicな変数も混ざってる環境なため普通の変数だと思ってあっちこっちで参照していたら気づかないうちに激重になっていた どこがボトルネックになっているのか探すのに時間がかかった : デフォルトの名無しさん (スププ Sdbf-dpgO) [sage] 2017/12/12(火) 23:13:23.41:5Fm7w0SJd 仮にもc++使いならばそんなアホみたいな事例を気にする必要はなかろう : デフォルトの名無しさん (ワッチョイ 579f-F7Qh) [sage] 2017/12/12(火) 23:43:37.47:4svaTAZj0 サンクス。 > どこがボトルネックになっているのか探すのに時間がかかった 多分これがC++がプロパティを入れない理由だと俺は思っているが、 今のC++の勢いならどうせいつか入れるのだろうとも思っている。 > 200行を超えるゲッター これはあまり行儀はよくないが、 メソッドとフィールドの文法的区別をなくすのがgetterでもあるから、 正しいといえば正しい。 > 初回だけ挙動が違うセッター これはコンストラクタでやるべきものをセッターに持って来たことが悪い。 つまり、セッターの問題ではない。 セッター文法がこれを誘発するかと言えば、関係ないと思うから、プログラマその人の問題だと思う。 で、C++は一応「プログラマは正しくプログラミングできる」という前提だから、 どうせプロパティもいつか入れるんでしょ、と思っている。 その時には、「getterには重い処理を入れない」等の掟が出来るのだと思う。 : デフォルトの名無しさん (ワッチョイ 9f12-F7Qh) [sage] 2017/12/13(水) 00:53:04.54:3t1TagYk0 =での演算子のオーバーロードがsetterに相当する その辺りを自動でやってほしい 他、+=やらの演算子も余りにも面倒なのでどうにかしてほしい pythonではそういう軟弱な特殊メソッドがあるが軟弱なのでC++の感触には合わない さらに困難で不可解な記述方法を編み出すべきだ : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/13(水) 00:56:28.78:SIeP7pZg0 どういうポリシーだよ。 : デフォルトの名無しさん (ワッチョイ 57b3-wlc6) [sage] 2017/12/13(水) 01:04:25.30:VGyxWnO70 C#についてはサッパリだけど、調べたらかなり便利そうな機能だね、処理を差し挟めるというか? C++で「stringのように振る舞う値」を作ろうとするとまずその型から定義しなきゃならないし 継承でやっつけることも可能だけど、問題点もある さらに「intのように振る舞う値」となると継承不可だし、各種演算子をいちいち定義しないといけない 型を定義したいわけじゃなく、ある型のインターフェースを持ちつつアクセス時の処理を入れたいだけ、ってのは 確かにC++にも欲しくなるね 大した例えじゃないと思うけど、いずれ似たようなことが出来るようになったらいいなぁ : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/13(水) 01:07:04.42:SIeP7pZg0 プロパティって要するに、セッターは1引数の関数って場合が多いような。ゲッターは引数無しの関数。 カッコつけないだけで可読性がそこまで上がるもんかと思う。 : デフォルトの名無しさん (ワッチョイ 77c3-Jck7) [sage] 2017/12/13(水) 01:13:16.30:YFiH9SDO0 window.SetSize(display.GetSize() * 0.5); よりは window.size = display.size * 0.5; の方が読みやすいとは思う : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/13(水) 01:21:21.53:SIeP7pZg0 んー。まぁそうかも。 : デフォルトの名無しさん (ワッチョイ 1f7e-qmOZ) [sage] 2017/12/13(水) 02:17:03.25:65/6bu6P0 ゲッターのポインタをどうやって取るつもりだよ : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/13(水) 02:38:27.29:SIeP7pZg0 なぜそんな使い方をするのかよくわからん。 参照でパクってくるのはできないの? : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/13(水) 02:39:20.43:SIeP7pZg0 あー、あーるばりゅーに&つけるのってダメなんだっけ? : デフォルトの名無しさん (ワッチョイ 9f34-Xhpf) [sage] 2017/12/13(水) 02:47:06.16:4G0mfW720 そうそう、汚物感が皆無なのよねえ : デフォルトの名無しさん (スププ Sdbf-LVSJ) [sage] 2017/12/13(水) 04:41:15.27:pnzC2QZad Kotlinはなんか注目度高いらしいな スマートニュースか何かで見た : デフォルトの名無しさん (ワッチョイ 9fb3-45bT) [sage] 2017/12/13(水) 04:58:13.06:0JTwiv230 非標準だけどC++Builderが一番求めるものに近いと思う ttp://support.embarcadero.com/jp/article/35947 : デフォルトの名無しさん (ワッチョイ ffb4-Nf6k) [sage] 2017/12/13(水) 05:38:19.00:qfWT6RzB0 ここで議論してる人って、↓の話は当然理解してるんだよね。 ttp://ufcpp.net/study/miscprog/accessor.html#proxy : デフォルトの名無しさん (ドコグロ MMdf-45bT) [sage] 2017/12/13(水) 06:53:58.70:55R6yVv7M : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/13(水) 07:47:58.27:SIeP7pZg0 ttps://ideone.com/x4WLWF これを見てくれ、こいつをどう思う? 大分前にここにも上げたやつ。 こういうこともできなくないけど、標準で持ってほしいのはわからんでもない。 まぁ、カッコ一個減ったくらいでそんなに変わるかどうかはビミョーなところ。 : デフォルトの名無しさん (ワッチョイ ff81-WAMQ) [sage] 2017/12/13(水) 07:51:32.20:DfK3Pc7X0 Storedとも違う : デフォルトの名無しさん (ワッチョイ 57b3-wlc6) [sage] 2017/12/13(水) 13:46:22.45:VGyxWnO70 プロパティっぽいことは実現できてると思うんだけど、 いかんせん型が違うから、例えばstringのメンバ関数呼び出しは出来ないし 暗黙のキャストが効かない場面でエラーになるんじゃないかな やっぱ言語でサポートしてくれないと限度がある と思ったけどT.P + T.Pとかが通って吹いた : デフォルトの名無しさん (ワッチョイ 9f6e-MWkS) [] 2017/12/13(水) 13:59:38.92:VOF5ieE50 リファレンサなんか大昔からみんなやってることじゃん 誰かがいみじくも言っていたようにカッコ1つ減らすためだけに そんな馬鹿げた努力(言語の複雑化も含む)がしたいのか : デフォルトの名無しさん (ガックシ 068f-dpgO) [sage] 2017/12/13(水) 15:06:44.35:QqhuUsRS6 努力はしたくないけど言語の複雑化は構わんなあ もっと複雑な機能いっぱいあるし、プロパティなんてかわいいもんでしょ : デフォルトの名無しさん (ワッチョイ 57b3-wlc6) [sage] 2017/12/13(水) 15:21:57.42:VGyxWnO70 何を偉そうに言ってるのかわからんが、俺も似たようなことやってきた上で言ってる カッコ1つ減らすためだけに、ってのはちょっと矮小化しすぎ がどのような意図でリンク貼ったのかはわからんけど、 最後の一文でプロパティ便利だなっつってる 本質はアクセス時に処理を差し挟めることだと思うんだが クラステンプレートで仲介するのは、新しい型を定義することになるから ものすごい遠回りになるし、どうしてもC++の型システムと相性が悪い まぁ必須とは言わないけどあれば便利だなとは思う : デフォルトの名無しさん (ワッチョイ 9f6e-MWkS) [] 2017/12/13(水) 16:32:25.04:VOF5ieE50 お前さんの理想は、お前さんが書くべきコードそのものが コンパイラにビルトインで入っていることなんだろうな すごい儲かりそうだね : デフォルトの名無しさん (ワッチョイ 17b3-qmOZ) [] 2017/12/13(水) 19:43:44.26:YreXArfE0 [][][] [][][] [] [][][][] [][] [][][][][] [][] [][] [] [][][][][] [] [][][][ [][][][][] [][ [][] [] [][][] [] [][][] [] [][][][] [] [] [][][][][][ [] [][][] [][] [][] [] : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/13(水) 20:46:34.93:SIeP7pZg0 えー?stringのメンバ呼べない?const参照してるだけだから呼べない道理はないはずだけど。 まぁ、マズそうなら一回static_castかませないとダメなんだっけ?うーむ。 まぁ、難しいことは考えずサンプルとして見てくれ。 : デフォルトの名無しさん (ドコグロ MM4b-45bT) [sage] 2017/12/13(水) 21:13:48.92:S9dgblRYM へ戻る バカはなぜか同じ話題を延々ループさせたがるんだよな w : デフォルトの名無しさん (ワッチョイ 57b3-wlc6) [sage] 2017/12/13(水) 21:31:45.92:VGyxWnO70 Test<std::string> T; size_t a = T.P.size(); とかやった場合の話ね(もちろん明示・暗黙に関わらずキャストされたらいける 継承使えばメンバ関数もいけるだろうけど・・・・そうすると多分、スライシング等の問題が・・・・ そんなこんなでプロパティか、それに近い機能入ってもいんじゃね?と思っただけw : デフォルトの名無しさん (ワッチョイ 5704-IpD3) [sage] 2017/12/13(水) 21:44:08.48:SIeP7pZg0 推論してくれないのか。そこまで便利にはできてないか。 ちょっとアイディア無いのでこれまでだな。 色々教えてくれてありがと。 : デフォルトの名無しさん (ワッチョイ 579f-F7Qh) [sage] 2017/12/13(水) 22:11:05.97:uoR9h+SG0 つかな、使ってもないのに使用感を予想で語るの止めい。 そりゃ話がループする。 他言語には普通にあるんだし、使ってる奴のレポートを待てばいいんだよ。 利点は、フィールド←→メソッドを変更するときに、記述変更が少なくて済むことだ。 場合によっては戻すこともあるから、その時も助かる。 従って、アジャイルで既に動いているコードを変更しまくるときには便利だが、 ウォーターフォールで基本書いて終わりなら大してメリットはない。()が付くだけだ。 これとは別に、JavaScriptの場合はフィールドとメソッドを区別してないので、オーバーヘッド無しの遅延評価にも使える。 (プロパティ《関数ポインタ、ここで遅延評価する》をフィールド《遅延評価の結果》で直接上書きできる) C++でこれをやる場合、オーバーヘッドが生じるし、そもそもメソッドコールでいい。 結果、C++には記述上のメリットしかなく、 これはIDEが進歩してリファクタリング出来るようになれば解消する話でもある。 だからそれを待つ、という作戦もありだろうし、 それ以前にIDE側のプリプロセッサでpropertyをサポートしてしまえ、ってのもありだと思う。 まあ、あれば便利程度で、あまり本質的ではない機能なのも事実だ。 : デフォルトの名無しさん (ワッチョイ 1234-lyuv) [sage] 2017/12/14(木) 00:16:08.20:Sy/1Y7rD0 お前がそう思うならそうなんだろう お前の頭の中ではな 貴様の意見も机上の空論でしかない : デフォルトの名無しさん (ワッチョイ 1f04-j1NZ) [sage] 2017/12/14(木) 00:18:30.33:NkgoJhJp0 そんなにつぶし合いしたいかね。 収集しようとしてるのに。 : デフォルトの名無しさん (ワッチョイ 926e-zS+j) [] 2017/12/14(木) 05:16:24.25:fPDEs5uN0 C++を他言語にしたがるやつはどこにでも湧くダニみたいなもんだ #define begin { #define end } : デフォルトの名無しさん (ドコグロ MM32-jdna) [sage] 2017/12/14(木) 06:45:49.20:TMq/DGv/M なぜ爺は終わった話をクドクド繰り返すのか : デフォルトの名無しさん (ワッチョイ dee7-c48R) [sage] 2017/12/14(木) 08:20:19.27:pBHCaQE50 c++でIF公開するときはメソッドに統一する、でおしまいの話なのにな。 : デフォルトの名無しさん (ワッチョイ de9f-X0LG) [sage] 2017/12/14(木) 09:02:11.18:pZXI1dL80 文句だらだらなら、GCCを自分で仕様を追加しちゃえよ! : デフォルトの名無しさん (ワッチョイ 926e-zS+j) [] 2017/12/14(木) 09:19:33.65:fPDEs5uN0 かつて禿がcfrontを作ったようにか : デフォルトの名無しさん (スププ Sd32-gSDb) [sage] 2017/12/14(木) 09:28:38.36:GokG4kFPd 自分で仕様を追加したGCCとかのマクロとたいして変わらんくない? いや公式GCCにアクセプトされるなら話は別だけど : デフォルトの名無しさん (ワッチョイ 926e-zS+j) [] 2017/12/14(木) 09:38:06.70:fPDEs5uN0 追加する仕様によるな 禿がCに「追加した」機能はマクロじゃ済まない : デフォルトの名無しさん (スプッッ Sd97-xd0q) [sage] 2017/12/14(木) 16:58:09.71:WeKtNL6id そんなにプロパティ欲しいとは思わんが、単純な値操作ならメンバの参照返すメソッド作れば事足りるんじゃね? それよりconst地獄ってホントにあるの? const使いまくってて体感したことないんだけと。 : デフォルトの名無しさん (ワッチョイ 926e-zS+j) [] 2017/12/14(木) 17:04:38.91:fPDEs5uN0 メンバの参照を返したらprivateにしている意味が完全に失われるぞ : ◆QZaw55cn4c (ワッチョイ b260-4mDj) [sage] 2017/12/14(木) 17:24:38.06:/7Md6pmo0 上流が const を渡してきたら、下流は逆らえない、ってことでは? : デフォルトの名無しさん (ワッチョイ 9ee7-iA8U) [sage] 2017/12/14(木) 19:25:05.92:xcUKDly80 自作クラスのメンバ関数にconst全く付けてないタコが聞きかじりで中途半端に付け始めて 「メソッド呼べない!ムキー!このconstってやつ使えねー」ってパターンが大半だと思ってる : デフォルトの名無しさん (ワッチョイ 1f7f-mLIQ) [] 2017/12/14(木) 19:27:31.22:gH71C6kZ0 const地獄になるってことはそのコードが間違ってるって事だからな 全部直せ : デフォルトの名無しさん (スップ Sd52-JSy5) [sage] 2017/12/14(木) 20:46:09.64:j4kcZFN2d 本気で言ってるなら、それは経験が足りない : デフォルトの名無しさん (ワッチョイ c27e-mLIQ) [sage] 2017/12/14(木) 20:54:50.42:5ihghoP20 副作用の少ないきれいな設計ならconstだらけになるはずだが : デフォルトの名無しさん (ワッチョイ 1681-J6jR) [sage] 2017/12/14(木) 20:59:02.63:tSRk6cie0 これ : デフォルトの名無しさん (ワッチョイ dfb3-hRZ1) [sage] 2017/12/14(木) 21:01:34.68:jk+byjKr0 No.1 1 2 3 4 5 2 3 4 5 6 No.2 1 2 3 4 5 2 2 2 2 2 3 3 3 3 3 No.3 3 4 5 6 7 : : No.n というtxtファイルがあり。No.〇の次の行に整数が記入されている(何行あるかわからない) 整数の左からx1[ i ][ k ]、y1[ i ][ k ]、x2[ i ][ k ]、y2[ i ][ k ]、A[ i ][ k ]の配列にそれぞれ書き込み もし次の行整数があればi+1をしまたそれぞれの配列に整数を書き込む もし次の行に整数がなければ(No.の行)k+1を次の行にいき整数をそれぞれの配列に書き込む。 これをNo.nまで繰り返す。 このプログラムをfopenを使ってプログラムどなたかつくってくれませんかー? : デフォルトの名無しさん (ワッチョイ 1234-lyuv) [sage] 2017/12/14(木) 21:33:16.59:x8KqPZST0 宿題くらい自力でこなせ脳筋 : デフォルトの名無しさん (ワッチョイ 1f04-j1NZ) [sage] 2017/12/14(木) 21:45:38.41:NkgoJhJp0 ヒント。 いずあるふぁっていう関数どっかにあるから、先頭にアルファベットがあったらスキップや。 それと宿題スレって落ちたの? : ◆QZaw55cn4c (ワッチョイ b260-4mDj) [sage] 2017/12/14(木) 21:52:05.84:/7Md6pmo0 宿題スレへ ttp://mevius.2ch.net/test/read.cgi/tech/1456908378/ : デフォルトの名無しさん (ワッチョイ 12e7-X0LG) [sage] 2017/12/15(金) 00:18:39.45:sms7d93l0 const指定って下流が対応してないのに上流からやり始めるのは愚だよね : デフォルトの名無しさん (ワッチョイ 92a6-ak+6) [] 2017/12/15(金) 09:14:14.38:2/eH7rfa0 どういう意味? : デフォルトの名無しさん (ドコグロ MMea-c48R) [sage] 2017/12/15(金) 11:53:03.91:H37RU5hVM プロパティよりも、deleteするとコンパイルエラーになるポインタが欲しい。 : デフォルトの名無しさん (ワッチョイ 926e-zS+j) [] 2017/12/15(金) 11:55:37.18:GBd6F7vt0 std::shared_ptr<int> a{std::make_shared<int>()}; delete a; //C2440 : デフォルトの名無しさん (ワッチョイ c27e-mLIQ) [sage] 2017/12/15(金) 12:49:17.55:kmVVqq510 あるじゃん : デフォルトの名無しさん (ドコグロ MMea-c48R) [sage] 2017/12/15(金) 15:39:48.05:H37RU5hVM int*に代入できたっけ? : デフォルトの名無しさん (ワッチョイ 926e-zS+j) [] 2017/12/15(金) 16:14:46.51:GBd6F7vt0 後出しはきたねえよ : デフォルトの名無しさん (ドコグロ MMea-c48R) [sage] 2017/12/15(金) 18:44:29.20:H37RU5hVM スマポも「ポインタ」とは言うけどさぁ deleteの文脈で言っているんだから、オブジェクトは想定外だわ。 : デフォルトの名無しさん (ワンミングク MM42-B5ak) [] 2017/12/15(金) 18:52:20.56:6JtV0wHMM そんなもん何の役にたつのか解らんわ : デフォルトの名無しさん (ワッチョイ 9ee7-iA8U) [sage] 2017/12/16(土) 06:47:52.76:7q5uIVqU0 所有権のないスマポ(?)ならstd::observer_ptrがもうすぐ入るから待っとけ : デフォルトの名無しさん (ワッチョイ 9ee7-iA8U) [sage] 2017/12/16(土) 06:55:04.26:7q5uIVqU0 ところでスマポのコンストラクタの書き方ってどっちがいいの? class Foo { std::shared_ptr<Bar> bar; Foo(): bar(new Bar(42, 100.5, "xxx")){} Foo(): bar(std::make_shared<Bar>(42, 100.5, "xxx")){} }; 下の書き方されてるのよく見るけどこれって 「newがあるのにdeleteがない!111」って発狂するアホコードチェッカを黙らせる以外にメリットなんかあるの? : デフォルトの名無しさん (ワッチョイ d6fa-+wuU) [sage] 2017/12/16(土) 07:12:04.23:WjCT6x4J0 ↓の備考よめ ttps://cpprefjp.github.io/reference/memory/make_shared.html : デフォルトの名無しさん (ワッチョイ 9ee7-iA8U) [sage] 2017/12/16(土) 07:21:37.50:7q5uIVqU0 あーなるほど new隠しだけのための砂糖だと思ってましたありがとう ということはunique_ptrの場合はメリットなしでいいんですかね : デフォルトの名無しさん (ワッチョイ ff78-H+11) [] 2017/12/16(土) 07:29:56.22:O0/bhlaM0 俺もmake_uniqueはいらねーよなぁって思ってたけど使った方が例外安全なんだとよ : デフォルトの名無しさん (ワッチョイ 1f7f-mLIQ) [] 2017/12/16(土) 09:33:48.78:RDTsLSUc0 むしろmake_uniqueが11に無くてキレた : デフォルトの名無しさん (ワッチョイ a7b3-mLIQ) [sage] 2017/12/16(土) 22:08:09.44:d76HZF+i0 point cloud libraryというライブラリを読んでいます。 kdtreeクラスはsearchクラスをパブリック継承しており、 kdtreeクラスの冒頭で、searchクラスのデータメンバやメンバ関数の一部をusingしています。 これはどういう意味があってやっているのか教えて頂けないでしょうか。 : デフォルトの名無しさん (ワッチョイ 1f04-j1NZ) [sage] 2017/12/17(日) 10:02:55.57:E0u1MAW90 IO2D楽しみだなー。 ウニファイドコールシンタックス復活しないかなぁ。 : デフォルトの名無しさん (ワッチョイ ef04-RjCm) [] 2017/12/17(日) 18:17:59.07:4ntht7mR0 質問です。 #include "classB.h" class A{ private: B* b; public: void set(B* b){this->b=b;} B* get(){return b;} }; クラスAのメンバーにクラスBのポインタとアクセサがあります。 しかし、set()を使わずに、get()を使ってメンバーにアクセスできてしまいます。 例:a->get()=b; ポインタではなく、複製したインスタンスを返すことも考えたのですが クラスBのサイズが非常に大きいため、 可能であれば複製はしたくありません。 どうかご助力をお願い致します。 : デフォルトの名無しさん (ワッチョイ 1234-lyuv) [sage] 2017/12/17(日) 18:32:55.64:bOEVzYTT0 const B *get() const {略} : デフォルトの名無しさん (ワッチョイ 52a2-mLIQ) [sage] 2017/12/17(日) 18:33:44.11:+uUy0Dc30 get()を消す : デフォルトの名無しさん (ワッチョイ ff78-H+11) [] 2017/12/17(日) 18:37:56.02:iUXjeeD00 B* b = nullptr; B* get(){ assert(b != nullptr); return b;} こうでもしとけばいいよ : デフォルトの名無しさん (ワッチョイ c27e-mLIQ) [sage] 2017/12/17(日) 18:39:29.53:UdjbeEad0 const B* get() { return b; } あとこうでは *(a->get()) = b; : デフォルトの名無しさん (ワッチョイ 1234-lyuv) [sage] 2017/12/17(日) 18:41:17.67:bOEVzYTT0 エスパーだがポインタみたいな動作させたいなら operatorー>() を定義すりゃいいけど上の説明だとなにがやりたいのか具体的にわからないね : デフォルトの名無しさん (ワッチョイ 12e7-X0LG) [sage] 2017/12/17(日) 18:48:28.66:1SGX9IGl0 に賛成 : デフォルトの名無しさん (ワッチョイ ef04-RjCm) [] 2017/12/17(日) 18:56:03.60:4ntht7mR0 ありがとうございます! なるほどconst、普段しっかり使っていないツケが来ましたorz ただ、そのままだと代入できなかったので、勉強してきます。 ありがとうございましたm( _ _)m すみません、ご指摘の通りです。ありがとうございます! : デフォルトの名無しさん (ワッチョイ 9ee7-iA8U) [sage] 2017/12/17(日) 19:23:44.84:KvIrn8eu0 Bがなんだかわからないけどsetがものすごくまずいように見える : デフォルトの名無しさん (ワッチョイ a7b3-mLIQ) [sage] 2017/12/17(日) 19:40:09.05:S5+bbMRX0 [][] [] [][][][] [][] [] [][][][][ [ ][] [ : デフォルトの名無しさん (ワッチョイ 921b-zGdT) [] 2017/12/17(日) 20:35:52.39:eYk9JmcH0 gtkmmググっても英語含めて17ページしかないんだわ(´・ω・`) : デフォルトの名無しさん (ワッチョイ 72bd-E651) [sage] 2017/12/17(日) 20:39:57.73:wJJJkdkz0 オブジェクトの内部データへの変更を許すフリーパスを外に与えるようなsetterやgetterはNG、 しかしあまり杓子定規にそれを言い立てるとファイルハンドルとかもgetterで返して良いかどうかビミョーに… ファイルはオブジェクトの内部データではないお客様という解釈で乗り切る? : デフォルトの名無しさん (ワッチョイ af39-zS+j) [] 2017/12/17(日) 22:46:35.33:AbfI68c80 いいわけないだろ 教条主義にとらわれていると そういうことがわからなくなる : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 1e6f-mLIQ) [sage] 2017/12/17(日) 23:31:57.93:vupC7usA0 フレンドクラスに見せるようにする方が例外扱いが明記される分だけマシ : デフォルトの名無しさん (ワッチョイ 12e7-X0LG) [sage] 2017/12/17(日) 23:42:11.90:1SGX9IGl0 フレンドはカプセル化を推進する良い子 : デフォルトの名無しさん (ワッチョイ 1f04-j1NZ) [sage] 2017/12/17(日) 23:55:34.47:E0u1MAW90 クラスオブジェクトソリッド : ◆QZaw55cn4c (ワッチョイ b260-E7Ol) [sage] 2017/12/18(月) 00:10:07.85:gAjOsIcg0 accelerated c++ をぼちぼちやっています。 にもバグがあり、正しくは ttps://ideone.com/sK4aJ2 一行を最後まで読んでしまったのなら、即座にループを抜けないといけない なんだか最近 while() の使い道がなくなってきたように思えるのです…いつも for(::) { break; } ばかり書くようになってしまった… : デフォルトの名無しさん (ワッチョイ 1f04-j1NZ) [sage] 2017/12/18(月) 00:12:01.54:3Ix8qMew0 停止性を担保するのは良いことだと思うが。 結局無限ループからのブレークしか使ってないなら頭整理してWHILEに置き換えるようにするなぁ。 : ◆QZaw55cn4c (ワッチョイ b260-E7Ol) [sage] 2017/12/18(月) 00:20:14.98:gAjOsIcg0 停止性の確認を行った後、余計なことを一切してはいけない、という制約が加わると 途中判定の break 脱出以外に手がない、と考えています あまり思い出したくないんですが、DOS/Windows の findfirst/findnext なんかも似た類かと : ◆QZaw55cn4c (ワッチョイ b260-E7Ol) [sage] 2017/12/18(月) 00:25:32.54:gAjOsIcg0 ああ、こういうのはアリでしたね コメントありがとうございます。 ttps://ideone.com/9r8rZe : デフォルトの名無しさん (ワッチョイ d298-Ll2t) [sage] 2017/12/18(月) 02:19:29.29:+LmA4Igx0 アプリケーション上で確保されたヒープ領域を追跡したいです。 operator new/delete と allocator を弄ればできると思い調査していたころ 「プログラミング言語C++ 第4版」P997 に 「標準ライブラリのすべてのコンテナは、newによってメモリを確保して、deleteによって解放するデフォルトアロケータを(デフォルトで)もっている」 と書かれていました。つまり、new をグローバルでオーバーロードすれば追跡可能です。 実際、手元のコンパイラでは std::vector のメモリ確保と解放を追跡できました。 ここまでの内容は規格で保証されている事柄ですか? 実際のアプリケーションに組込むことを考えています。 : デフォルトの名無しさん (ワッチョイ 1f04-j1NZ) [sage] 2017/12/18(月) 02:36:31.34:3Ix8qMew0 メモリの確保形式はさすがに実装依存でしょ。 最近リーヌスがブチ切れたらしいけど。 メモリーオーダーコンシウムとかの話は今やってるところ。 : デフォルトの名無しさん (ワッチョイ b780-AB+M) [] 2017/12/18(月) 03:43:10.43:vrG0ZJDQ0 >アプリケーション上で確保されたヒープ領域を追跡したいです。 つgperftools : デフォルトの名無しさん (ワッチョイ 1233-4pIx) [sage] 2017/12/18(月) 07:43:59.76:dmyIL21e0 std::allocator<T> (The default allocator) についての [allocator.members] で規定されてる。 > Remarks: the storage is obtained by calling ::operator new, but it is unspecified when or > how often this function is called. 標準コンテナにアロケータを指定しなければ std::allocator が使われるから、それでいける。 「実際のアプリケーション」に変なものが混ざってなければね。 : デフォルトの名無しさん (ワッチョイ 1f04-j1NZ) [sage] 2017/12/18(月) 07:50:02.22:3Ix8qMew0 アロケータ自作してスパイアロケータとか作ればそれっぽいことはできるね。 標準コンテナに限っては。 : デフォルトの名無しさん (ドコグロ MMb3-c48R) [sage] 2017/12/18(月) 09:32:57.28:MJYUqHBuM ポインタを返さずに、ハンドルクラスを定義してそのオブジェクトを返す。 : デフォルトの名無しさん (ブーイモ MMdb-ak+6) [] 2017/12/18(月) 12:58:24.39:D6kxD+M8M グローバルnew/deleteのオーバーロード自体は、規格で許されてるので合法。 ただ、注意深くやらないと吹っ飛ぶ。 とある処理系の標準ライブラリで、ユーザー回避不可能な不具合に当たったこともあった。 : デフォルトの名無しさん (ワッチョイ c623-w1i6) [sage] 2017/12/18(月) 22:55:31.76:agqFpTM+0 596です 規格での確認と該当箇所のコーディングを確認しました ありがとうございました! : デフォルトの名無しさん (ワッチョイ af36-zS+j) [] 2017/12/19(火) 13:02:14.85:MoA6J0CR0 うむ、ご苦労。 : デフォルトの名無しさん (ワッチョイ af36-zS+j) [] 2017/12/20(水) 13:42:16.45:63AN+5MK0 sleep_untilで「何秒後」ではなく「何時に」という絶対時刻を指定する方法なんだけどさ mktimeとfrom_time_tを使う方法しかないかね? なんかダサくてやなんだけど : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH) [sage] 2017/12/20(水) 21:12:15.08:hN2yOtWhd 標準では、無い。 : デフォルトの名無しさん (ワッチョイ b723-54vE) [sage] 2017/12/20(水) 22:19:15.39:WOX+3yjn0 IDE:Visual Studio Express 2015 for Windows Desktop 浮動小数点モデル設定:Fast Math コンパイルモード:Release wWinMain関数内で wchar_t str[ 16 ]; DirectX::XMMatrixOrthographicLH( 1.0f, 1.0f, 0.0f, 1.0f ); for( int i = 0;; i++ ) { float f = i; if( f > 0.0f ) break; swprintf_s( str, L"%f", f ); } と書くと、swprintf_sの結果が、期待される0.0ではなく、-0.0になります。 swprintf_sの行と上のif文の行を入れ替えると、0.0になります。 XMMatrixOrthographicLHがなかったり、Debugモードだったり、 Fast MathではなくデフォルトのPreciseだったりすると、 行の入れ替え関係なく0.0。 -0.0になるときは、何が始ま・・・起こってるんです? : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd32-wvVH) [sage] 2017/12/20(水) 23:03:24.90:hN2yOtWhd アセンブリーを確認せよ。 : デフォルトの名無しさん (ワッチョイ c27e-mLIQ) [sage] 2017/12/20(水) 23:17:41.47:c/xU5Mb/0 コンパイラ固有のことなんか聞かれても誰も分からないと思うぞ : デフォルトの名無しさん (ワッチョイ cfeb-W85D) [sage] 2017/12/21(木) 00:36:33.65:0IseKiC90 floatの符号部が0だったり1だったりしてるのかと 最適化でswprintfだけが残って、fの値は+0.0f以下のゼロということで-0.0にしてくれてるのかなあ : 607 (ワッチョイ 0323-of2o) [sage] 2017/12/21(木) 01:46:36.50:tbJ2Dsuk0 やっぱそれですよね(汗) やはりそうですか・・・。 詳しい方なら、何が起こっているかだいたい読めたりしないかなと期待しましたw たしかに、符号ビットがコロコロしてそうな感じですよね。 ちなみにif文で比較する定数は1.0fとか2.0fでも結果は同じになりますので、 swprintf_sだけが残るためではないですね。 : デフォルトの名無しさん (ワッチョイ cf3f-tRgI) [] 2017/12/21(木) 08:39:02.54:ZD2kjVCM0 thx : デフォルトの名無しさん (ワッチョイ ff1b-7a68) [] 2017/12/21(木) 14:03:31.02:T6iOcz130 Gtkmmは4.0も出たのに、詳しい解説ページは2.4のママ・・・(´・ω・`) でも俺はAPI見ながら頑張るぜ! : デフォルトの名無しさん (ワッチョイ 6fe7-7LW1) [sage] 2017/12/21(木) 18:40:48.26:AI7F/oif0 今だとC++でGUIやるならQtがデファクトだと思うからそっちの方がいいんじゃない? GTK使えと命令されてる立場ならすまん : デフォルトの名無しさん (ワッチョイ bf7e-buzn) [sage] 2017/12/21(木) 18:46:54.04:/u9OILN10 Qtとかでかいしライセンスは高いし謎の独自拡張を使わされるわでかなり使いにくいんだが そのくせ特別使いやすいわけではない : デフォルトの名無しさん (ワッチョイ 6fe7-7LW1) [sage] 2017/12/21(木) 18:49:02.51:AI7F/oif0 でもネットや本の情報は多そうじゃない? まあ用途も聞かずに頭ごなしに勧めるもんではなかったなすまんかった : デフォルトの名無しさん (オッペケ Sr87-HMcx) [sage] 2017/12/21(木) 19:13:54.15:EBoVfuUTr 俺はwxWidgets派 : デフォルトの名無しさん (ワッチョイ ff98-v0tg) [sage] 2017/12/21(木) 20:31:35.72:6wHUNN6P0 gtk3一択! : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/22(金) 06:33:38.27:Mb+deFNF0 io2dまだかー。 ウニファイドコールシンタックス復活せよ〜。 : デフォルトの名無しさん (スプッッ Sd1f-k/7O) [sage] 2017/12/22(金) 06:57:32.16:v69hnew3d 基本的な動作について知りたい msgrcvは、msgsndされた瞬間にキューがたまるから、キューが追加されたと同時に待機状態をやめて動き出す これであってる?? あと、msgsndする先やmsgrcvで確認する先はmsggetで動的に確保された番号を知らないといけない こうであってるかな? : デフォルトの名無しさん (ワッチョイ a378-STQK) [] 2017/12/22(金) 10:05:15.55:H4ZK8i5q0 知らんわその関数の実装者に聞いてくれよ : デフォルトの名無しさん (ワッチョイ 6fe7-7LW1) [sage] 2017/12/22(金) 23:15:32.80:lfzRUYy60 システムコールの話ならLinux板にでも行け なんかのライブラリの話なら知ったこっちゃないわ : デフォルトの名無しさん (ブーイモ MM67-Wig1) [] 2017/12/23(土) 00:52:53.65:KIhrhFKZM TRON系のOSかな? : デフォルトの名無しさん (ワッチョイ 339f-mAIl) [] 2017/12/23(土) 09:50:06.14:DCeTZoHD0 これ実行すると0と2が表示されるので一応は問題ないですか?汚いとは思うけど。 int main(void) { vector<int> vec; vec.push_back(0); vec.push_back(1); vec.push_back(2); for(vector<int>::iterator ite = vec.begin(); ite != vec.end();){ if(*ite == 1){ vec.erase(ite++); printf("num: %d\n", *ite); }else{ printf("num: %d\n", *ite); ++ite; } } return 0; } : デフォルトの名無しさん (ワッチョイ 7f25-I6sZ) [sage] 2017/12/23(土) 10:06:15.95:pfQ4NECA0 >vec.erase(ite++); ite = vec.erase(ite); にすべし あと、次の行のprintfは削除で : デフォルトの名無しさん (ワッチョイ 7f25-I6sZ) [sage] 2017/12/23(土) 10:16:01.07:pfQ4NECA0 おっと、質問は問題あるかどうかだった。 結論から言うと、問題はある。 0〜2までではなく0〜3までvectorに入れてから実行すれば、 まともに動作していないのは分かるはず。 : デフォルトの名無しさん (ワッチョイ 339f-mAIl) [] 2017/12/23(土) 11:00:02.97:DCeTZoHD0 やっぱこうしないとダメですね。 ite = vec.erase(ite); どうもでした。 : デフォルトの名無しさん (ワッチョイ 339f-mAIl) [sage] 2017/12/23(土) 11:17:57.62:DCeTZoHD0 一応はこれでもいけるってことですかね?削除した時は次の要素になるという理解でいいですか? for(vector<int>::iterator ite = vec.begin(); ite != vec.end();){ if(*ite == 1){ vec.erase(ite); }else{ ++ite; } } : デフォルトの名無しさん (ワッチョイ c3b3-buzn) [sage] 2017/12/23(土) 11:20:42.68:hf8FajHG0 eraceの戻り値が次のイテレータでは : デフォルトの名無しさん (ワッチョイ 339f-mAIl) [sage] 2017/12/23(土) 11:40:33.04:DCeTZoHD0 これlistとvectorでも違いました。 listだと++しないと正常に動作せず for(list<int>::iterator ite = lst.begin(); ite != lst.end();){ lst.erase(ite++); } vectorだと++すると上手く動作しない for(vector<int>::iterator ite = vec.begin(); ite != vec.end();){ vec.erase(ite); } でもeraseの戻り値取得するのが一番いいですね。 : デフォルトの名無しさん (ワッチョイ 7f25-I6sZ) [sage] 2017/12/23(土) 11:45:41.24:pfQ4NECA0 std::vector::eraseのリファレンスに、こう書いてある。 ttps://cpprefjp.github.io/reference/vector/erase.html 削除された要素またはそれ以降の要素を指すイテレータや参照は無効になる。 これによると、vec.erase(ite); 実行後にはiteが無効になることになる。 あなたの環境だと、たまたまiteが削除した次の要素になったのかもしれないが、 それがすべての環境で成り立つ保証はない。 : デフォルトの名無しさん (ワッチョイ 339f-mAIl) [sage] 2017/12/23(土) 12:08:32.26:DCeTZoHD0 基本的にはvectorは無効になるということですかね。 : デフォルトの名無しさん (ワッチョイ f32d-KysX) [sage] 2017/12/23(土) 12:13:38.89:GP4QGgkb0 そのinvalidationは既に取得してるiteratorに起こるやつでは? : デフォルトの名無しさん (ワッチョイ f378-tRgI) [] 2017/12/23(土) 12:16:58.11:82L7PCHk0 なんか変な説明だね vector<int> vec{0, 1, 2}; auto ite = vec.begin(); ++ite; vec.erase(ite); --ite; cout << *ite; //これでvec[0]にアクセスできそうに聞こえる 内容的にはこういうことなのに vec.m_head = realloc(vec.m_head, 2 * sizeof(int)); : デフォルトの名無しさん (ワッチョイ 339f-mAIl) [sage] 2017/12/23(土) 12:24:57.38:DCeTZoHD0 listだとこれで動くと思っていいのかな for(list<int>::iterator ite = lst.begin(); ite != lst.end();){ lst.erase(ite++); } : デフォルトの名無しさん (ワッチョイ cf5f-P2tI) [sage] 2017/12/23(土) 13:02:30.52:ncx5Vmyz0 eraseした時点で削除された要素のitrも無効だから--できないと思うけど、 別途確保しておいたitrは有効であるかのように読めるから、確かにおかしいね どうやら合法。 : デフォルトの名無しさん (ワントンキン MM9f-jmlw) [sage] 2017/12/23(土) 14:18:11.55:qpu4/MTSM そもそもこれ何してんの? 表示とともに要素を消したいならFILOなコンテナ使いなよ std::stackみたいな : デフォルトの名無しさん (ワッチョイ 339f-mAIl) [sage] 2017/12/23(土) 14:52:01.85:DCeTZoHD0 listはOKそうですか。 いやとくに意味はないです。ただvectorとlistで動きが違ったので気になりました。 : デフォルトの名無しさん (ワッチョイ cf8a-LdUP) [sage] 2017/12/23(土) 15:08:47.05:FpWOSq2z0 アホか eraseの戻り値が何のためにあると思ってるんだ : デフォルトの名無しさん (ワッチョイ 339f-mAIl) [sage] 2017/12/23(土) 16:15:50.16:DCeTZoHD0 eraseの戻り値使うのが一番いいのは分かったんですが 単にvectorとlistで動作が違うのが気になっただけです。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6f6f-buzn) [sage] 2017/12/23(土) 16:23:29.49:zbNC77HA0 vector だと要素の再配置が必要になるけど list はそうじゃないって話 : デフォルトの名無しさん (ワッチョイ ff61-Luxy) [] 2017/12/23(土) 17:51:30.26:eg9r3pR90 ttps://gabekore.org/vscode-c-windows ↑のサイトを見ながらCの開発環境を作っているのですがCの当たりから分からなくなってしまいました‥‥ 説明のユーザー設定というものがそもそも無かったです‥‥ただの設定を開いたらこの画面になったのですが、この右に書いたのは合ってるのでしょうか‥‥? このあとのDからはほんとによく分からなくなってしまいました‥‥この程度が出来ないなら、プログラミングなんて出来ないですよね‥‥(..;) 自分が不甲斐ないです‥‥-_- ttps://i.imgur.com/VH9Yt5X.jpg : デフォルトの名無しさん (ブーイモ MM67-P2tI) [sage] 2017/12/23(土) 18:33:23.06:wgR30Nr5M MacでもLinuxでも使えるVisual Studio Code Part2 [無断転載禁止]©2ch.net ttp://mevius.5ch.net/test/read.cgi/tech/1494638671/ : デフォルトの名無しさん (ワッチョイ 6f9f-2x/m) [sage] 2017/12/23(土) 19:22:40.52:e2jvvoOp0 削除する場合とそうでない場合の処理を分ければOK forでもwhileでもOK リストでもOK std::vector<int> vec{ 0, 1, 2 }; auto it = vec.begin(); while (it != vec.end()) { if (*it == 1) it = vec.erase(it); else it++; } for (auto n : vec) { printf("vec %d\n", n); } std::list<int> list{ 0, 1, 2 }; auto it2 = list.begin(); while (it2 != list.end()) { if (*it2 == 1) it2 = list.erase(it2); else it2++; } for (auto n : list) { printf("list %d\n", n); } : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/23(土) 20:28:00.26:0b4Aycyz0 根本的に勘違いしていると思うけどな。 × > eraseの戻り値使うのが一番いいのは分かったんですが ○ eraseの戻り値を使わなければならない(そうしないと意味がない) × > 単にvectorとlistで動作が違うのが気になっただけです。 ○ 戻り値を使えば同じソースコードになるように設計されている 何の為にイテレータを使うか分かっておらず、 イテレータ使えば効率が上がると勘違いしているJava鹿程度の知能なんだろ。 Linusが文句言っているのもこういう連中に対してなんだが。 : デフォルトの名無しさん (アウアウウー Sa67-bqMz) [sage] 2017/12/23(土) 20:52:04.70:qGqY4/PAa javaとかc#はイテレータで列挙してる最中に要素を削除できない 例外になる : デフォルトの名無しさん (アウアウウー Sa67-bqMz) [sage] 2017/12/23(土) 20:59:27.12:qGqY4/PAa C++ 使っててもLinusに馬鹿にされてるぞ C原理主義者(OSつくってるひとたち)はC++を馬鹿にして C++信者はCを馬鹿にする 滑稽だな : デフォルトの名無しさん (ワッチョイ 0f7f-QnTz) [sage] 2017/12/23(土) 21:12:36.34:rmLkS6yi0 規格書の文言そのままの説明だと思う。 vec.erase(ite)の段階でiteは無効になるのでそれ以降は未定義だからvec[0]にアクセスできる保証はないという意味になる。 vector::eraseで領域の再確保は発生しないので削除する要素以前のiteratorは無効にならない。 vectorのiteratorをポインタで実装していれば次の要素をさしてそうなものだけど、そうでない実装、例えば削除した分だけ自動的にずらして同じ内容を指し続けてくれたり、例外を投げて間違いを知らせてくれるとかがありうる? : デフォルトの名無しさん (ワッチョイ 6f9f-2x/m) [sage] 2017/12/23(土) 21:55:56.77:e2jvvoOp0 eraseの戻り値がなぜ必要かが分からないなら、vectorとiteratorの実装コード見て理解したらいいよ。 : デフォルトの名無しさん (ワッチョイ 0f7f-QnTz) [sage] 2017/12/23(土) 21:58:27.45:rmLkS6yi0 というか特定の値を消したかったらremove_if使おうぜ : デフォルトの名無しさん (ワッチョイ ff61-Luxy) [] 2017/12/23(土) 22:28:45.69:eg9r3pR90 c++についての質問です。 call by reference あるいは call by value にて引数の受け渡しを行う関数を利用して、乱数発生ルーチンを評価し、評価得点法による最適次数n(<5)を求める場合どのようなプログラミングになるのでしょうか? 教えてください。よろしくお願いします。 ここまではできたんですが、このあとどうすればいいでしょうか? ttps://i.imgur.com/XmuQ0Mw.jpg : ◆QZaw55cn4c (ワッチョイ 7f60-IIk+) [sage] 2017/12/23(土) 22:38:27.42:isxKYeOR0 「乱数の評価得点表」「最適次数」とはどういう概念ですか? 適切な資料を教えてください。 : デフォルトの名無しさん (ワッチョイ bf7e-buzn) [sage] 2017/12/23(土) 23:03:07.74:gq/ENgXB0 何故カメラで撮った : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/23(土) 23:09:46.07:0b4Aycyz0 まあその実装の方が初心者向けには妥当だな。 C#はそこら辺の「割とどうでもいいが無駄に複雑になる」部分を回避していていいと思う。 ただまあ、この方向(堅牢性、容易さ)のベストは実行時例外ではなくコンパイルエラーであり、 C#もまだそこまでは行けてない、ということだね。 なおJavaScriptはその辺保証してない。「出来るだけ止めない」方針だからね。 > もしプロパティがある反復で修正された後に訪問されたなら、ループにより公開される値は後の時点での値となります。 > 訪問される前に削除されたプロパティは、それから後には訪問されません。 > オブジェクトに対する反復が起きている中でそのオブジェクトに追加されたプロパティは、訪問されるかもしれませんし反復から省略されるかもしれません。 > ttp://https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for...in "> ttps://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for...in : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/23(土) 23:26:16.74:0b4Aycyz0 を理解できない馬鹿共は放置として、君の理解にも多分間違いがある。 > ありうる? 多分無い。 × vec.erase(ite)の段階でiteは無効になるのでそれ以降は未定義だから ○ vec.erase(ite)後にiteが指すのは「次の要素」であり、 元々指していた「削除された要素」ではないことを「無効」と表現している。 そしてそれ以前に「削除された要素」以降を指していた物も全部ずれるので、 「削除された要素またはそれ以降の要素を指すイテレータや参照は無効になる。」という表現になる。 つまり、この文字数であればきわめて妥当な表現であり、ゆとりが馬鹿すぎて理解できないだけ。 > vectorはシーケンスコンテナの一種で、各要素は線形に、順序を保ったまま格納される。 > ttps://cpprefjp.github.io/reference/vector.html つまり、ド頭から密に詰められていることを規定されているので、 削除すれば当然次の要素が入るに決まっているし、 (これは君は正しく理解しているが)reallocはなされないし、 vec[0]についてもアクセス時点での先頭要素が取得できるに決まっている。←多分君はここを勘違いしている : デフォルトの名無しさん (アウアウウー Sa67-bqMz) [sage] 2017/12/23(土) 23:28:50.54:qGqY4/PAa c原理主義者はそぎ落とされたロジックにしか興味ない c++は彼らにとっては冗長なんだろう GNUのツールセットのコードをみてると納得いく しばらく見てると脳のワーキングメモリが不足しておかしくなりそうだ が、残念なことにifとフラグとマクロ使いまくりの糞コードにも見える : デフォルトの名無しさん (ワッチョイ ff12-7LW1) [sage] 2017/12/23(土) 23:37:21.27:GYIu1tWX0 どうでもいいが知恵袋とのマルチだな : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/23(土) 23:51:11.43:0b4Aycyz0 オススメのツール(ソース)ある?見てみるから。 URLあれば助かる。 : デフォルトの名無しさん (ワッチョイ cf81-jmlw) [sage] 2017/12/23(土) 23:53:25.60:Rr/nHXks0 横レスだけどgrepとか結構すごいぞ : デフォルトの名無しさん (ワッチョイ bf7e-buzn) [sage] 2017/12/23(土) 23:57:45.94:gq/ENgXB0 そこら辺は古すぎるので現在の常識とは異なる場合があると思うけど : デフォルトの名無しさん (ワッチョイ ff12-7LW1) [sage] 2017/12/24(日) 00:00:12.41:ZACWf2Ud0 std::vector::erase - cppreference.com ttp://en.cppreference.com/w/cpp/container/vector/erase >Invalidates iterators and references at or after the point of the erase, including the end() iterator. 翻訳には肝心のモンが抜けてるんじゃあねえのか? 複数形のsとか : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/24(日) 00:06:07.20:buA98p4W0 サンクス。見てみているが、まずGNUはこのコーディングルールがな… ちなみにこれ、今時ハイライト(色づけ)されないのは何とかならないのかね。 ttp://git.savannah.gnu.org/cgit/grep.git/tree/src/grep.c : デフォルトの名無しさん (ワッチョイ cf81-jmlw) [sage] 2017/12/24(日) 00:10:15.35:M6vPWOvg0 そう思うなら、今の常識に照らして書き直してあげたら? パフォーマンスあがるならマージしてもらえるぞ : デフォルトの名無しさん (ワッチョイ bf7e-buzn) [sage] 2017/12/24(日) 00:13:30.13:4npOP+p60 Linusはプログラマの頂点ではないしGNUは最も優れたプロジェクトではない 既に手本にならない部分は多い : デフォルトの名無しさん (ワッチョイ 0f7f-QnTz) [sage] 2017/12/24(日) 00:15:10.13:CHij32pE0 >元々指していた「削除された要素」ではないことを「無効」と表現している。 そうなの? 規格ではclearとかresizeとかでも無効になる(invalidate)と書いてあるしeraseがそれと何か違うようにも見えないし、無効なiteratorをdereferenceするのは未定義だとも書いてあるように見えるけど。 >つまり、ド頭から密に詰められていることを規定されているので、 >削除すれば当然次の要素が入るに決まっているし、 >(これは君は正しく理解しているが)reallocはなされないし、 >vec[0]についてもアクセス時点での先頭要素が取得できるに決まっている。←多分君はここを勘違いしている ポインタならそうだろうけどvectorのiteratorでも規格上保証されてるの? ttps://stackoverflow.com/questions/45758659/does-stdvectorerase-really-invalidate-the-iterator-at-the-point-of-erase : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/24(日) 00:17:58.25:buA98p4W0 > including the end() iterator. いや、これが抜けてる方が大問題だろ。 まあ広い意味では「それ以降の要素を指すイテレータ」に含まれるとも言えなくもないが、 これについては明記されるべきだね。 しかしこれだとイテレート中に削除していいのか?と心配になるが、 直ぐ下のサンプルコードで「偶数番目の要素を削除」してるからいけるんだろうね。 てか初心者なら、この辺のサンプルコードから出発した方がいいよ。いろんな意味で。 ちゃんと公式な使い方してあるし。(当然戻り値をイテレータに代入している) > // Erase all even numbers (C++11 and later) > for (auto it = c.begin(); it != c.end(); ) { > if (*it % 2 == 0) { > it = c.erase(it); > } else { > ++it; > } > } > ttp://en.cppreference.com/w/cpp/container/vector/erase : デフォルトの名無しさん (ワッチョイ bf7e-buzn) [sage] 2017/12/24(日) 00:17:58.87:4npOP+p60 何で興味もないものに時間をかけてやらなきゃならない ちゃんと動いていれば十分 : ◆QZaw55cn4c (ワッチョイ 7f60-IIk+) [sage] 2017/12/24(日) 00:19:42.01:WikwUycQ0 std::vector の場合はこう、std::list の場合はこう、とかいう知識はあまり意味がないのではないか? erace() したら、erace() したところおよびその後を指していたイテレータ(=ポインタ)は使えなくなる、くらいで一括するのが妥当だと考える。 : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/24(日) 00:23:13.30:DlgRUKPs0 細かい場合分けするのはプログラミング的に悪だと思ってる。 統合的に丸っと処理できると気持ちいい。 なのでちょっと粒度を上げてSTLの作法というものを考えた方がイイ。 : デフォルトの名無しさん (ワッチョイ cf81-jmlw) [sage] 2017/12/24(日) 00:39:36.50:M6vPWOvg0 無理ならそういえばいいのに : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/24(日) 00:49:18.45:buA98p4W0 つか、君は何に文句を言っているのだ?そこにそのまま書いてあるだろ。 > When describing iterator invalidation, > the C++ standard takes the simplifying assumption that iterators refer to elements, > and a valid iterator value always refers to same element. > Invalidating references, pointers or iterators to an element all follow the same rules. (The exception is the end iterator). > > Clearly references or pointers to the erased element are invalidated by a call to erase, > thus under the standard's simple rules so are all iterators. > It could have described what new element must be moved in place abd substituted what iterators refer to, > but the writers of the standard chise not to go there. They instead simply dictated the iterator was invalid. eraseでvecが移動しないことは保証されてるだろ。 当然vec[0]は削除後の先頭要素を指す。 ただしそもそも削除後にイテレータを再代入してないコートについては知るかボケだろ。 それについてもそこにモロに書いてあるし。 そのページは俺の言い分を全く書いてあるような物なんだが、何が言いたいんだ? : デフォルトの名無しさん (ワッチョイ cf8a-LdUP) [sage] 2017/12/24(日) 01:05:17.93:pxiUCfvD0 そもそもeraseするならvectorなんか使うな。よっぽど小さいvectorじゃない限り eraseは縮小操作だからリアロケーションは起きないけどその時何が起こるのか理解してるのか? 理解できないならお前はC++を使えないやつ : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/24(日) 01:25:35.46:buA98p4W0 こんなもんじゃね?みたいな感じなんだが。 決して理解したわけではなく、雰囲気だけしか見てないが。 C特有のstructの嵐でもなく、 今ならIDEが警告出してくるほどのif文等のネストもなく、 意味不明なマ黒魔術使いまくりでもない。 グローバルが嵐になっているが、これはCUIツールだから大して問題ないし。 色が付いてないのとコーディングルールがアレなので詳しく読む気にならないが、 整形ツール通せば結構読めるコードのような気がする。 : デフォルトの名無しさん (ワッチョイ 0f7f-QnTz) [sage] 2017/12/24(日) 01:43:03.65:CHij32pE0 >eraseでvecが移動しないことは保証されてるだろ。 >当然vec[0]は削除後の先頭要素を指す。 誰もそんなことは問題にもしてないんだが大丈夫? 偉そうなことを言ってる割には全然読めてないんだなあ : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/24(日) 01:44:55.52:buA98p4W0 日本語でおk : デフォルトの名無しさん (ワッチョイ 0f7f-QnTz) [sage] 2017/12/24(日) 02:04:36.00:CHij32pE0 から読み直してこい。俺も言葉を省略したが文脈上まさか読み間違う人がいるとは思わなかったんだ。 : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/24(日) 02:08:57.97:buA98p4W0 韓国人死ね : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/24(日) 02:11:04.69:DlgRUKPs0 ん?これは痛い。 : ◆QZaw55cn4c (ワッチョイ 7f60-IIk+) [sage] 2017/12/24(日) 02:15:08.39:WikwUycQ0 ite = vec.begin() ++ite; ite = vec.erase(ite); --ite; であれば ite == vec.begin(); は保障できるが、 vec.erase(ite) とした場合の ite の値は、コンテナ vec のどこかを指している保障はないのでは? したがって、--ite もどこを指しているか保障がないのでは? 典拠を示してほしい : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/24(日) 02:19:46.66:DlgRUKPs0 イテレータを削除したときあり得る処置。 一個目。 メモリの再確保相当のことをして再構築する。 二個目。 尻尾の要素をムーブして詰めて最後の要素を開ける。 このどっちかだと思う。 2個目だとイテレータのロストはしないかもしれないが、 1個目だとアドレスが変わっちゃうのでイテレータが保持しているアドレスは無効。 両方あり得るのでeraseの戻り値はちゃんと受け取ろう。 : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/24(日) 02:38:56.42:buA98p4W0 お前もちゃんと読めよ > 戻り値 > 削除された要素の次の要素を指すイテレータを返す。 > そのような要素が存在しない場合は、end()を返す。 > さらに、削除された要素以降の要素の数と同じ回数のTのムーブ代入演算子が呼ばれる。 > ttps://cpprefjp.github.io/reference/vector/erase.html つかC++にはGCねえんだよ Java鹿死ね : デフォルトの名無しさん (ワッチョイ 6fe7-7LW1) [sage] 2017/12/24(日) 02:50:37.41:3RxhFT7A0 規格にきっちりかっちり書いてある挙動について あり得る処置(キリッ とか抜かして適当な憶測垂れ流す奴がいるんだな : デフォルトの名無しさん (ワッチョイ cfe8-HMcx) [sage] 2017/12/24(日) 02:59:23.68:Vn0hcFlX0 なんか話が混ざってる気がするけど、eraseに渡した引数のイテレータの話じゃないの? : デフォルトの名無しさん (ワッチョイ 0f7f-QnTz) [sage] 2017/12/24(日) 03:05:24.20:CHij32pE0 >○ vec.erase(ite)後にiteが指すのは「次の要素」であり、 >元々指していた「削除された要素」ではないことを「無効」と表現している。 とか書いちゃう人が言っても説得力ないけどねw : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/24(日) 05:55:00.21:DlgRUKPs0 GCどっから出てきた。韓国人といい。話が飛躍しすぎ。 : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/24(日) 06:05:35.39:DlgRUKPs0 小出しにしないでブッコンで行け。 : デフォルトの名無しさん (ワッチョイ ff34-bbRz) [sage] 2017/12/24(日) 09:02:08.85:LF0oxcI10 昔のvectorは同一メモリ上にデータが配置されていることは保障されていなかったから昔の環境でなにか作る場合は注意したほうがいい。 そういう処理系が存在するのかどうか疑問だけど。 : デフォルトの名無しさん (ワッチョイ f378-tRgI) [] 2017/12/24(日) 10:15:11.27:QEOGdK3r0 俺の論旨は保証ねえだろなんだが だからreallocを持ち出した 典拠というのがあるなら631で 俺はそれを変だと言っている : デフォルトの名無しさん (ワッチョイ f378-tRgI) [] 2017/12/24(日) 10:18:18.02:QEOGdK3r0 え?? 昔ってどのくらいのことを言っている? そもそも連続領域でなければリストと同じ特性になってしまい 配列であることのメリットが完全に失われるだろ ポインタの配列になっていて実体はばらばらでもよいということならわかるが : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/24(日) 10:26:48.95:buA98p4W0 横だが。 ソース見ろとよく言っている奴が居るので偶には、ってやってるんだが、 どこにあるかわかりにくい上に何だかなあ、なコードなんだが。 とりあえずこれでいいのか? ttp://https://gcc.gnu.org/onlinedocs/gcc-4.6.2/libstdc++/api/a01116_source.html "> ttps://gcc.gnu.org/onlinedocs/gcc-4.6.2/libstdc++/api/a01116_source.html そしてiterator.cがどこにあるか分からないという、、、 同様の奴もいるが、あまりオススメはされてない。 ttps://stackoverflow.com/questions/4304783/c-vector-source-code > 00402 iterator > 00403 erase(iterator __position) > 00404 { > 00405 typename _Base::iterator __res = _Base::erase(__position.base()); > 00406 return iterator(__res, this); > 00407 } > 上側URL __position.base()ってのは<T>だから致し方なしかもしれんが、 確かにこれだとC使いにとってはC++は冗長すぎる。 > c原理主義者はそぎ落とされたロジックにしか興味ない > c++は彼らにとっては冗長なんだろう ( : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/24(日) 10:56:02.77:DlgRUKPs0 C++は厳密な定義を始めたのはここ最近の話で昔はほぼ実装に丸投げしてた。 これは、きゃするのように仮想コンピュータを定義しないでやってきたツケだな。 ぼんやりとコンピュータっていうものの抽象化イメージだけで進んできた。 あと、C++はわからないけど、Cはとあるコンピュータに依存するものは規格に入れない決まりになってたと思う。 : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/24(日) 12:00:47.90:buA98p4W0 韓国人2号も死ね つかお前はが(お前)向けであることをまず理解しろ 日本語が不自由なら死ね : デフォルトの名無しさん (ワッチョイ cf8a-LdUP) [sage] 2017/12/24(日) 12:03:39.37:pxiUCfvD0 この手のキチガイが湧いてくるまでになったか このスレももう終わりだな : デフォルトの名無しさん (ワッチョイ ffe7-Eeo6) [] 2017/12/24(日) 12:22:41.71:8qRcljjK0 流れ読んでないけどvec[0]が無効になるって発言したやつがいるから荒れてるの? : デフォルトの名無しさん (ワッチョイ 0f7f-QnTz) [sage] 2017/12/24(日) 12:29:05.39:CHij32pE0 真に受けてソース読んでるしw というか読めてないしwww 実装見ても理由なんて分かるわけないだろ 質問者の使ってる実装は動いてしまう実装なんだから : デフォルトの名無しさん (ワッチョイ 0f7f-QnTz) [sage] 2017/12/24(日) 12:30:40.54:CHij32pE0 誰もそんなこと言ってないけどそう言ったと勘違いした人はいたみたいね 荒れてる原因はみんなが少しずつテキトーなことを言ってるからじゃないか? : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/24(日) 12:34:48.10:DlgRUKPs0 俺が死んだら責任とってくれるんだよね? : デフォルトの名無しさん (スップ Sd1f-Owf0) [sage] 2017/12/24(日) 12:38:20.58:PCWcyI8Bd 遺書を書いて死んだらは事情聴取くらいはされるかもね : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/24(日) 12:39:11.17:DlgRUKPs0 軽いなぁ。 : デフォルトの名無しさん (スップ Sd1f-Owf0) [sage] 2017/12/24(日) 12:39:11.70:PCWcyI8Bd 「に死ねと言われたので死にます」 : デフォルトの名無しさん (ワッチョイ bfeb-7LW1) [sage] 2017/12/24(日) 12:41:53.58:/fWBjJNa0 このスレ頭おかしいのとプログラミングスキルでイキリ散らしたいのしかいねえな : デフォルトの名無しさん (ワッチョイ cf81-+obY) [sage] 2017/12/24(日) 12:42:40.51:kxsG1FMj0 令状出れば家宅捜査とPCの押収くらいはしそう : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/24(日) 12:58:57.63:DlgRUKPs0 俺は叩き合いが面倒だから理由つけてしゃべってるのに、問答無用で死ねはひどいよなぁ。 完璧超人じゃないから間違いの一つや二つくらいするよ。 なぁ。完璧超人。鏡見てみたらいいと思うよ。自分ぶっ殺したくなると思うよ。 : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/24(日) 13:42:19.40:DlgRUKPs0 寝る。 : デフォルトの名無しさん (ワッチョイ 73f3-tRgI) [] 2017/12/24(日) 19:53:35.49:DS5eJCmj0 > プログラミングスキルでイキリ散らしたい ニヤニヤ : デフォルトの名無しさん (ワッチョイ ff34-bbRz) [sage] 2017/12/25(月) 18:50:42.37:IE33Y1720 文献に書いてあることが全てだと真信してマニュアル通りに事を進めていくってまぁ受験とかならソレで良いかもしれないけどね。 物事の成り立ちを追っていくと決してその通りではないことも世の中にあるわけできちんとそういう所は汲み取っていかないとただ の鉄砲玉みたいな一番扱いが厄介な「無能な働き者」になってしまうよ。 特にこの業界では型にはまってばかりの柔軟性のないみたいな思想の違うものは徹底的に粛清しようとするワンマン堅物野郎は淘汰されるべきだと思うけどね。 : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/25(月) 18:53:10.54:8OH7D8YO0 日本語も英語も読めない不遜鮮人2人(,)が火病してるだけ。 話に脈略が無く、突然火病るのはいつものこと。 だから嫌われる。当然韓国人は排除されるべき。邪魔だから。 話が噛み合ってないのなら噛み合わせる努力をすればいいだけ。 それ以前に知りもしない奴がデタラメに回答する必要もない。 そして状況を知りたければ全部読めばいいだけ。 日本語が読めない馬鹿ゆとりも邪魔なだけ。 つまり、結論は、 韓国人マジで死ね ゆとりも死ね お前らが居なければどれだけ2chから雑音が減るか、少しは考えてみろ。 : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/25(月) 18:54:43.46:8OH7D8YO0 日本語でおk : デフォルトの名無しさん (ワッチョイ ffe7-89OF) [sage] 2017/12/25(月) 20:36:12.13:rz4NQFmP0 急にどうした? ヘイトはよくないぞ : デフォルトの名無しさん (ワッチョイ 4371-0jja) [sage] 2017/12/25(月) 22:20:40.14:PDFy/wgd0 初心者ですがGC付きの言語しかやったことないのでメモリ管理について質問させてください 例えば下記のようなコードでは、hoge関数で確保したvector用のメモリはGCがないためプログラムが終了するまで解放されないということでしょうか? 少なくともpiyo関数が終了するまでは残ってないと使えないですよね? vector<string> hoge(){ vector<string> v = {"hoge", "piyo"}; return v; } string piyo(){ vector<string> v2 = hoge(); string s = v2[0] + v2[1]; return s; } int main(){ cout << piyo(); } : デフォルトの名無しさん (ワッチョイ 7ff9-qy4x) [sage] 2017/12/25(月) 22:33:37.01:Ie/0MXd20 まずはスタックとヒープをググって調べてみるといいかも。 : デフォルトの名無しさん (ワッチョイ 4371-0jja) [sage] 2017/12/25(月) 22:47:27.89:PDFy/wgd0 ヒープってオブジェクトをインスタンス化したときに割り当てられるメモリ領域って認識なんですが合ってますか? Cは関数内で宣言したローカル変数に配列を代入しても関数外に引き継げないのでまだわかるのですが、C++の考え方が掴めず混乱してます…… : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/25(月) 23:11:18.12:8OH7D8YO0 ヘタレか? お前の喧嘩を買ってやると言っているのだから、 馬鹿パヨク韓国人なりの論理を展開してみろよ。 状況としては、2chは地域の公園のようなもので、 誰でも自由に入って楽しむことは出来るが、 飼い犬のウンコをまき散らして帰るような奴は二度と来るな、と当然思われる。 それを俺は、はっきり言ってやってるだけだ。 お前らは馬鹿すぎて理解できないようだから、直接的に言うしかない。 韓国人死ね で、それで俺を嫌うのはお前らの自由だが、当然それでは何も解決しない。 お前らが迷惑行為を続け、他の連中に嫌われ続けるのも変わらないからだ。 何でも他人のせいにして被害者ぶるのはマジでムカつかれるから止めた方がいい。 嫌われる原因はお前ら自身にある。特に匿名掲示板ではそうだ。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd1f-1u/G) [sage] 2017/12/25(月) 23:19:00.09:OWjcriO+d 一秒一秒大切に。 Please don't waste your time. : デフォルトの名無しさん (ワッチョイ a378-STQK) [] 2017/12/25(月) 23:23:13.44:hqAAE/zx0 vector<string> ←これはコピー vector<string>& ←これは参照 戻り型を参照にしたらプログラムがあぼーんするけどね : デフォルトの名無しさん (ワッチョイ 4371-0jja) [sage] 2017/12/25(月) 23:31:00.53:PDFy/wgd0 ということは、でいうとpiyoが受け取ったvectorとhogeが返してるvectorは中身が同じだけの別物ということですかね? いわゆるメモリリークはあくまでfree忘れやdelete忘れさえしなければそんなに心配しなくてもいいということでしょうか : デフォルトの名無しさん (ワッチョイ a378-STQK) [] 2017/12/25(月) 23:37:09.45:hqAAE/zx0 うん別物 で、hoge内のvectorはRAIIの仕組みによって自動的に開放されているから安心して : デフォルトの名無しさん (ワッチョイ 4371-0jja) [sage] 2017/12/25(月) 23:40:36.26:PDFy/wgd0 なるほど…やっとモヤモヤが晴れてきました ありがとうございます RAIIについても調べてみます : デフォルトの名無しさん (ワッチョイ cf80-fDvV) [sage] 2017/12/26(火) 01:22:10.13:gkP6o6Ks0 vector<string> hoge(){ vector<string> v = {"hoge", "piyo"}; return v; } vector<string> v2 = hoge(); 関数スコープを抜けたら、関数内のオブジェクトは、自動的に消滅する。 return した瞬間に、代入演算子で、コンテナ内のデータをすべてコピーするのかも。 2重にデータを作るから、無駄 一方、参照型の言語では、primitive 以外は、すべてオブジェクトで、参照で扱う。 コンテナの参照(アドレス)をコピーするだけだから、オブジェクトは1つだけ f(ref inout){ 〜 } C/C++ だけ、関数の引数に、更新用の参照を渡して、 関数内部で、そのオブジェクト・コンテナを更新することを、明確にした方が良いかも : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6f6f-buzn) [sage] 2017/12/26(火) 01:29:42.80:rFvAy7ZC0 C++11 以降の vector ならそういう場合は最悪でもムーブするんちゃう? NRVO が効くかもしれんし、全コピーは無いと思うが。 : デフォルトの名無しさん (アウアウウー Sa67-bqMz) [sage] 2017/12/26(火) 01:41:08.77:OUkXE0b1a 断っておくけど俺はc++は素人なので誰か訂正よろ 横からだけど それはこの場合の答えには向いてない気がする そのvectorは関数を出ても破棄されないしコピーされない そのまま使われる RVO(RETURN VALUE OPTIMIZATION)という仕組みがあって無駄なオブジェクトの生成が抑制される c++はこういう所を死ぬほど気にする言語 : デフォルトの名無しさん (ワッチョイ cf80-fDvV) [sage] 2017/12/26(火) 02:06:41.75:gkP6o6Ks0 Rust には、オブジェクトの所有権という概念がある 代入で、所有権がmove する。 オブジェクトはコピーされず、1つだけで、所有権が移動するだけ こういう概念が、言語ルールにあるから明確 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 6f6f-buzn) [sage] 2017/12/26(火) 02:14:08.86:rFvAy7ZC0 RVO は C++17 で必須化されたけど、 の事例はいわゆる NRVO で、やってもやらなくてもよい最適化のはず。 しかしムーブはコピーよりも優先されるので処理系が NRVO を最適化しなかったとしてもムーブが発動する。 故にコピーはしない。 : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/26(火) 02:20:19.84:TW1LjN+M0 弱いものを踏みつけて偉い事を誇示しないと生きていけないなんてかわいそう。 それだけがやり方だと思ってるんだったら先はない。 : デフォルトの名無しさん (ワッチョイ 93fb-tRgI) [] 2017/12/26(火) 06:35:31.17:yJ/B7pz80 強者が言えば説得力があるが 強くなる努力・精進を惜しむ怠け者の言い訳は見苦しいだけだ : デフォルトの名無しさん (ワッチョイ 93fb-tRgI) [] 2017/12/26(火) 06:52:36.87:yJ/B7pz80 実装を限定はしていなかったというだけの話か? だとしたら興醒めだな 確かに昔のC++は実装と提供の分離が論点なので vectorの実装がリストでも文句をぬかすな、だったが じゃあ何でvectorの他にlistがあるのかって話 : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/26(火) 07:14:27.81:TW1LjN+M0 昔は規格書に書いてある通り実装されてないことがよくあったって話だが、これ書けばよかったな。 だから大半のことは実装依存だった。 今頃になってりーぬすに怒られたからメモリの構成の話してるんだぜ。 仮想コンピュータの仕様でも決まってりゃ今頃3D扱っててもおかしくない。 今頃2Dをやっと扱えるようにしようとか言ってるんだから。まぁ、ないよりいいから期待はしてるが。 : デフォルトの名無しさん (ワッチョイ 93fb-tRgI) [] 2017/12/26(火) 09:51:51.57:yJ/B7pz80 あほ vectorの要素アクセス速度が添え字に比例してたら リーナスでなくてもキレるわ それで誰も使わなくなったライブラリがあとで改訂なんかされるかよ # リーナス? ここC++スレだが : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/26(火) 10:01:52.49:TW1LjN+M0 メモリーオーダという話を最近始めた。 ttp://en.cppreference.com/w/cpp/atomic/memory_order これだったかな? valarrayさんが救済される日は来るのか。 ここ10年位で委員会の人が突っ込み入れるようになったけど、それ以前は忖度されてて誰も何も言わなかった。 だから、MSのコンパイラはタコだったんだよ。 : デフォルトの名無しさん (ワッチョイ 93fb-tRgI) [] 2017/12/26(火) 10:12:55.95:yJ/B7pz80 ああ、最近こんな話を聞いたと自慢に来ていたのか 気の毒だがその話とvectorの実装はまるで無関係だ 悪いが俺はもう付き合ってらんねえ : デフォルトの名無しさん (ワッチョイ 6fe7-7LW1) [sage] 2017/12/26(火) 18:46:36.46:qo4+F5LQ0 unordered_set<valarray>でひどい目に遭ったのは俺だけじゃないはずだ : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/26(火) 19:09:46.14:NpjbrU9/0 僕は韓国人です、ブーメランおいしい、まで読んだ お前は何のためにここに来ているんだ? 全く脈略のない昔語りなんて、老害以外の何者でもない。 しかも内容は間違いだらけだし。 お前みたいな認知バイアス馬鹿には > 問答無用で死ねはひどいよなぁ (703=お前) と取れるようだから、俺がわざわざ分かりやすく、 お前が死ななければならい理由707,713を書いてやったんだ。 ちゃんと読んで死ね > 鏡見てみたらいいと思うよ。自分ぶっ殺したくなると思うよ。 (703=お前) むしろお前が680を書いていてまだ生きているのが不思議なんだが。 さすがゴキブリといったところか。 韓国人死ね : 片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ c3b3-PGwP) [sage] 2017/12/26(火) 20:31:37.65:i/UGO9LX0 時間の無駄だ。life timeを無駄にするな。 : デフォルトの名無しさん (ワッチョイ 239f-7LW1) [sage] 2017/12/26(火) 20:39:22.90:NpjbrU9/0 あなたがどう思おうがあなたの自由だが、俺は短期的視野で動いているわけではない。 : デフォルトの名無しさん (ワッチョイ 0380-uc05) [] 2017/12/26(火) 21:31:42.92:WRs+G+g20 仮想マシンどころか現在存在するメジャーなインタプリタ言語の仕様にすら3Dはおろか2Dすら無いんだが。 : デフォルトの名無しさん (ワッチョイ 6fe7-7LW1) [sage] 2017/12/26(火) 22:46:28.20:qo4+F5LQ0 Pythonには標準でTcl/Tkくっついてるぞ : デフォルトの名無しさん (アウアウウー Sa67-bqMz) [sage] 2017/12/26(火) 22:51:40.52:OUkXE0b1a えっ? : デフォルトの名無しさん (ブーイモ MM27-P2tI) [sage] 2017/12/26(火) 23:32:54.20:qDwd0bsiM 仮想マシンどころかってjavaとかc#とかのことさしてるの? : デフォルトの名無しさん (ワッチョイ 2304-615/) [sage] 2017/12/27(水) 00:16:12.80:OmD1y+tA0 しょうがないなぁ。 じゃぁ、今死んだことにしてやるからあとの責任は取ってね。 じゃーねー。 : デフォルトの名無しさん (ワッチョイ 93fb-tRgI) [] 2017/12/27(水) 10:05:47.36:hAbcZpZm0 ↓こっちでやれ、てめーら ttps://mevius.5ch.net/test/read.cgi/tech/1427572389/ : デフォルトの名無しさん (ワッチョイ 8a98-iexB) [] 2017/12/30(土) 07:52:44.61:UOR1hNFd0 class A { //... }; class B : public A { }; A *a = new B(); delete a; // だめ B *b = new B(); delete b; // だめ というようにA, Bのdeleteを禁止することはできますか。 ただしこの制約はAでつくりたいです。 : デフォルトの名無しさん (ワッチョイ 9feb-RYVm) [sage] 2017/12/30(土) 09:33:10.52:d8FdYsMR0 それくらい自分でよく考えろ : デフォルトの名無しさん (ワッチョイ 2aa8-eCAL) [sage] 2017/12/30(土) 09:45:33.24:HUtWMzBs0 バカな考えはやめとけ 充分な知識と経験があるやつがバカな考えと知りつつあえてやるなら勝手だが 具体的なやりかたも分からないレベルのやつが思いつきでやろうとしても あちこちぐちゃぐちゃになって自滅するだけだ : デフォルトの名無しさん (ワッチョイ cacf-Frgx) [sage] 2017/12/30(土) 11:12:47.92:cTkeeOUh0 A&& a{B()}; B&& b{B()}; じゃだめなん? : デフォルトの名無しさん (ワッチョイ 8a98-zz6T) [sage] 2017/12/30(土) 12:45:48.79:UOR1hNFd0 うーん諦めそう : デフォルトの名無しさん (ワッチョイ 86e7-RYVm) [sage] 2017/12/30(土) 13:12:04.93:Rl7wv9fa0 やりたいことを実現するだけならA::~A()をprivateにすればいい 数多の副作用をどうするかは自分で考えろ : デフォルトの名無しさん (ワッチョイ 0b7e-YrVP) [sage] 2017/12/30(土) 13:54:05.13:wmbP4hdJ0 ベクトルの内積を取りたいのですがC++で実装する場合最も高速な方法はなんでしょうか : デフォルトの名無しさん (ワッチョイ ca34-SFeq) [sage] 2017/12/30(土) 13:54:23.97:/LayJX5M0 逆にどういう条件ならdeleteしても良い条件なのか? コレでは一向にdelete出来ないではないか : デフォルトの名無しさん (ワッチョイ 0b7e-YrVP) [sage] 2017/12/30(土) 14:12:38.35:wmbP4hdJ0 事故解決しました : デフォルトの名無しさん (ワッチョイ 4a12-RYVm) [sage] 2017/12/30(土) 14:50:42.66:tENdVusY0 罷り間違ってもdeleteできないインスタンスとなると 核開発か深海探査か宇宙船くらいしか思いつかない : デフォルトの名無しさん (ワッチョイ de81-owgq) [sage] 2017/12/30(土) 14:58:28.45:W7MN//Qp0 電源を切っても生き残るインスタンス : デフォルトの名無しさん (ワッチョイ 4a12-RYVm) [sage] 2017/12/30(土) 15:57:20.60:tENdVusY0 最近の時事と照らし合わせると人工心肺の回収があったな 電源を切れないデザインの電子機器があるのかもしれない : デフォルトの名無しさん (ワッチョイ 67f2-RYVm) [sage] 2017/12/30(土) 16:04:54.13:JmZ4oRXS0 スタックにしか置けないとか : デフォルトの名無しさん (スップ Sd8a-z39N) [sage] 2017/12/30(土) 19:53:03.01:MGnkdLjPd 詳細は? : デフォルトの名無しさん (ワッチョイ 8a98-iexB) [] 2017/12/30(土) 19:54:40.04:UOR1hNFd0 逆ですね つまりヒープにしか置きたくないです。 Aから派生したクラスのメモリサイクルを全てGCで管理します。 : デフォルトの名無しさん (ワッチョイ 67f2-RYVm) [sage] 2017/12/30(土) 19:58:30.81:JmZ4oRXS0 だとしたらGCからはdeleteできないと困るんでない? : デフォルトの名無しさん (ワッチョイ 8a98-iexB) [sage] 2017/12/30(土) 20:03:16.25:UOR1hNFd0 たとえばprivateデストラクタを呼べる状態なら friendにすればいいかと考えています。 それができなければ単に新しいvirtual del()メンバー関数を新設するつもりです。 領域自体はfree()で解放するのでデストラクタがなくてもクラス自体は削除できます。 : デフォルトの名無しさん (ワントンキン MM3a-Ieq/) [sage] 2017/12/30(土) 20:07:42.93:DG4PcIhHM だとしたら普通newをオーバーロードするけどね : デフォルトの名無しさん (ワッチョイ 8a98-iexB) [sage] 2017/12/30(土) 20:10:14.52:UOR1hNFd0 newは既にオーバーロードされていて ヘッダ取り付けmallocするようになっています。 問題はnewしてAのコンストラクタが動きGCの管理化であるにもかかわらず、 deleteされたりそもそもスタック上に造られてしまうことです。 : デフォルトの名無しさん (ワッチョイ 8a98-iexB) [sage] 2017/12/30(土) 20:14:25.11:UOR1hNFd0 いまのところの案は A のdeleteをオーバーライドして deleteされても領域は解放されないようにすることです。 しかしこれでもスタック上に配置することはできますが。 連投失礼しました。 : デフォルトの名無しさん (ワントンキン MM3a-Ieq/) [sage] 2017/12/30(土) 20:47:53.74:DG4PcIhHM てか、C++使うな : デフォルトの名無しさん (ワッチョイ 0b9f-RYVm) [sage] 2017/12/30(土) 21:30:00.75:Xyp0qNcm0 GCしか使わせたくないのなら、普通にGC言語使った方がいいと思うが。 オレオレGC実装とか、全くの無駄だし。 なおVC++/CLIでよければGC専用クラスを明示的に作ることは出来る。 : デフォルトの名無しさん (オイコラミネオ MM56-zz6T) [sage] 2017/12/30(土) 21:54:06.25:VH3WebWaM おそらくid変わってます インタプリタ作っているんです でインタプリタでgcをサポートするためにc++でgcを書いています ですのでなんとかc++で解決したいわけです : デフォルトの名無しさん (ワッチョイ 67f2-RYVm) [sage] 2017/12/30(土) 22:09:40.34:JmZ4oRXS0 それならnew/deleteでGCしようとするのが悪手 : デフォルトの名無しさん (オイコラミネオ MM56-zz6T) [sage] 2017/12/30(土) 22:20:41.53:VH3WebWaM どうしよう : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe) [sage] 2017/12/30(土) 22:31:11.72:jArhle36d インタプリタの空間からは直接deleteにはアクセスできないんだろ? だったらstd::shared_ptr使いなよ。 : デフォルトの名無しさん (ワッチョイ 4e23-zz6T) [sage] 2017/12/30(土) 22:53:42.57:ah4/ane50 循環参照をインタプリタで考えたくないんです : デフォルトの名無しさん (ワッチョイ b3b3-Auke) [] 2017/12/30(土) 23:08:46.89:BVA4/HEC0 某書籍の問題をC++で解いています。 格子状の道路を、同じ辺を通らずに(同じ格子点ではないです) 直進と左折のみで、左下から右上まで行く道は何通りあるか求めよ。 それに対して以下のコードを書きましたが、うまくいきません。 ttps://ideone.com/0JMvWz MigiDame::CanGo関数の中での挙動が、こちらが期待しているようにならないのです。 >全部trueが返る。 >また、releaseとdebugで挙動が違う。 どなたかご助言をお願い致します。 : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe) [sage] 2017/12/30(土) 23:13:41.03:jArhle36d 論理的に矛盾している。GCは動的に確保・解放するが、C++のスマートポインターは基本的に静的にする。 それをインタプリタ側でしたくないのであれば、外部GCエンジンをインタプリタに接続するインターフェースが必要。 : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe) [sage] 2017/12/30(土) 23:29:34.53:jArhle36d ttps://qiita.com/GachiNyanNyan/items/77401f60a1ded61b3952 : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe) [sage] 2017/12/30(土) 23:30:58.79:jArhle36d ttp://www.nminoru.jp/~nminoru/programming/boehm-gc3.html こちらを参考に。 : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe) [sage] 2017/12/30(土) 23:33:17.06:jArhle36d 後はクラス内部のoperator new/deleteを定義する。 : デフォルトの名無しさん (ワッチョイ 0b9f-RYVm) [sage] 2017/12/30(土) 23:46:28.29:Xyp0qNcm0 > でインタプリタでgcをサポートするためにc++でgcを書いています 意味不明。 例えば、JavaやC#でインタプリタ書けば全く問題ないだろ。 一般的にはシステムとユーザで別ヒープ空間にしてサンドボックス化したいけど、 GC言語って一般的にGCヒープが壊れるようなアクセス方法を提供してないから、 別空間に分けなくてもそんなに酷いことにはならないぞ。 オレオレインタプリタ程度なら問題ないはず。 : デフォルトの名無しさん (ワッチョイ aa2d-ug5Q) [sage] 2017/12/31(日) 00:00:04.48:6+AUyGx70 ヒープにしか置けないオブジェクトというのは、 More Effective C++ の項目27にあったな。 で既に触れられている方法だけど。 : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe) [sage] 2017/12/31(日) 00:16:40.38:iQxViKH1d インタプリタのメモリー管理はインタプリタ側かGCエンジン側でしないといけない。 インタプリタでは自動的にデストラクタは呼ばれないので、インタプリタ側が引き金を引かないといけない。 : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe) [sage] 2017/12/31(日) 00:19:34.27:iQxViKH1d Boehm GCというGCエンジンをそのまま使えばいいからさ。 : デフォルトの名無しさん (ワッチョイ aa2d-ug5Q) [sage] 2017/12/31(日) 00:38:38.33:6+AUyGx70 255行目は「return false;」じゃないの? : デフォルトの名無しさん (ワッチョイ b3b3-Auke) [sage] 2017/12/31(日) 00:49:49.20:sqNDq1tX0 ありがとうございます。 仰る通りでした。 お恥ずかしい。 : デフォルトの名無しさん (ワッチョイ 4e23-zz6T) [sage] 2017/12/31(日) 01:14:19.19:pvw4D5QY0 継承元のコンストラクタを呼べないのでそれはできないです : デフォルトの名無しさん (ワッチョイ eaf9-hwC7) [sage] 2017/12/31(日) 01:33:30.83:QH0un2fa0 作ろうとしているインタプリタってc++の? それなら、自分で入力のc++のソースを解析する際に問題のクラスがdeleteされたりスタック上に生成されたりするのは検知すれば良いのでは。 : デフォルトの名無しさん (ワッチョイ 4e23-zz6T) [sage] 2017/12/31(日) 01:34:01.16:pvw4D5QY0 それは嫌です 既存の処理系がcで書かれている以上なんとかなるはずです これは好みの問題かもしれませんが : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-Auke) [sage] 2017/12/31(日) 01:57:19.48:ZCoi/xwq0 C で書かれてても完全に C の仕様の範囲内で書いてるとは限らんのだぞ。 アーキテクチャ依存の部分を適当に #ifdef で分岐して configure でなんとかしたりする (できる) のが C/C++ : デフォルトの名無しさん (ワッチョイ 4e23-zz6T) [sage] 2017/12/31(日) 02:23:20.14:pvw4D5QY0 いいえ c++の文法は自分の手におえません : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe) [sage] 2017/12/31(日) 07:16:38.47:iQxViKH1d コンストラクターが呼べない? GC管理の範囲の切り分けができてないんじゃないの? 何から何までGCで管理する必要は無いはず。 Boehm GCの使い方を勉強しい。 : デフォルトの名無しさん (ワッチョイ cab3-tILW) [sage] 2017/12/31(日) 07:28:36.53:pVPyHW7p0 もう言ってることもちぐはぐだしレス古事記としか思えない スルー推奨 : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe) [sage] 2017/12/31(日) 07:32:05.37:iQxViKH1d インタプリタで扱う、GC管理するクラスの基底クラスObjectBaseを定義して、そこでBoehm GCを使ってoperator new/deleteを定義する。 インタプリタ側でObjectBaseの派生クラスを必要に応じてnew/deleteすればGC管理ができる。 : デフォルトの名無しさん (オイコラミネオ MM56-zz6T) [sage] 2017/12/31(日) 09:17:47.39:6pksk/76M まだ自分では難しいですね 一旦中断して勉強し直します ありがとうございました : デフォルトの名無しさん (ワッチョイ 0b9f-RYVm) [sage] 2017/12/31(日) 10:57:38.40:4mPXFkIt0 そういう意味ではない。 まあ、根本的に分かってないというのは同意する。 今の君では無理だ。 君は「既存のインタプリタにGC機能を付け加えようとしている」、ここまではいいか? インタプリタの場合、両端の柱は2つで、 A. evalラッパ B. フルエミュ で、結局の所これらの折衷案となる。どのポイントを目指すかは君が決めればいい。 ただし、君はここまですら到達できていない。 君はGCを自前で実装することにこだわっている。 これはGCをフルエミュすることを意味しているが、 この場合、delete等は常に自前パーサを逐一通すことになるので、その段階で弾けばいいだけだ。 君が言っているように「禁止する」必要は全くない。(ここが矛盾している。 GC管理変数をdeleteしようとしているかは、当然分かるし、分からないようではフルエミュできない) だから俺たちはevalラッパ実装だという前提で話をしている。 こちらの場合は、システム側が持っている機能を使って相乗りになる。 混ざらないようにさえ出来ればとりあえずは動く。 コードを書く以前に、まず、仕様を固めないと駄目だ。君はここが出来ていない。 もっと上位の、エミュレーション戦略を固めないと話にならない。 : デフォルトの名無しさん (ワッチョイ 8a98-iexB) [sage] 2017/12/31(日) 12:02:46.05:NNFoNJyg0 >この場合、delete等は常に自前パーサを逐一通すことになるので、その段階で弾けばいいだけだ というのはインタプリタからは直接deleteが見えないことをさしていると思いますが(合っていますか? >君が言っているように「禁止する」必要は全くない。 の理由がわかりません。 インタプリタ上のオブジェクトもC++上ではただのポインタであり delete hogehoge //このhogehogeはGCの管理下 することは文法上は可能なはずです。 これを禁止することは処理系の保守性/安全性のために必要だと考えています(というのが初めの質問につながります そしてevalラッパというのはやらないです。 今回はメモリ管理まで実装することでその"Java"や"C#"での管理の仕組みを実装レベルで学ぶことが目的の一つだからです。 動けばいいとうわけではありません。当然出荷するわけでもありませんので大丈夫です。 >コードを書く以前に、まず、仕様を固めないと駄目だ。君はここが出来ていない。 >もっと上位の、エミュレーション戦略を固めないと話にならない。 ええ全くその通りでした。楽観的すぎたか単に実力不足です。 : デフォルトの名無しさん (ワッチョイ 0b9f-RYVm) [sage] 2017/12/31(日) 13:30:39.82:4mPXFkIt0 君が想定しているのは明らかにフルエミュ寄りだから、それで話をすると、 A *a = new A(); でまず、 自前の変数管理用ハッシュ内に valuesHash["a"] = {type: A*, value: ptr}; することになるだろ。 そして delete a; が来ると、 if (valuesHash["a"].type.canDelete) delete valuesHash["a"].value; で対応することになる。だから、 > することは文法上は可能なはずです。 > これを禁止することは処理系の保守性/安全性のために必要だと考えています ということ自体が間違いなんだよ。 文法的に禁止とか、全く意味が無くて、 実行時に自然に弾けるし、弾けないようなフルエミュは実装不能だから。 君はインタプリタ自体がどう動いているのか理解できていない。 インタプリタの場合は、生きている変数を全て自分で把握してないと話にならないんだよ。 俺たちはこれは「常識」として、その先の ptr の配置先をどうするか、の話をしていた。 だから完全に空回りすることになる。 > 楽観的すぎたか単に実力不足です。 どっちもだ。 君は車を作ろうとしているが、車にエンジンとタイヤが必要なことすら理解できてない。 このレベルの馬鹿だ。自覚してくれ。 : デフォルトの名無しさん (ワッチョイ 8a98-zz6T) [sage] 2017/12/31(日) 21:01:51.54:NNFoNJyg0 ありがとうございます 全く甘々でしたよ。。勉強してきます! : デフォルトの名無しさん (ワッチョイ 5f33-wHXY) [sage] 2017/12/31(日) 21:05:22.85:gdXppZ4Z0 まぁ机上の空論の段階で質問してる感じはするね まず実装してみて詰まってから質問したほうが絶対早い : デフォルトの名無しさん (ワッチョイ 4a12-RYVm) [sage] 2017/12/31(日) 21:10:48.47:Ax7HC8jF0 これのやり方真似るだけじゃねえの C++にこだわる理由とかあるのか GitHub - python/cpython: The Python programming language ttps://github.com/python/cpython GitHub - ruby/ruby: The Ruby Programming Language ttps://github.com/ruby/ruby : デフォルトの名無しさん (ワッチョイ 0b9f-RYVm) [sage] 2017/12/31(日) 23:28:57.22:4mPXFkIt0 C++ということならV8もどうぞ。 V8 JavaScript Engine ttps://github.com/v8/v8 つか、知らんかったけどCのインタプリタもあるのな。 ttps://root.cern.ch/root/Cint2006.html ttps://stackoverflow.com/questions/69539/have-you-used-any-of-the-c-interpreters-not-compilers : デフォルトの名無しさん (ワッチョイ 0b7e-H5kR) [sage] 2018/01/01(月) 15:09:24.40:sTQ8czIK0 特定のプログラムの音(ゲームの音やブラウザの音など)のみを録音する方法ってありますか? ステレオミキサー経由の録音はできたのですがそれだとPC全体の音が入ってしまいます : デフォルトの名無しさん (ワッチョイ 9feb-RYVm) [sage] 2018/01/01(月) 15:29:07.61:hH9fKUSZ0 全くもってスレ違い : デフォルトの名無しさん (アウアウカー Sacb-H5kR) [sage] 2018/01/01(月) 16:20:46.04:e32zy+Lia C++で実装してるのですが : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-Auke) [sage] 2018/01/01(月) 18:43:32.24:jbWUirsb0 どういう環境かにもよる。 : デフォルトの名無しさん (アウアウカー Sacb-H5kR) [sage] 2018/01/01(月) 19:08:55.81:0kKej5SZa win10でマザボから音出してます : デフォルトの名無しさん (ワッチョイ 07c3-FiVz) [sage] 2018/01/01(月) 22:50:45.26:h4sxlXvw0 ステレオミキサーで必要な音以外をミュートにしておくのではダメなの? : デフォルトの名無しさん (アウアウカー Sacb-H5kR) [sage] 2018/01/01(月) 23:04:49.88:CxGFbaKha ステレオミキサーで拾う音を選択することができるのですか? 録音デバイスのプロパティからはできないですがどうやるのでしょうか : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-Auke) [sage] 2018/01/01(月) 23:29:57.50:jbWUirsb0 めんどくさ。 DLL インジェクションでサウンド関連の API 呼出しを横取りして記憶するとかどうよ : デフォルトの名無しさん (ワッチョイ 6b78-EEtN) [] 2018/01/01(月) 23:48:05.00:moCLDBRy0 まずOBSとかAfterburnerなんかの録画アプリで出来るか確かめてみれや それでできるなら出来るだろうし出来ないなら出来ないってこった : デフォルトの名無しさん (ワッチョイ eaf9-hwC7) [sage] 2018/01/02(火) 00:08:23.37:A/ddTu/K0 録音を実現する機能はc++という言語の範疇ではないから、適切なスレで聞いてきた方がいいよ。 具体的に使うAPIなりライブラリなりが分かってやりたい処理があって、それをc++で記述する上で疑問が出てきたならこのスレでいいと思うけど。 : デフォルトの名無しさん (ワッチョイ 07c3-FiVz) [sage] 2018/01/02(火) 02:09:46.75:TOn3QoHK0 Windows7だと画面右下のタスクバー上のスピーカーアイコンを右クリックして 音量ミキサーを起動すると、ミュートする音を選べるようになるよ (各音源の一番下の青いスピーカーの部分をクリックすればいい) : デフォルトの名無しさん (ワッチョイ 9e5f-g95I) [sage] 2018/01/03(水) 00:50:02.27:975SpLfw0 みんなストイックに-Weverythingなの? : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdea-hOPe) [sage] 2018/01/03(水) 18:02:54.72:DhesVTdNd We very thing : デフォルトの名無しさん (ワッチョイ ff89-OTe3) [] 2018/01/03(水) 18:06:12.23:AMJZwzU90 「GCが欲しければObjectBaseを継承しなければならない 「さあObjectBaseを継承したまえ、GCが欲しいだろう ↑ という押しつけがましさ : デフォルトの名無しさん (ワッチョイ 6b75-kJbS) [sage] 2018/01/03(水) 18:08:47.07:zucBe8Ms0 ブランケットアンクローズドシンタックスエラー : デフォルトの名無しさん (ワッチョイ ff89-OTe3) [] 2018/01/03(水) 19:20:51.86:AMJZwzU90 switch(c) { case '{': aho(); break; //... } : ◆QZaw55cn4c (ワッチョイ ea60-rhJv) [sage] 2018/01/03(水) 22:18:43.34:1ORngv960 ttps://www.theregister.co.uk/2018/01/02/intel_cpu_design_flaw/ >that Intel's CPUs speculatively execute code potentially without performing security checks. ... >That would allow ring-3-level user code to read ring-0-level kernel data. 投機的実行が仇になったようだね、リング3 コードがリング0 カーネルデータを読み込める、というのは最悪だねえ‥ : デフォルトの名無しさん (ワッチョイ ca34-SFeq) [sage] 2018/01/03(水) 23:20:34.97:XsO0N2Ro0 intelのCPUに重大なバグ。修正により性能30%ダウンは確実。 もちろんcoffeeも対象 [589351131] ttps://leia.5ch.net/test/read.cgi/poverty/1514960738/ >インテルのCEOが関連性は不明だが2017年11月にCEOを最低維持できる25万株残して株式を売却している ヤバいで : デフォルトの名無しさん (ワッチョイ 1f60-1EiW) [sage] 2018/01/04(木) 00:19:22.89:NEvAF4vy0 ttp://pythonsweetness.tumblr.com/post/169166980422/the-mysterious-case-of-the-linux-page-table : デフォルトの名無しさん (ワッチョイ 1f60-1EiW) [sage] 2018/01/04(木) 00:25:51.35:NEvAF4vy0 ttps://www.theguardian.com/technology/2018/jan/03/major-security-flaw-found-intel-processors-computers-windows-mac-os-linux : デフォルトの名無しさん (ワッチョイ 1f60-1EiW) [sage] 2018/01/04(木) 00:34:08.27:NEvAF4vy0 関連記事がまとまっていた ttps://news.google.com/news/story/dxTQx3jGZ4VUkpMLaUSX33-gnbA8M?hl=en-GB&ned=uk&gl=GB : デフォルトの名無しさん (ワッチョイ efe7-Ogju) [sage] 2018/01/04(木) 00:45:09.37:Z29HpgyU0 えっやばくねこれ : デフォルトの名無しさん (ワッチョイ 0feb-gOZ5) [sage] 2018/01/04(木) 02:42:39.95:tRFYlI1W0 なんかにめちゃめちゃ書いてあるらしく実際そんなヤバないらしいよ : デフォルトの名無しさん (ワッチョイ 3b89-2A+B) [] 2018/01/04(木) 06:34:15.00:O1MbUTjx0 やってみろよ ム板でそういう発言恥ずかしくないのか : デフォルトの名無しさん (ブーイモ MM0f-tDXD) [sage] 2018/01/04(木) 08:34:28.43:BdTp33RzM システムコール呼び出すたびにアドレス空間を切り替えるパッチを当てるみたいだから、 io叩きまくるコンパイル作業はモロに影響うけるかもね。 arm64版にもパッチを当てるみたいだけど、禿大丈夫か… : デフォルトの名無しさん (アウアウウー Sa8f-hL1C) [sage] 2018/01/04(木) 18:57:44.39:mQU15vmIa intel抜けてる intel割れてる : デフォルトの名無しさん (アウアウカー Sa4f-672L) [sage] 2018/01/05(金) 22:53:49.25:eQNcfao2a c++で例外は使ってますか? また使う場合std::exceptionを継承しますか? : デフォルトの名無しさん (ワッチョイ cb78-dycC) [] 2018/01/05(金) 23:16:55.81:Zjbc7FO50 最後の門番がstd::exceptionなんで継承して使う : デフォルトの名無しさん (ワッチョイ 2bb3-hL1C) [sage] 2018/01/05(金) 23:33:54.58:o2QD25iD0 ] ][][[[ [][] [[["][ [ ]]]["04" : デフォルトの名無しさん (ワッチョイ 9f33-aKZ8) [sage] 2018/01/06(土) 01:45:54.07:oEcDcvUy0 標準コンテナとか含めて new 使ったら bad_alloc 受けることになるんだから ほとんどの場合に使ってると言えそうなんだけど「継承しますか?」って話に繋がってるってことは 「使う」=自分で例外クラスを定義して使うって話なのかな? : デフォルトの名無しさん (ワッチョイ cb75-if4i) [sage] 2018/01/06(土) 02:11:45.78:dYI3l1P40 英単語の前後にスペースを挿入するのはこだわり? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ef6f-hL1C) [sage] 2018/01/06(土) 02:48:37.95:mAB25EnJ0 TeX で英数字からなる語の前後に空白を入れないと単語境界がうまく認識されないという問題があったので、この習慣は広く定着してる。 ただ、 pTeX などでは自動で境界を認識して適切な幅を取るようになっているのでむしろ空白文字を入れるとダメってのもある。 どっちでも上手いこと処理するのもあるし、そのへんごちゃごちゃしてややこしいんだわ。 ウェブブラウザでも物によって幅の取り方が違う。 まあ個人的には、バッドノウハウだという自覚はあるが、 html やプレーンテキストでは英単語の前後には空白を入れた方が見やすいと思う。 : デフォルトの名無しさん (ワッチョイ cb75-if4i) [sage] 2018/01/06(土) 02:53:16.08:dYI3l1P40 たしかに : デフォルトの名無しさん (ワッチョイ 9f33-aKZ8) [sage] 2018/01/06(土) 02:59:22.25:oEcDcvUy0 ttps://www.google.com/search?q=%E8%8B%B1%E5%8D%98%E8%AA%9E%E3%81%AE%E5%89%8D%E5%BE%8C%E3%81%AB%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9 : デフォルトの名無しさん (アウアウウー Sa8f-672L) [sage] 2018/01/06(土) 09:05:07.05:QqCP9l1Xa そうです。c++の本など見ても標準の例外を説明して終わりな事が多いし、しまいにはnoexceptなるキーワードまで出来てるし実際使ってるのかなと。 : デフォルトの名無しさん (ワッチョイ 0bbb-2A+B) [] 2018/01/07(日) 19:05:16.44:8XJu4dlo0 標準の例外はexception&で捕獲できる ただそれだけのこと 独自定義の例外を標準の例外とは区別したいのなら exceptionを継承しないという手も当然ある 教条主義にとらわれるやつ=自分の頭で考えないやつは こういう判断が極度に苦手だ : デフォルトの名無しさん [] 2018/01/07(日) 23:12:25.29 Linux の日本語ドキュメントの読み書きに慣れてると自然と空白空けちゃうね。 ttp://linuxjf.osdn.jp/JFdocs/jf-styleguide.html#s2 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ef6f-hL1C) [sage] 2018/01/08(月) 02:30:58.74:4mwCF63o0 標準のライブラリがやってることっていうのはだいたいその言語における「普通」なので、 原則としてはそれに合わせるというのは良い方法だよ。 あえて原則に逆らいたいとき、逆らった方が便利なときというのももちろんあるけれど、 たいして強い動機もないのに独自の設計を選択するのは混乱の元。 つまり、例外クラスは std::exception を継承するのが好ましい。 その上でそのデザインが問題を起こす場合があるなら見直せばいい。 : デフォルトの名無しさん (ワッチョイ 0b44-5YeV) [] 2018/01/08(月) 03:33:16.23:yXJvU4Pj0 動的例外がまだ廃止されていない頃に設計されたものが 今のC++に対して本当に「普通」なのか考えたことがあるか? (別にここで答えなくてよいが) 誤った前提のうえに立つ主張はただの戯れ言で そうなっていないことは確認してからぬかせ : デフォルトの名無しさん (ワッチョイ 0fe8-u9Oh) [sage] 2018/01/08(月) 04:19:16.37:svytTaJl0 std::exceptionを継承しないメリットって何かある? : デフォルトの名無しさん (ワッチョイ 0b44-5YeV) [] 2018/01/08(月) 05:20:35.84:yXJvU4Pj0 僅か数レスの流れくらい読め : デフォルトの名無しさん (ワッチョイ 1fbd-wtpF) [sage] 2018/01/08(月) 06:27:14.93:scSfOfeH0 std::exceptionを継承しないデメリットもようわからん… std::exceptionは一体何をやっているのや? std::exceptionを継承しなくとも throw 1; --> catch (int)で捕捉 throw "Hello World!"; --> catch (const char*)で捕捉 とかやれるようになったのって比較的最近? : デフォルトの名無しさん (ワッチョイ 0f81-k2O/) [sage] 2018/01/08(月) 06:38:24.96:iffK3nmC0 ないよ std::exceptionを継承しても独自例外は区別できるし、は反例になってない std::exceptionを継承しないのは、普通にアンチパターンだからやめたほうがいい : デフォルトの名無しさん (ワッチョイ efe7-Ogju) [sage] 2018/01/08(月) 09:47:56.66:mQiTu3iz0 クラス以外を投げるのはdeprecatedになってたような…(自信なし) とはいえstd::exceptionを継承しなければならない強い理由もあんまりないような気がする JavaのThrowableやらPythonのExceptionやらはGCの都合だし あくまでstd内の例外を組織化するための基本クラスでしょstd::exceptionって : デフォルトの名無しさん (ワントンキン MMbf-k2O/) [sage] 2018/01/08(月) 09:53:10.93:kEMPsv5+M テスティングフレームワークとか、ロギングフレームワークとか魔改造したくないでしょ おとなしくstd::exception継承しとけ、デメリットが多すぎる : デフォルトの名無しさん (ワッチョイ 1fbd-wtpF) [sage] 2018/01/08(月) 10:38:49.41:scSfOfeH0 std::exceptionおよびその派生クラスを受け取る標準のロギングフレームワークってありましたっけ… STLはなんか例外を投げる側しかサポートしていない印象 そもそも例外の捕捉のしくみは「知ってる例外のみ捕捉して処理する/知らない例外はさらに呼び出し元に送る」戦略なので、 受け取る側に既存のフレームワークが無いんなら、投げる側の例外が高度に統一されている必要は実はそんなには無いキモス せいぜいコピーしたときリークするようなクラスではあってほしくないという願いがあるぐらいで実は何だって良いのでは… : デフォルトの名無しさん (ワッチョイ 9f33-aKZ8) [sage] 2018/01/08(月) 11:10:23.18:MwpEdGth0 「フレームワーク」にあたるかどうかはわかんないけど、 catch(std::exception& e) で e.what() を拾うっていうよくあるエラー処理のパターンがあるんだよ。 ttps://github.com/search?utf8=%E2%9C%93&q=%22catch+std%3A%3Aexception%22+what&type=Code だから、 std::exception 派生にしといてもらわないとまともなエラーメッセージが出なかったりして困る。 : デフォルトの名無しさん (ワッチョイ 1f5b-5YeV) [] 2018/01/08(月) 14:35:51.13:u4QX+fVn0 アホか e.what() を誰に対して表示するんだよ 一般消費者にbad_allocとか言っても通じねえ せいぜい「何たらファイルを保守員に渡せ」くらいだろ : デフォルトの名無しさん (ワッチョイ 9f34-5fu2) [sage] 2018/01/08(月) 14:44:37.01:zFrH1/Fm0 e.what()なんてどうでもいい どのソースファイルの何行目でそいつがthrowされてきたかだ : デフォルトの名無しさん [] 2018/01/08(月) 14:46:08.42 実際広く使われてるものを一人で一生懸命否定してもな・・・ : デフォルトの名無しさん (ワッチョイ 9f34-5fu2) [sage] 2018/01/08(月) 14:48:45.77:zFrH1/Fm0 そこら辺が例外としてカスタマーに出す情報として欠けている 巷で言うところのアスペクト機構というやつか : デフォルトの名無しさん (ワッチョイ 9f98-TAu9) [sage] 2018/01/08(月) 15:10:05.58:IpW3L+tu0 十進数計算をするためには一般的にはBCDをDPDを使用しますが 二進数のままで十進数の丸め処理をすることはできますか? : デフォルトの名無しさん (ワッチョイ 1f5b-5YeV) [] 2018/01/08(月) 15:46:10.84:u4QX+fVn0 自分の頭で考えることを放棄しているやつとでは議論にならない : デフォルトの名無しさん [] 2018/01/08(月) 16:18:21.05 そんなに独自路線を走りたいなら家で大人しく引きこもってろ : デフォルトの名無しさん (ワッチョイ efe7-Ogju) [sage] 2018/01/08(月) 16:30:52.97:mQiTu3iz0 眺めてるけど 全ての例外オブジェクトはstd::exception派生でなければならないなんてポリシーで書かれてるコードそんなにないぞ 当たり前だけどだいたいcatch(...)も後続させてるし、std::exception派生じゃない独自クラスのcatchを前に続けてるコードも普通にある というか「catch(std::exception& e) で e.what() を拾うっていうよくあるエラー処理のパターン」って何? それは単にstd::exceptionを拾ってるだけで、std::exceptionを拾ったらそりゃwhat()使うに決まってんだろ当たり前の話 : デフォルトの名無しさん [] 2018/01/08(月) 16:41:29.24 (´・∀・`)ヘェー あ、ちなみに俺はC++経験ないけど暇つぶしに横から煽ってるだけだから気にしないでね^^ : デフォルトの名無しさん (ワッチョイ cb75-rVxj) [sage] 2018/01/08(月) 16:47:22.54:LRSoqKZx0 誰もおまえを相手にしてない定期 : デフォルトの名無しさん (ワッチョイ 1f5b-5YeV) [] 2018/01/08(月) 17:58:52.06:u4QX+fVn0 > std::exception 派生にしといてもらわないとまともなエラーメッセージが出なかったりして困る。 まともなエラーメッセージって cout << runtime_error{"aho"}.what(); //aho これのことか?www おまえさんもしかしてsystem_errorが理解できなくて使ってないとかか? : デフォルトの名無しさん (ワッチョイ cb75-rVxj) [sage] 2018/01/08(月) 20:02:51.13:LRSoqKZx0 shamu_game? : デフォルトの名無しさん (ワッチョイ fb23-pzyA) [sage] 2018/01/08(月) 22:00:33.29:oHMwX23z0 固定小数点でやればいい : デフォルトの名無しさん (ワッチョイ 9f33-aKZ8) [sage] 2018/01/09(火) 02:11:08.05:VwLwz+6J0 後続の catch(...) で拾っても何が起こったのがわかんなくて困ることがあるって話。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ef6f-hL1C) [sage] 2018/01/09(火) 02:22:46.70:ODJfN40E0 カスが考えるより、 C++ の (ライブラリ) 設計を真似た方がマシやで : デフォルトの名無しさん (ワッチョイ 0bf6-5YeV) [] 2018/01/09(火) 10:16:09.54:BapSTNU/0 おまえが考えるより真似た方がマシなのは言われんでもわかってる : デフォルトの名無しさん (ワッチョイ fb23-pzyA) [sage] 2018/01/09(火) 10:43:54.73:2HziowuR0 バカの考え休むに似たりなる諺の発祥を追うような展開 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ef6f-hL1C) [sage] 2018/01/10(水) 23:37:28.15:pm7ONPKS0 せやろ。 だから真似るんや。 : デフォルトの名無しさん (ワッチョイ 1e8a-zuLH) [sage] 2018/01/11(木) 06:31:56.64:hO0Nh6Zo0 ファイルコピーをしたいんだけど改善点あるかな? 引数にはコピー元とコピー先のファイルパスを受けとる予定 もっと簡単な記法があると助かる... int copy(const char* old, const char* new) { FILE *fi, *fo; int ch; if(NULL==old||NULL==new){ return -1; } if ((fi = fopen(old, "r")) == NULL) { return -1; } if ((fo = fopen(argv[2], "w")) == NULL) { fclose(fi); return -1; } while((ch = fgetc(fi)) != EOF){ fputc(ch, fo); } fclose(fi); fclose(fo); return 0; } : デフォルトの名無しさん (ワッチョイ 5922-UJUP) [sage] 2018/01/11(木) 06:46:10.27:S67tZ9jk0 関数仮引数を動的検査している 終了ステートが負論理 system_errorを使っていない C++なのにfopen : デフォルトの名無しさん (ワッチョイ ea34-yppE) [sage] 2018/01/11(木) 06:55:18.88:bQ6Hme0D0 fpucとfgetcの繰り返しは短いファイルなら良いけど長いファイルだとCPU時間やたら食うだけのクソになるな : デフォルトの名無しさん (ドコグロ MM12-J7fK) [sage] 2018/01/11(木) 07:06:36.75:W1ryMExAM 改善点以前にコンパイルできるコードを持ってこいよ... > if ((fo = fopen(argv[2], "w")) == NULL) { あと文字単位のコピーは非効率だからせめて fread/fwrite にすべき また使える環境ならstd::filesystem::copyとかを使った方がいい ttp://en.cppreference.com/w/cpp/filesystem/copy : デフォルトの名無しさん (スプッッ Sd0a-zuLH) [sage] 2018/01/11(木) 07:23:14.65:1qlx+5WGd おお...気付かんかった C++なのにCで書いてあるからそもそもだめだったか... fread/fwriteでまず考えてみます FileCopyみたいなの欲しい : デフォルトの名無しさん (スプッッ Sd0a-zuLH) [sage] 2018/01/11(木) 07:33:45.62:1qlx+5WGd freadを考えてみたけどファイルサイズ不明な場合一度に読み込むバッファサイズとかどうなるん? : デフォルトの名無しさん (ワッチョイ 6a12-0PCX) [sage] 2018/01/11(木) 08:03:11.10:Nwq/3BKy0 各マシンでの最適なバッファサイズを逐一計算して求めるのがC++ : デフォルトの名無しさん (ドコグロ MM12-J7fK) [sage] 2018/01/11(木) 08:10:51.08:W1ryMExAM 環境わからんからなんとも言えんが10KB程度とっときゃいいんじゃね? : デフォルトの名無しさん (ワッチョイ a59e-/QpA) [sage] 2018/01/11(木) 09:08:45.65:lNcIwFA20 >関数仮引数を動的検査している 解説お願いします >終了ステートが負論理 ダメですか? >system_errorを使っていない ダメですか? >C++なのにfopen ダメですか? : デフォルトの名無しさん (ワッチョイ 4923-v0zr) [sage] 2018/01/11(木) 09:58:35.85:3a3jMnur0 fopen の引数は “rb” “wb” にしておくのが一般的 もし実用品として使うならなるべく大きな単位、 最低でも1Mバイト程度はまとめて読み書きすると良いよ。100Mでもいい。 細かい単位で読んで書いてを行うとHDDで大きなファイルを処理する場合とてつもなく遅くなる。 あとそういう書き方をしたいならそれは c++ ではなく c のスレ(あるのか知らんが)で聞く内容だと思う : デフォルトの名無しさん (ワッチョイ 5922-UJUP) [sage] 2018/01/11(木) 10:03:28.58:S67tZ9jk0 不勉強を恥じろボケ #include <filesystem> #include <iostream> auto copy(char const* src, char const* dst) { try { return std::filesystem::copy_file(src, dst); } catch(std::exception& err) { std::cerr << err.what(); } return false; } : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD) [sage] 2018/01/11(木) 10:19:39.83:jbhd+X3/0 filesystem がまだ使えない環境もあるかもしれんので小ネタを披露しておくと、 rdbuf を使う方法があるんや。 ifstream in(src); ostream out(dst); out << in.rdbuf(); みたいな要領な。 エラー処理は適宜うまいことやってくれ。 : デフォルトの名無しさん (ワッチョイ 4923-v0zr) [sage] 2018/01/11(木) 11:19:16.78:3a3jMnur0 パフォーマンス厨だが もし実用するなら setvbuf の rdbuf 版みたいなのがあるからそれも呼ぶべきと一言 : デフォルトの名無しさん [] 2018/01/11(木) 12:15:07.96 system("cp -f a.txt b.txt") でいいよね(´・ω・`) : デフォルトの名無しさん (スップ Sd0a-iyAC) [sage] 2018/01/11(木) 13:09:33.65:EPrc03FTd パフォーマンス厨なら リードとライトは別スレッドにするとか 読み書きサイズをクラスタサイズの倍数にするとか : デフォルトの名無しさん (ワッチョイ 7db3-JQPx) [sage] 2018/01/11(木) 13:20:11.53:eUOyd8Rr0 物理的に別のデバイスならリード/ライトは別スレッドで回したほうが速いだろうが、同じデバイスだとシングルスレッドでも大差ないだろうな あとはバッファサイズをできるだけ大きく取って、IOの発行数を抑えるのが王道かな : デフォルトの名無しさん (ワッチョイ 118a-QzTo) [sage] 2018/01/11(木) 14:07:04.69:VjH1J6HL0 fgetc、fputc?笑っちゃうくらいのダメダメ 俺の部下が万が一こんなコード書いてたらもう二度とそいつには仕事回さない : デフォルトの名無しさん (アウアウカー Sa55-EKU2) [] 2018/01/11(木) 14:43:56.63:EDmjquO+a プログラミングなんてどっかからコード引っ張って書けば一切手を汚すことなくできるのに何偉そうに言ってんだか... 英語読めないからって海外の文献を参考にせず自分で作ろうとする日本人の無駄な努力には呆れるよ アメリカ「アホだから」 韓国「レベル低いな」 インド「アジアの恥さらし」って思われてそう : デフォルトの名無しさん (アウアウカー Sa55-EKU2) [] 2018/01/11(木) 14:48:19.11:xUZeJB/aa 必死こいてコード書いてるやつ見ると情けない 世界65億人130カ国! お前の書いてるコードがまさか地球上にないものだと思ってんの? プログラマーの端くれが、そりゃトップで活躍するプログラマーなら常に新しいものを求めてるから生き残るけど... それ未満は10年後にはAI、またはコード共有化が進んで消えた職業になっているだろうね 悲しいけど現実見てくれ : デフォルトの名無しさん (ワッチョイ 5922-UJUP) [sage] 2018/01/11(木) 15:17:43.47:S67tZ9jk0 構ってちゃんが必死で連投してるな 著作権だの互換性だのと縁のない幸せ者だな : デフォルトの名無しさん (ドコグロ MM0a-5dQQ) [sage] 2018/01/11(木) 15:32:14.08:deNLSlJUM バカにするなら模範コードぐらい書いてやれよ。 : デフォルトの名無しさん (ワッチョイ ea34-yppE) [sage] 2018/01/11(木) 16:16:00.19:bQ6Hme0D0 テストしてないけど const size_t BUF_SZ=8192; char buf[BUF_SZ]; while(!feof(fi)){ size_t n=fread(buf,sizeof char,BUF_SZ,fi); if(n&&n!=fwrite(buf,sizeof char,n,fo)) {perror("ディスクエラー");return -1;} } WindowsならSHFileOperationかな? windowsでsystem叩くのは文字数制限とか""のくくり方とか微妙に怪しくてなんか嫌なんよね : ◆QZaw55cn4c (ワッチョイ 4a60-cexj) [sage] 2018/01/11(木) 16:40:41.56:P2yp909q0 お題: ttp://mevius.5ch.net/test/read.cgi/tech/1480579110/981 ">ttp://mevius.2ch.net/test/read.cgi/tech/1480579110/981 回答 ttp://mevius.2ch.net/test/read.cgi/tech/1480579110/997 ttp://mevius.2ch.net/test/read.cgi/tech/1434079972/30 ttps://ideone.com/LV4UdE while (bytesDataNum > 0) { int n; fin.read((char *)&buffer, std::min(N, bytesDataNum)); if (fin.fail()) return 0; n = fin.gcount(); fout.write((char *)&buffer, n); if (fout.fail()) return 0; bytesDataNum -= n; } return 1; } C++fstream/read/write を使うのだったらこんなところか : デフォルトの名無しさん (ワッチョイ ea34-yppE) [sage] 2018/01/11(木) 17:11:02.74:bQ6Hme0D0 せやね。エラーチェックは難しいのう。 const size_t BUF_SZ=8192; char buf[BUF_SZ]; while(!feof(fi)){ size_t n=fread(buf,sizeof char,BUF_SZ,fi); if(!n) {perror("ディスク読み込みエラー");return -1;} if(n!=fwrite(buf,sizeof char,n,fo)) {perror("ディスク書き込みエラー");return -1;} } : デフォルトの名無しさん (ワッチョイ 118a-QzTo) [sage] 2018/01/11(木) 17:32:08.08:VjH1J6HL0 さてそんなこと言われてもプラットフォームすら指定されていないし 例えばWindowsなら↓一発で済む話だよな ttps://msdn.microsoft.com/ja-jp/library/cc429185.aspx ファイルコピーごときに自前でコードなんか書いてられるかよ : デフォルトの名無しさん (ワッチョイ 5922-UJUP) [sage] 2018/01/11(木) 17:55:46.00:S67tZ9jk0 ISO/IEC14882の現行規格を差し置いて何を今さら。。。 Windowsなら純正コンパイラが対応しているだろうが : デフォルトの名無しさん (ワッチョイ 39eb-0PCX) [sage] 2018/01/11(木) 17:57:34.42:zx3yce6m0 ニートが部下がどうのこうの言ってて笑える : デフォルトの名無しさん (ワッチョイ 118a-QzTo) [sage] 2018/01/11(木) 18:03:32.29:VjH1J6HL0 お前の境遇はよく分かったから勝手に笑っとけ : デフォルトの名無しさん (ワッチョイ 9ee7-5dQQ) [sage] 2018/01/11(木) 19:35:14.53:ga/Vikbp0 C++17はともかく、boost::filesystemあたりが妥当だろうな。 : デフォルトの名無しさん (ワッチョイ 118a-QzTo) [sage] 2018/01/11(木) 19:49:16.17:VjH1J6HL0 boost依存は出来る限り避けたいなあ : デフォルトの名無しさん [sage] 2018/01/11(木) 21:10:50.25 またこの荒らしか Pythonのスレにも居たな : デフォルトの名無しさん [sage] 2018/01/11(木) 21:11:35.20 宛てな : デフォルトの名無しさん (ワッチョイ f17f-XFrZ) [sage] 2018/01/11(木) 21:40:25.98:x0MoCwhB0 とりあえずだ、fcloseの戻り値判定してないのも誰かつっこんでやれよ。。。 普段気にするところじゃないけど、わりと重要だよな?書き込み系のclose処理 : デフォルトの名無しさん (スプッッ Sdea-v0zr) [sage] 2018/01/11(木) 22:01:49.89:qoSoxo2Ld バッファサイズ8kだと少し大きなファイルコピーすると結構遅くなるよ 書き込み側はOSのキャッシュが効くからそうはならんだろうけど メモリはいっぱいあるんだし動的確保でもして一気に128Mくらい行くべし 簡単な処理はあまり外部依存しないコードにしたいよね : デフォルトの名無しさん (ブーイモ MM8e-TSXj) [sage] 2018/01/11(木) 22:07:24.01:1W7yBpCQM 関数のconst参照引数って コピーが重い方だと意味あるけど intとかsize_tとかだと全く意味ないの? : デフォルトの名無しさん [] 2018/01/11(木) 22:18:41.87 どっちが軽いか考えてみればいいじゃん (1) 常に8バイトの数値(アドレス)を引数として渡すためにコピーして、呼び出された関数側でそのアドレスから値をコピーして、処理に使う (2) 1〜8バイトの数値を引数として渡すためにコピーして、呼び出された関数側でその値を処理に使う : デフォルトの名無しさん (ブーイモ MM8e-TSXj) [sage] 2018/01/11(木) 22:39:48.54:1W7yBpCQM あーなるほど どこかの入門サイトで参照は変数の名前の置き換えって見たから コンパイル時に置き換わるもんだと思ってた 中身はアドレスなのね : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD) [sage] 2018/01/11(木) 23:12:05.45:jbhd+X3/0 内実としては参照はデリファレンスが自動化されたポインタと思ってもさしつかえないと思う。 ABI レベルで見ればポインタと互換性が有りさえするアーキテクチャも有る。 (言語仕様で保証しているわけではない。) : デフォルトの名無しさん (ワッチョイ 2a98-aOXM) [sage] 2018/01/12(金) 07:31:11.05:uquo2DHh0 はちみつ餃子はc++とscheme以外に何が使えるの? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD) [sage] 2018/01/12(金) 07:51:53.51:UAqgHqOi0 そんなこと知ってどうするんや : デフォルトの名無しさん (ワッチョイ 2a98-aOXM) [sage] 2018/01/12(金) 07:54:27.14:uquo2DHh0 好奇心ですよ好奇心 : デフォルトの名無しさん (ワッチョイ 39eb-0PCX) [sage] 2018/01/12(金) 07:54:44.69:xirJS+K20 マウント取りに行くんだろ : デフォルトの名無しさん (ワッチョイ 2a98-aOXM) [sage] 2018/01/12(金) 07:56:18.96:uquo2DHh0 そんなに悪いかよ じゃあ結構です : デフォルトの名無しさん [sage] 2018/01/12(金) 08:14:19.27 恥ずかしガンなって : デフォルトの名無しさん (ワッチョイ 8ae7-0PCX) [sage] 2018/01/12(金) 22:48:03.44:bn5FfgmT0 メンバがint2つくらいだとコピー渡しにするか参照渡しにするかちょっと悩む int4つくらいまでならキャッシュの関係でコピーのほうが早いとか聞いたことあるけど本当なのかね : デフォルトの名無しさん (ワッチョイ 3d7f-QpsD) [] 2018/01/12(金) 22:50:47.10:iYjzTsi20 FF15ではベクトルクラスはコピーにしたら劇的に早くなったと言っていた : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD) [sage] 2018/01/13(土) 01:03:55.02:SxvD86sf0 ゲーム機は尖ったアーキテクチャだったりするから……。 やってみないとわからん。 : デフォルトの名無しさん (ワッチョイ 7db3-KClg) [sage] 2018/01/13(土) 11:47:10.72:ARtU5FzH0 いやゲーム屋なら当たり前の話だよ IntelのCPUだってSSEあるし、__m128は出来るだけ値渡しした方がいいはず (もちろんインライン展開された場合は除く : デフォルトの名無しさん (ワッチョイ b5b3-QpsD) [sage] 2018/01/13(土) 12:22:15.14:nudx6UkM0 ソース教えて欲しい : デフォルトの名無しさん (ワッチョイ 3d7f-QpsD) [] 2018/01/13(土) 12:24:13.94:A7bueCBw0 ttp://jp.gamesindustry.biz/article/1609/16090501/ : デフォルトの名無しさん (ワッチョイ b5b3-QpsD) [sage] 2018/01/13(土) 12:34:35.23:nudx6UkM0 ありがとうございます : デフォルトの名無しさん (ワッチョイ 8abd-kJSF) [sage] 2018/01/13(土) 13:06:59.87:jbKISc2y0 インライン展開されたら値渡しだろうが参照渡しだろうが(あんま)関係無いんじゃ… ※ 参照と不十分なインライン展開が重なったときmemory aliasingによる最適化の阻害の危険性がちょっと増すぐらい : デフォルトの名無しさん (ワッチョイ 6d04-lXUw) [] 2018/01/13(土) 21:20:30.95:1X9BcJ9h0 クラスの継承について質問です。 スーパークラス(Super)を継承したサブクラス(Sub)内にて スーパークラスの関数func()をoverrideしています。 このサブクラスのfunc()の中で、 スーパークラスのfunc()をそのまま呼び出したいときは、 このようにする方法がありますよね。 void Sub::func(){ ____Super::func(); ____/*その他の処理*/ } しかし、これはサブクラス側の自由であり、 スーパークラスのfuncを実行しないこともできます。 そこで、サブクラスのすべてのfunc()で スーパークラスのfunc()が必ず処理されるように強制したいです。 これは可能でしょうか? 文字通りではなく、擬似的な手段で構いません。 よろしくお願いします。 : デフォルトの名無しさん (ワッチョイ 6d04-lXUw) [] 2018/01/13(土) 21:22:05.60:1X9BcJ9h0 ↑誤字修正致します。 ☓そこで、サブクラスのすべてのfunc()で ○そこで、すべてのサブクラスのfunc()で 申し訳ございません。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD) [sage] 2018/01/13(土) 21:27:01.54:SxvD86sf0 スーパークラスとかサブクラスとか言ってるやつにイラッとするのが C++er : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd0a-TJOf) [sage] 2018/01/13(土) 21:35:37.12:P0Ulq8gud メソッドチェーンというものを自作すればコントロール可能だが、ややこしい上にオーバーヘッドがある。 : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd0a-TJOf) [sage] 2018/01/13(土) 21:42:39.62:P0Ulq8gud ごめん、間違った。 メソッドチェーンじゃなくてC#デリゲート。 : デフォルトの名無しさん (ワッチョイ 6d04-lXUw) [] 2018/01/13(土) 21:45:31.67:1X9BcJ9h0 親と子の方が一般的ですか…? ありがとうございます! メソッドチェーン自体は知っていましたが、 それを活用するという考えはありませんでした。 これをヒントに色々試してみます。 : デフォルトの名無しさん (ワッチョイ 6d04-lXUw) [] 2018/01/13(土) 21:49:30.82:1X9BcJ9h0 入れ違いになってしまった。 デリゲートでしたか! : デフォルトの名無しさん (ワッチョイ 0aa8-XiqC) [sage] 2018/01/13(土) 22:24:25.09:B4wYryLR0 NVIでぐぐれや : デフォルトの名無しさん (ワッチョイ ea34-yppE) [sage] 2018/01/13(土) 22:56:11.51:6aei/M/30 Java厨絶滅成就(・人・)ナムナム : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-QpsD) [sage] 2018/01/13(土) 23:27:00.62:SxvD86sf0 スーパーというのはある集合を内包する、より大きな集合。 サブというのはある集合の一部の集合。 このとき、オブジェクト指向におけるクラスというのはインスタンスの集合とみなして、 サブクラスはスーパークラスの一部の集合とする考え方によってスーパー/サブと言ってる。 しかし、あるクラスをクラスが持つ機能 (メソッド) の集合と考えるとスーパー/サブが逆転する。 これはわかり難くて混乱の元。 という教訓に基づき基底クラス (base class) と派生クラス (derived class) という用語を C++ では採用した。 ちなみに C++ にはサブオブジェクトという用語はあって、 これはあるオブジェクトのデータメンバや基底のオブジェクトのこと。 : デフォルトの名無しさん [] 2018/01/14(日) 00:30:48.99 > ちなみに C++ にはサブオブジェクトという用語はあって、 > これはあるオブジェクトのデータメンバや基底のオブジェクトのこと。 へー、スーパークラス=基底クラスで、基底のオブジェクト=サブオブジェクトなのか これがスーパー/サブの逆転ってやつか 確かにわかりづらいね : デフォルトの名無しさん (ワッチョイ ea34-yppE) [sage] 2018/01/14(日) 00:33:39.99:ng7CbKaO0 スーパーとかダセェ : デフォルトの名無しさん (ワッチョイ 8abd-kJSF) [sage] 2018/01/14(日) 01:04:12.68:6MYOWaJx0 VC++だと派生クラスBarから基底クラスFooのメソッドfuncを __super::func() という風に __super キ──ワ──ドが使えるんじゃ! : デフォルトの名無しさん (ワッチョイ 8ae7-0PCX) [sage] 2018/01/14(日) 05:55:30.36:06kwM4S00 privateなvirtual funcImpl()をカスタマイズポイントとして派生クラスに自由にオーバーライドさせて 基底クラスのpublicなfunc()でで言うところのSuper::func()相当の処理してからfuncImpl()を呼ぶ (func()自体はnon-virtual) ってのがまあ常套手段だと思うけどそれだと困る? : デフォルトの名無しさん (ワッチョイ ad7e-UJUP) [sage] 2018/01/14(日) 06:37:11.95:N+BeAo4b0 多重継承してるとあかんけどな : デフォルトの名無しさん (ワッチョイ 6a12-0PCX) [sage] 2018/01/14(日) 10:01:41.75:Z2heVtXU0 多分ちげーんだろーな C++のサブオブジェクトはサブリミナルとかのサブだろ オブジェクトに潜んでる何かだろ つい最近にもあった潜性/顕性の潜性の方だろ 無理に対義語作るならジス(this)・オブジェクトかメイン・オブジェクトじゃねえの : デフォルトの名無しさん (ワッチョイ 8ae7-0PCX) [sage] 2018/01/14(日) 12:55:55.66:06kwM4S00 サブセットのサブだろ あるオブジェクトの一部分がサブオブジェクト 対義語はやっぱりスーパーだよ : デフォルトの名無しさん (ワッチョイ ad7e-UJUP) [sage] 2018/01/14(日) 13:03:04.48:N+BeAo4b0 部分オブジェクトの反対語をスーパーオブジェクトとは言わん : デフォルトの名無しさん (ワッチョイ 8ae7-0PCX) [sage] 2018/01/14(日) 13:14:31.73:06kwM4S00 でもサブセットの反対はスーパーセットだろ : デフォルトの名無しさん (ワッチョイ 4923-IjLh) [sage] 2018/01/14(日) 13:32:41.21:0BOIhrZQ0 subset, subhuman などに使われる前置詞 sub だろ 語義は「不完全な」だ : デフォルトの名無しさん [] 2018/01/14(日) 14:17:12.73 じゃあ対義語はconcreteか : デフォルトの名無しさん (ワッチョイ 8abd-kJSF) [sage] 2018/01/14(日) 15:03:36.89:6MYOWaJx0 集合は要素の重複を認めないのでスーパーオブジェクトとかサブオブジェクトとか言う方が異端なのでは… : デフォルトの名無しさん (ワッチョイ 8abd-kJSF) [sage] 2018/01/14(日) 15:06:32.87:6MYOWaJx0 英語圏の方々の言語感覚は正直ワカランこともあるが 「具体的な」(Concrete)と「完全な」(Complete)は多分使い分けられれているのではないか : デフォルトの名無しさん (ワッチョイ 8abd-kJSF) [sage] 2018/01/14(日) 15:11:45.36:6MYOWaJx0 クラスcがクラスaの単一継承なら { クラスcに属するオブジェクト } ⊂ { クラスaに属するオブジェクト } ・・・ (1) なのでa::func()はcから見て__super::func()で正しいが、 クラスcがクラスaとbの間の子なら、(1)および { クラスcに属するオブジェクト } ⊂ { クラスbに属するオブジェクト } ・・・ (2) はどっちも成立しないから__superキーワードが使えないのはある意味当然で整合的と言える、 : デフォルトの名無しさん (ワッチョイ 8abd-kJSF) [sage] 2018/01/14(日) 15:30:00.21:6MYOWaJx0 スマン訂正 クラスcがクラスaとbの間の子(で公開継承)なら、(1)と(2)が両方成立するんだったorz (cのインスタンスはaのインスタンスとしてもbのインスタンスとしても扱える ついでに補足で、は「包含関係の意味でスーパーとかサブとか言うなら」異端という意味 : デフォルトの名無しさん (ワッチョイ ad6a-UJUP) [sage] 2018/01/14(日) 21:03:41.51:66CfjFh30 incompleteとは違うね : ◆QZaw55cn4c (ワッチョイ 4a60-cexj) [sage] 2018/01/14(日) 23:25:18.74:ekN/OeXo0 std::set にて std::set<int> に特化して実装しようとしていますが、 ここで private メンバーである iterator positionToInsert(int n) を記述しようとして、はまっています iterator posisionToInsert(int n) : n を挿入するべき内部テーブルの位置(イテレータ)を返す n がすでに set にあったら nullptr を返す としたかったんですが ・nullptr を iterator に代入できない ・そもそも コンテナ.end() が nullptr だ(無理にキャストしてみて分かった)…@ 返り値を複数にするしかないのかな… std:set.insert() も pair を返すみたいですし @は規格で決まっているのでしょうか?処理系依存でしょうか? ttps://teratail.com/questions/25576 : デフォルトの名無しさん (ワッチョイ 5d8a-QpsD) [sage] 2018/01/15(月) 00:07:45.76:akdFGtdY0 iteratorはポインタちゃうで : デフォルトの名無しさん (ワッチョイ ea34-yppE) [sage] 2018/01/15(月) 00:52:09.62:p80Tlp9s0 変なメンバ関数つくるよりfind使っておけよトーシロー 理解できないなら余計な機能追加はするな 余計にわからなくしてプログラムを目茶苦茶にするな : デフォルトの名無しさん (ワッチョイ ea34-yppE) [sage] 2018/01/15(月) 00:54:40.48:p80Tlp9s0 findじゃないなlower_boundで位置は把握できるだろこのハゲー : 片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ b5b3-TJOf) [sage] 2018/01/15(月) 01:03:25.78:egVCSXHP0 std::setは挿入する位置を気にしないはずだが。設計思想が間違っている。 : デフォルトの名無しさん (ワッチョイ c576-iyAC) [sage] 2018/01/15(月) 08:06:37.84:ss1wTrUG0 おれば後ろより前に挿入する方が好き : ◆QZaw55cn4c (ワッチョイ 4a60-cexj) [sage] 2018/01/15(月) 10:02:53.84:aMLeGifE0 これから作るその find() の内部で iterator を返す private な関数を作ろうとしているのです 二分探索で find() するのも、二分探索で挿入先を探すのも、やることは一緒ですよね lower_bound() も、これから記述するのです std::set は挿入する要素が互いに比較できることを必要としています 挿入先の位置を求めるメンバ関数は、あくまでも private としています : デフォルトの名無しさん (ワッチョイ 4923-IjLh) [sage] 2018/01/15(月) 11:18:44.64:WC62iZPf0 まずは iterator じゃないものを iterator で返すという発想をやめて pair でも参照型引数でもいいから結果と成否は別に返すのが良いと思う : デフォルトの名無しさん (ブーイモ MM8e-BVdN) [sage] 2018/01/15(月) 14:02:37.88:2ZVCG19QM > end()がnullptr たんに指し示した先のデータが0だったってだけじゃないの? 双方向イテレータとして使用可能なのでnullptrだと上手くいかないと思うよ。 : ◆QZaw55cn4c (ワッチョイ 4a60-cexj) [sage] 2018/01/15(月) 18:11:46.06:aMLeGifE0 ,945-946 コメントありがとうございます はい、結果と成否をわけることにしました ttp://mevius.2ch.net/test/read.cgi/tech/1434079972/33 : デフォルトの名無しさん (ワッチョイ 3946-TSXj) [sage] 2018/01/15(月) 22:43:32.66:9+FUM4nJ0 class Foo{ void function(){ hoge.exe(); } private: Hoge hoge; } と class Foo{ void function(Hoge& hoge){ hoge.exe(); } } どっちが最適化かかりやすい? : デフォルトの名無しさん (ワッチョイ b623-aOXM) [sage] 2018/01/15(月) 22:51:21.17:aACM4QK20 ほぼ変わらないと思うけど スタックに積まない分前者かなと思う : デフォルトの名無しさん (ワントンキン MM7a-Rz0Q) [sage] 2018/01/15(月) 23:37:09.62:GwTCehVfM ただのラッパなら自由関数にしれ : デフォルトの名無しさん (ワッチョイ 8acb-dIle) [sage] 2018/01/16(火) 00:21:59.76:683mXkIO0 情報処理における罪の多くは最適化の名のもとでなされる。 そこはメンテナンス性の高い方を選ぶべき。 これから何千行のコードを書こうとしてるのか知らないけど、いちいちそんなことに頭使ってたら禿げるよ。 : デフォルトの名無しさん (ワッチョイ add5-UJUP) [sage] 2018/01/16(火) 06:29:10.56:zATeRHxg0 データメンバへのアクセスはthis経由なので ポインタにオフセットを書けて逆参照という動作になる 左辺値参照の場合はオフセットなしで逆参照 いずれにせよ仮引数を受け取るという点は同じ動作だ 最適化という観点からはデータメンバはrestrictが付いているようなもので 若干有利ではないかな ただしデータメンバの場合は全ての非静的メンバ関数が関与する可能性があり 仮引数の場合は当該関数のみというアクセス範囲の違いがあるので 最適化する以前の、基本的な設計で選ぶべきだろう : デフォルトの名無しさん (ワッチョイ a99f-IxFb) [] 2018/01/16(火) 06:49:48.40:TUkAINts0 messageboxで変数は表示できますか。 : デフォルトの名無しさん (ワッチョイ add5-UJUP) [sage] 2018/01/16(火) 07:53:30.35:zATeRHxg0 できるけど、モーダルでもモードレスでもかなりうぜえぞ template <typename T> void display(T const& variable) { stringstream ss; ss << variable; MessageBox(NULL, ss.str().data(), typeid(variable).name(), MB_OK); } : デフォルトの名無しさん (ワッチョイ e531-BgxS) [sage] 2018/01/16(火) 17:35:22.56:GcKo/GK70 質問させてください。VS2008で仮想継承使っていたら以下の警告が出たんですが、警告が出ないようにするにはどうすればいいでしょうか? warning C4250: 'CHoge' : 2 つ以上のメンバが同じ名前を持っています。'CTest1::CTest1::Draw' から継承します。 ---------------------- class ITest1 { public: virtual void Draw() = 0; }; class CTest1 : virtual public ITest1 { public: virtual void Draw() { printf("Draw\n"); } }; class ITest2 : virtual public ITest1 { public: virtual void Func() = 0; }; class CHoge : public ITest2, public CTest1 { public: virtual void Func() {} }; : デフォルトの名無しさん (ワッチョイ add5-UJUP) [sage] 2018/01/16(火) 18:00:29.71:zATeRHxg0 VS2017ではデフォでは何も言ってこず /W4にするとC4250が出る warningだろ? errorは直すしかないが warningは内容を読んで理解したうえでどうするかを判断するものだ 必ず消そうと思うな、キリねえぞ 意味を理解しないからdisられたと思っちまうんだよ : デフォルトの名無しさん (ワッチョイ add5-UJUP) [sage] 2018/01/16(火) 18:02:50.15:zATeRHxg0 どうしても「消すこと」が絶対ならこれやっとけ #pragma warning(disable : 4250) : デフォルトの名無しさん [] 2018/01/16(火) 18:08:17.81 なんでITest2を仮想継承してないの? : デフォルトの名無しさん (スプッッ Sdea-IjLh) [sage] 2018/01/16(火) 18:11:37.58:JbjA4DiDd この場合どっちを継承するとかの問題もないし 普通にこっちにも virtual つければいいだけだと思うが vc だと違うのか? >class CHoge : public ITest2, public CTest1 { >public: virtual void Func() {} >}; こう class CHoge : virtual public ITest2, virtual public CTest1 { public: virtual void Func() {} }; : デフォルトの名無しさん (ワッチョイ add5-UJUP) [sage] 2018/01/16(火) 18:30:21.88:zATeRHxg0 おまえら質問者に教えて貰うあべこべになりそうだなw : デフォルトの名無しさん (ワッチョイ ea34-yppE) [sage] 2018/01/16(火) 18:55:59.62:Ngn2q6Fj0 iTest2のDraw()が零でCTest1のDraw()が定義されているからそりゃ衝突する罠 : デフォルトの名無しさん (ワッチョイ e531-BgxS) [sage] 2018/01/16(火) 20:35:10.19:GcKo/GK70 VS2017では警告出ないのですか。試して頂いてありがとうございます。 自分なりに意味を考えたところ、 無視して大丈夫そうという結論に至りました。 #pragma で消す事にします。 1つにしたいのはITest1::Drawだけなので、 ITest1のみ仮想継承しました。 試してみましたが、同じ警告が出てしまいました。 衝突した結果、有効な方が選択されるので特に問題なさそうな気がしますね。 : デフォルトの名無しさん (ワッチョイ 2a98-4pcN) [sage] 2018/01/17(水) 12:08:14.47:iC3iQa/y0 boost::spirit::qiで boost::spirit::qi::rule<std::string::iterator, std::string()> hogehoge; としてとき std::string() のようにかっこ付でテンプレート引数に与えていますが このかっこ付で型名をあたえる方法はどのように活用できますか?(一般論として : デフォルトの名無しさん (ワッチョイ 0aa8-XiqC) [sage] 2018/01/17(水) 13:05:18.47:K0Busrpg0 それは特別な方法ではなく普通の『引数をとらずstringを返す関数型』の指定でしかないから 一般論として普通はテンプレートで関数の型を明示的に指定したいときに活用する : デフォルトの名無しさん (ワッチョイ 2a98-4pcN) [sage] 2018/01/17(水) 14:11:03.20:iC3iQa/y0 ありがとうございます。 引数のシグネチャに戻り値を加えたものってことでいいんですかね? これで関数の入出力の型をテンプレートが知ることができるということですか : デフォルトの名無しさん (ワッチョイ b5b3-QpsD) [sage] 2018/01/17(水) 22:57:17.27:xvLKn6F+0 ビルドに対するプロファイラってありますか? : デフォルトの名無しさん (ワッチョイ 9d23-bNKV) [sage] 2018/01/18(木) 11:15:13.47:4g2nAWWS0 ttps://stackoverflow.com/questions/13559818/profiling-the-c-compilation-process : デフォルトの名無しさん (ワッチョイ 25b3-GP+B) [sage] 2018/01/18(木) 20:20:38.59:YPPczFY+0 ありがとうございます : デフォルトの名無しさん (ワッチョイ a37f-QRuf) [sage] 2018/01/19(金) 10:25:28.43:2zN3bRh70 質問お願いします。 装置制御のプログラムを組みたいと思っているのですが、最適な言語はC++でいいのか迷っています。 内容としては、イベントを開く際に、一軒家の室内灯のオンオフ制御や、スイッチの信号受信、信号を送信しての仕掛の動作などです。 現在理解している言語はVBAのみです。 どの言語を学習するにしろ、ほぼ一からの学習になると思うので、最適な言語は何なのか調べているところです。 最適なものはC++なのか、それとも他にあるのか教えて頂けたら幸いです。 : 愛知人 [sage] 2018/01/19(金) 10:28:45.88:96/ZCuec そんなんハードウェアによるだろ : デフォルトの名無しさん (オイコラミネオ MM79-dWYP) [sage] 2018/01/19(金) 10:43:53.96:ZWDiJg2ZM 対象は全く問題ないがC言語を理解したあとでないといきなりC++を学うのは危険です。 : デフォルトの名無しさん (スップ Sd03-kqG9) [] 2018/01/19(金) 10:50:54.04:5gb0XR0Xd C++がベスト : デフォルトの名無しさん (ワッチョイ f5bb-nLHG) [sage] 2018/01/19(金) 10:57:22.28:jSqbt2Li0 CPUは何を使う予定? : デフォルトの名無しさん (ワッチョイ a37f-QRuf) [sage] 2018/01/19(金) 11:02:40.08:2zN3bRh70 ハードは管理用に新調する予定なので、装置制御に最適なものを合わせて教えて頂けますか? : 愛知人 [sage] 2018/01/19(金) 11:09:04.52:96/ZCuec どうやって照明をオンオフするの? 元からコンピュータによる照明制御の仕組みが備わってる建物か照明自体に無線通信機能のついてるやつじゃないと無理じゃね? : 愛知人 [sage] 2018/01/19(金) 11:11:31.52:96/ZCuec それか物理的にスイッチを押す装置を取り付けるか... : デフォルトの名無しさん (ワッチョイ a37f-QRuf) [sage] 2018/01/19(金) 11:15:52.48:2zN3bRh70 元から付いている室内灯の制御は無理ということでしょうか? それであればLEDを後付けして、擬似的な室内灯として制御したいです。 : 愛知人 [sage] 2018/01/19(金) 11:21:06.90:96/ZCuec LEDを後付けとは?照明用のLED並みに明るいLEDを部屋に置くということ? 照明をリモコン化する商品はたくさんあるようだからそれらを使って既存の照明を無線化することもできるが。 : デフォルトの名無しさん (ワッチョイ a37f-QRuf) [sage] 2018/01/19(金) 11:26:16.24:2zN3bRh70 ただオンオフするだけではなく、少し点滅させるような演出も入れたいんです。 無線の照明だとそのような演出は難しいですよね? : デフォルトの名無しさん (ワッチョイ f5bb-nLHG) [sage] 2018/01/19(金) 11:28:53.86:jSqbt2Li0 点滅ってパルス幅変調? : 愛知人 [sage] 2018/01/19(金) 11:32:59.39:96/ZCuec 無線のでもオンオフを繰り返せばいいはず。 後付けの照明って室内灯レベルには照らせなさそうだがそれでも問題ない? : デフォルトの名無しさん (ワッチョイ a37f-QRuf) [sage] 2018/01/19(金) 11:50:52.24:2zN3bRh70 ホラー映画でよくあるような、蛍光灯がジジジ・・・ジジ・・・ジとする点滅をさせたいです 明るさとしては通常の室内灯レベルは求めませんが、出来る限り明るくしたいです : デフォルトの名無しさん (ワッチョイ 0b79-2tnM) [sage] 2018/01/19(金) 12:08:12.88:L4zuKtC40 Arduino初心者熱烈大歓迎質問スレ part20 ttps://rio2016.5ch.net/test/read.cgi/denki/1514503488/ : 愛知人 [sage] 2018/01/19(金) 12:08:27.47:96/ZCuec いい照明装置が見つかったとして、こういうSSRとArduinoを使ってAC電源を制御するとか。Arduinoなら言語は必然的にC言語。 ttp://akizukidenshi.com/catalog/g/gI-08620/ : デフォルトの名無しさん (ワッチョイ f5bb-nLHG) [sage] 2018/01/19(金) 12:09:17.61:jSqbt2Li0 なるほど、明るさをじわーっと変化させたりじゃないのね で、C++の話に戻るけど C++を使うならC++コンパイラがあるCPUを選ぶ必要があるぞ たとえばg++を使うならARMはいいけどPIC16F84なんかは無理 : デフォルトの名無しさん (ワッチョイ a37f-QRuf) [sage] 2018/01/19(金) 13:49:09.01:2zN3bRh70 Arduinoという物を使うと良いんですね。 ありがとうございます。 Arduinoについて調べてみます。 : デフォルトの名無しさん (ドコグロ MM79-z/Ib) [sage] 2018/01/19(金) 15:12:20.32:yMU0ke2CM Wifi対応のLED電球をスマホで制御ならやったことある この程度でいいなら制御側はなんでもいい気がする
凡例:
レス番
100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている
名前
名無しさん (青) → sage のレス
名無しさん (緑) → age のレス
ID
ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID
このページは2ch勢いランキング が作成したアーカイブです。削除についてはこちら 。