1 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:17:05.84 ID:wmfpIKt/.net] 次スレを立てる時は本文の1行目に以下を追加して下さい。 !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part137 (正しくはpart138) mevius.5ch.net/test/read.cgi/tech/1535353320/ C++相談室 part139 https://mevius.5ch.net/test/read.cgi/tech/1538755188/ C++相談室 part140 https://mevius.5ch.net/test/read.cgi/tech/1547326582/ C++相談室 part141 https://mevius.5ch.net/test/read.cgi/tech/1550772463/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.103【環境依存OK】 https://mevius.5ch.net/test/read.cgi/tech/1530384293/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) ----- テンプレ ここまで ----- - VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
320 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 19:59:29.56 ID:fJF68+PR.net] 今もしインターネットが完全にシャットダウンされると プログラム書けなくなるプログラマけっこう数いるだろうな
321 名前:はちみつ餃子 mailto:sage [2019/04/17(水) 20:18:46.81 ID:UWuCQ9XR.net] >>320 cpprefjp はとりあえず手元にダウンロードしてあるけど。
322 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 20:35:09.94 ID:P5fp2rRi.net] どうやってダウンロードしたの? 巡集じゃできなかった…
323 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 20:39:18.77 ID:WWgiT6Ow.net] githubじゃない?
324 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 21:27:54.32 ID:P5fp2rRi.net] そうなんだ、ありがとう
325 名前:デフォルトの名無しさん [2019/04/19(金) 02:16:29.43 ID:/DYxLH/O.net] どういたしまして。
326 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 08:26:54.03 ID:gmGy9oTC.net] 江添は職質裁判でも、不当判決が出たので控訴するみたい 警官は、複数人で口裏合わせするから、民間人は勝てない 漏れもやられたけど、酒酔い運転でも、漏れが機械に息を吹き掛けても、ランプが点かない。 そこで、警官がクルッと後ろを向くと、ランプが点く そっと見たら、酔っ払い警官が、自分で息を吹きかけて、ランプを点ける こういう裁判で争っている人もいるけど、 警官は複数人で口裏合わせするから、絶対に勝てない! 警官は皆、このやり方で出世しとる
327 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 08:33:03.47 ID:PWe5dNBv.net] ありゃ普通に対応してりゃ済む話だと思うがね。 やってることは完全に当たり屋だろ。
328 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 09:27:15.01 ID:biH+fvR8.net] >>326 Rubyバカの人か。相変わらず思い込みが激しく、言っていることが滅茶苦茶だな。
329 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 12:05:02.85 ID:rPSCrubJ.net] どんだけ江添好きなの?w
330 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 13:28:48.91 ID:W5tFDDw/.net] 日本でC++真剣にやってるのって彼だけだし
331 名前:はちみつ餃子 mailto:sage [2019/04/19(金) 13:41:25.74 ID:mypEidUJ.net] だけ、というのは言い過ぎだと思うが、 日本語で最新の C++ の事情を本にしているのは江添くらいしかいないからなぁ。 江添本人は自分のことを実務家ではなく教育者だと考えているようだし、 (肩書は何なんだろ? エヴァンジェリストのようにも見えるが……) 今のポストは妥当なとこだろ。 そのままやってくれればありがたいもんだ。
332 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 13:41:50.58 ID:i8rhoxHy.net] つまり他の日本人は竹刀とか木刀ってことか。
333 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 13:50:35.12 ID:rPSCrubJ.net] 江添個人の裁判は完全にスレチなんだよなあ 仮に違法な取り締まりだと判断されても警察のやり方が改まるわけもないだろうし
334 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 14:15:26.68 ID:JVA9qfGz.net] 江添すなわちC++なのだから 江添の話題は全てC++の話題だょ
335 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 15:08:33.32 ID:j263LUSd.net] 宗教の話はよそでやってくれないか
336 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 15:16:01.57 ID:JwgM4FAg.net] もう少しc++の話をしてくれと思う事もある
337 名前:デフォルトの名無しさん [2019/04/19(金) 18:50:10.05 ID:/DYxLH/O.net] はちみつさんも真剣にやってると思います。
338 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 19:16:13.92 ID:yj9Iz3m1.net] こんな事言うと勘違いされそうだが、はちみつ餃子はちゃんとしてると思うよ C++に関しておかしなことは言っていない ていうか、はちみつ餃子ってものすごい不味そうなんだがそんなの本当にあるのだろうか・・?
339 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 19:17:39.46 ID:j263LUSd.net] 肉料理にはちみつを入れること自体はわりと普通 量の問題
340 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 19:28:19.17 ID:PWe5dNBv.net] いや明らかに開発してねーだろって感覚じゃねーか。 まあここならそれでもいいんだろうけれど。
341 名前:はちみつ餃子 mailto:sage [2019/04/19(金) 19:51:37.44 ID:mypEidUJ.net] >>338 ググればわかるけどはちみつ餃子はそこそこありふれた料理だよ。 その昔、 higepon が自分でもどうして higepon などと名乗ったかわからない と述べていたので、そのくらい意味不明感じにしようと思って適当に 思いついた語をコテハンにした。 Scheme スレが本来の住処なので当初は SCHEME餃子 と名乗っていたけど、 他のスレにも顔を出すようになったのでなんとなくはちみつ餃子になった。 およそ意味不明な組合せにしたつもりだったんだけど、 実際にある料理だとは後になってから知った。
342 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 21:11:54.81 ID:fEN/Hp+M.net] initializer_listを引数に取るオブジェクトを引数に取る関数で 下記のケースでUniversal Initializationが効かないのですが 何かいい手はないでしょうか using KVPCollectionType = std::map<std::string, std::string>; void f(const KVPCollectionType&& kvps = {}); f(); // OK f({}); // OK f(KVPCollectionType{{"key1", "value1"},{"key2","value2"}}); // OK f({{"key1", "value1"},{"key2","value2"}}); // NG これをやりたい!!
343 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 21:13:17.21 ID:UQpKfTQY.net] エピ…いや何でもない
344 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 21:17:05.52 ID:fEN/Hp+M.net] すみません、訂正です × void f(const KVPCollectionType&& kvps = {}); ○ void f(const KVPCollectionType& kvps = {});
345 名前:デフォルトの名無しさん [2019/04/19(金) 21:22:53.30 ID:/DYxLH/O.net] アークエンジェルに搭載されてるstd::variant<>。
346 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 22:49:42.25 ID:DWxUZ3pl.net] wandboxで試したらclangでもgccでもc++11 -pedanticで通ったけど?
347 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 00:01:37.25 ID:a7z6m7l4.net] ごめんなさい、ごめんなさい。本当にごめんなさい。 勝手に脳内で要約したのが間違えまくってました 正確には以下の通りです。 #include <map> #include <memory> using KVPCollectionType = std::map<std::string, std::string>; class c { public: c(const KVPCollectionType&& kvps = {}){} }; int main() { auto ok = std::make_shared<c>(KVPCollectionType{{"key1", "value1"},{"key2","value2"}}); // OK auto ng = std::make_shared<c>({{"key1", "value1"},{"key2","value2"}}); // NG!!! }
348 名前:デフォルトの名無しさん [2019/04/20(土) 10:47:21.77 ID:5oa1AZjP.net] 全てのバグを絶滅せよ。 「今日は死に日和」好評発売中。
349 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 11:08:43.59 ID:3kBWifqd.net] C++11や14を使ってる人、コンパイラは何ですか。
350 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 11:25:30.96 ID:m+a2EYsq.net] ゲームエンジン作ってる人いますか
351 名前:デフォルトの名無しさん [2019/04/20(土) 11:30:38.02 ID:5oa1AZjP.net] clとgcc。
352 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 13:20:15.93 ID:lwVpLCzw.net] c+11以降はバージョン違うと全く別のコンパイラ
353 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 13:23:19.12 ID:8Vh3F1FF.net] Twitchでプログラミングしてるやつの中でゲームエンジンも居たような
354 名前:はちみつ餃子 mailto:sage [2019/04/20(土) 13:30:02.11 ID:7hm/FBJ7.net] >>347 テンプレートの推論ルールとして「関数テンプレートのパラメータとして波カッコの初期化子リストを渡して型推論させることはできない。」 ということになっている。 ( https://cpprefjp.github.io/lang/cpp11/uniform_initialization.html ) make_shared の実際の型は template <class T, class... Args> shared_ptr<T> make_shared(Args&&... args); なので、 このとき Args が推論できない以上はどうにもならん。 型を固定した専用の関数をはさんでこんな感じにするくらいのことしか思いつかないな。 #include <map> #include <memory> #include <initializer_list> #include <utility> using KVPCollectionType = std::map<std::string, std::string>; class c { public: c(const KVPCollectionType&& kvps = {}){} c(const std::initializer_list<typename KVPCollectionType::value_type>){} }; std::shared_ptr<c> make_c_shared(std::initializer_list<typename KVPCollectionType::value_type> a) { return std::make_shared<c>(std::move(a)); } std::shared_ptr<c> make_c_shared(KVPCollectionType&& a) { return std::make_shared<c>(std::move(a)); } int main() { auto ok = make_c_shared(KVPCollectionType{{"key1", "value1"},{"key2","value2"}}); auto ng = make_c_shared({{"key1", "value1"},{"key2","value2"}}); }
355 名前:はちみつ餃子 mailto:sage [2019/04/20(土) 13:32:51.70 ID:7hm/FBJ7.net] >>347 >>354 呼出す側で auto ng = std::make_shared<c, std::initializer_list<typename KVPCollectionType::value_type>>({{"key1", "value1"},{"key2","value2"}}); というように型を明記してもかまわないけど、使う側でいちいちこんなこと書きたいわけじゃないだろ?
356 名前:はちみつ餃子 mailto:sage [2019/04/20(土) 13:35:42.76 ID:7hm/FBJ7.net] >>347 ちゃんと考えたら >>354 はいらんことしとるな…… これで充分か #include <map> #include <memory> #include <utility> using KVPCollectionType = std::map<std::string, std::string>; class c { public: c(const KVPCollectionType&& kvps = {}){} }; std::shared_ptr<c> make_c_shared(KVPCollectionType&& a) { return std::make_shared<c>(std::move(a)); } int main() { auto ok = make_c_shared(KVPCollectionType{{"key1", "value1"},{"key2","value2"}}); auto ng = make_c_shared({{"key1", "value1"},{"key2","value2"}}); }
357 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 08:19:35.76 ID:jJhiZdMc.net] >>354-356 ありがとうございます、その手を使わせていただきます 状況によって推定ルールが変わるのはやめて欲しいなってちょっと思ったんですけど。
358 名前:デフォルトの名無しさん mailto:sage [2019/04/22(月) 23:55:58.01 ID:uyfay/gq.net] メンバアクセスにthis->つける?
359 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 00:01:58.24 ID:cW1os5L0.net] エディタの補完機能使いたいときにたまにそうやって補完して最後に消す。 が、たまに忘れる。
360 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 00:02:35.52 ID:BSgCsXpz.net] IDEの都合で付ける事が良くある 付けないと補完候補多すぎて
361 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 00:09:08.10 ID:JKfCESEZ.net] ああなるほど 補完候補を絞るのには便利ですね
362 名前:デフォルトの名無しさん [2019/04/23(火) 18:16:01.64 ID:Wx+D+gzo.net] メンバであるという保証ができるので付ける
363 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 19:39:28.32 ID:cE0Yu4R7.net] メンバ名は頭にm_付けろみたいなクソルールよりずっといいと思うので付けるべき
364 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 19:42:38.83 ID:JKfCESEZ.net] 仮引数と別の名前つけるのだるいからm_は別に良いと思う
365 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 20:02:01.86 ID:8XemHsTC.net] メンバ変数に専用の色付けたらいいじゃん
366 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 20:13:43.06 ID:sktjqElV.net] 引数そのままメンバに入れるなら引数に_つけてvar(_var)って初期化してるわ
367 名前: mailto:sage [2019/04/23(火) 20:16:13.74 ID:JSYnwir1.net] >>366 それって var(var) でも問題ないんですよ…
368 名前:さまよえる蟻人間 mailto:sage [2019/04/23(火) 21:18:06.78 ID:DAl4rXky.net] バーバー
369 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:32:08.36 ID:BSgCsXpz.net] >>367 綴り間違えたら悲惨なことになった
370 名前:デフォルトの名無しさん [2019/04/23(火) 21:34:08.78 ID:3k1+3l7a.net] ハンガリアン記法は、入力補完のないエディタ上での可読性を高めるのに役立ってるでしょ。今でも。
371 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:35:06.30 ID:8XemHsTC.net] ゴミ使ってる奴のことなんか知らん
372 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:36:10.37 ID:BSgCsXpz.net] あれ可読性落ちるだろ
373 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:39:11.30 ID:lLaZpSEH.net] 定期的にunsignedとsigned混在させてハマるアホをみるとハンガリアン必要だと思うわ
374 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:40:37.34 ID:lAbUfbw7.net] C#で入力補完のないエディタがどうとかさすがにナンセンスでは だってvisual studio使うじゃん
375 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:41:16.53 ID:ZkNEZW45.net] どっちでもいいわ。 大抵の場合そんなとこに気を使わんといかんコードになってることのが問題。
376 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:45:47.89 ID:lLaZpSEH.net] >>375 こういうやつがそのうちハマって丸1日つぶしたりするんだよなw
377 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:51:11.17 ID:8XemHsTC.net] >>373 関係なくて草
378 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:55:03.06 ID:lLaZpSEH.net] 関係あることわかってなくて草
379 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:55:54.04 ID:8XemHsTC.net] 黙ってろゴミw
380 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:59:25.62 ID:ZkNEZW45.net] >>376 だから人を嵌めるようなコード書くなつってんだよばか。
381 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 22:06:36.15 ID:lLaZpSEH.net] >>380 コードの問題じゃなくて言語仕様の問題だから こういうえらそうなくせに何もわかってないカスが一番始末に困る
382 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 22:53:19.60 ID:ZkNEZW45.net] いつの間にかハンガリアンが言語仕様になってた。。
383 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 23:10:13.77 ID:lLaZpSEH.net] ハンガリアンも防御的なプログラミングと考えたら悪くないよ 成り立ち調べてみな でも基本型とポインタだけだな クラスには無用だと思う
384 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 23:27:23.37 ID:8XemHsTC.net] てめーらはまともなIDEかエディタ使ってねえのかよ
385 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 23:37:57.35 ID:JKfCESEZ.net] むしろVSがないと何も書けない
386 名前:デフォルトの名無しさん [2019/04/23(火) 23:55:15.96 ID:UPBQPhwq.net] VSがあっても何も書けない。
387 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 23:55:30.60 ID:ZkNEZW45.net] c++みたいに型情報ありがデフォルトの言語でハンガリアンとか二重メンテもいいとこだわ。
388 名前:デフォルトの名無しさん mailto:sage [2019/04/24(水) 01:00:02.97 ID:pnt3hUol.net] 前方宣言したクラスをTにしたスマポメンバでコンパイル通るときと通らないときがあって調べてたら デストラクタがインライン(暗黙)だと駄目だとわかった しかもこの問題が起こるのはunique_ptrのときだけでshared_ptrはデストラクタの定義に関係なく通る わけわからんぞ 教科書に書いておいてくれ class ClassB; class ClassA{ public: ClassA(); private: std::unique_ptr<ClassB> u; // NG std::shared_ptr<ClassB> s; // OK } --- class ClassB; class ClassA{ public: ClassA(); ~ClassA(); ←これでunique_ptrもOK private: std::unique_ptr<ClassB> u; // OK std::shared_ptr<ClassB> s; // OK }
389 名前:デフォルトの名無しさん mailto:sage [2019/04/24(水) 07:38:59.52 ID:IdP8M60W.net] >>388 unique_ptr<T>のデストラクタはインスタンス化するときにTが完全型であることを要求する(デストラクタで直接Tのデストラクタを呼ぶ) unique_ptrを内包するクラスのデストラクタが暗黙だとクラス内でコンパイラによって実装されるけど、その場でunique_ptrのデストラクタを要求する しかし、その翻訳単位内でTの定義が無ければコンパイルエラーとなる unique_ptr<T>を内包するクラスのデストラクタがとりあえず宣言だけでもあると 実際の定義がある場所で同様の事が起こるので、その場所でTの定義が見つかればいい その場合に定義を書かないと、コンパイラさんが適切な翻訳単位内に定義をおいてくれるみたい shared_ptrは動的削除子のおかげでデストラクタが呼ばれるところで適切にデリータを定義し、デストラクタを呼ぶようになっているのでこの様な問題は起こらない shared_ptr<T>のデストラクタ内ではTのデストラクタを直接呼び出すようなコードが無い
390 名前:デフォルトの名無しさん mailto:sage [2019/04/24(水) 18:54:26.06 ID:pnt3hUol.net] >>389 解説ありがとう
391 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 01:05:34.79 ID:UW94aXeh.net] うーんC++プライマー8500円かぁ。本家のプログラミング言語C++第4版はもっとするし 情報量からすると安いが本一冊にポンと出すにはお高い……日本語である程度網羅的な本となるとこの2冊くらいよね
392 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 19:40:01.51 ID:aJMYFNVy.net] set<double> って int のときと同様にちゃんとソートされるんですか?
393 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 20:34:04.97 ID:Fns+A8Ou.net] NaNが無ければ大丈夫NaNじゃね
394 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 20:34:22.70 ID:Fns+A8Ou.net] NaNが無ければ大丈夫NaNじゃね
395 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 22:17:06.30 ID:PbDaLlJb.net] のちに永久保存される平成最後のスベり
396 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 23:59:20.16 ID:LBUDtqYL.net] たしかにそうだな・・いよいよ平成最後なんだな みなさん、>>393-394 みたいな事にならないよう、気をひきしめましょう
397 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 00:20:06.56 ID:nrL5Mhiq.net] 平成最後っていう言い回し使われすぎて嫌いになってきた
398 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 00:23:11.48 ID:v7q7vgVx.net] イテレータの参照を次に移すときってなんでitr++ではなく++itrなの?
399 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 00:33:20.40 ID:nrL5Mhiq.net] ヤフーでぐぐれ
400 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 01:04:24.73 ID:oB7jkl++.net] 素直な実装だとitr++より++itrのほうが速いんじゃないかなあ、となんとなくみんなが思っているから
401 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 01:07:57.61 ID:v7q7vgVx.net] 速度に差が出るのか 知らなかった
402 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 01:35:51.19 ID:KjSesqKI.net] インクリメント後のイテレーターの値を返す処理の実装を考えると 先の場合はインクリメントしてそのまま渡せばいいけど 後の場合はインクリメント前の値を保存しといてそれを渡さないといけないので一手間かかるから ・・なんだけど諸々の最適化とか色んな条件とか考えたらそこまで差がでるかどうかはよくわからん
403 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 01:38:33.58 ID:EJ6OYH9I.net] it++だと、戻り値をコピーしてとっておいてから、ポインタなりを進めた後にreturnする必要があるが、 ++itだと、ポインタを進めた後に参照を返すだけでするからな。
404 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 01:39:08.58 ID:EJ6OYH9I.net] 被ったw
405 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 11:13:20.29 ID:qp4sR6Ay.net] >>398 ite++と++iteなんて気持ちの問題 てか範囲for文使えばいい
406 名前:デフォルトの名無しさん [2019/04/27(土) 11:46:20.51 ID:Tan1PMrG.net] >>402-405 cppcheck にかけたらちゃんと警告出るね。
407 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 14:06:33.77 ID:dwPa57iA.net] どうせ戻り値捨てるんだったら++itを選んでおいて損はない 無駄にit++を使うのは時期尚早な最不適化って奴だ
408 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 19:31:57.61 ID:Ht8C3PIL.net] C++で書くんだから後置インクリメントの方がメインに決まってんじゃん 前置は異端だ
409 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 19:37:22.12 ID:nrL5Mhiq.net] 殺せ
410 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 20:12:28.01 ID:uerCNQ9f.net] ++C
411 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 20:53:36.82 ID:hHA0b+W+.net] C++でいいんだよ。 規格は一歩進むけど、使ってるやつはbetter Cばかりってな
412 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 20:55:05.03 ID:nrL5Mhiq.net] ++C++まだかよ
413 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 22:37:09.45 ID:Czz6ceI0.net] >>411 vectorとかstringとか使わんの?
414 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 03:35:47.43 ID:c2OY2Ben.net] CArrayとCStringだぞ コピコンは定義されてないから自分で作るぞ
415 名前:デフォルトの名無しさん [2019/04/28(日) 11:01:20.49 ID:DJV+PGkd.net] CArrayは、<algorithm>ヘッダーで定義された信頼性の高いユーティリティ関数を使えないのがね・・・。
416 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 13:46:52.13 ID:nadmD8id.net] >>413 この思考がbetter C
417 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 14:25:38.47 ID:n1RanWws.net] >>416 わけわからん
418 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 14:29:28.69 ID:c2OY2Ben.net] 俺がBest Cだ
419 名前:はちみつ餃子 mailto:sage [2019/04/28(日) 14:56:12.05 ID:mA4VukHK.net] >>415 イテレータをうまいこと定義すれば使えるやつも結構あるんじゃね? そうでもない?
420 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 15:37:56.41 ID:UbqPSgHc.net] inconsistent begin/end types in range-based ‘for’ statement gcc(g++) 8.2で -std=c++17オプションでコンパイルで 範囲forでこのエラーが出るんだが begin endの型不一致の制限緩和されいるはずだよな? 原因わかる方いますか?
421 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 15:49:39.60 ID:4R543R/q.net] >>415 GetData()とGetData()+GetSize()を渡せば、とりあえず動くんじゃね?
422 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 16:05:30.47 ID:n1RanWws.net] >>420 比較演算子定義されてないとか?
423 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 16:22:25.11 ID:UbqPSgHc.net] >>422 int _n = 0; auto __begin = _container.begin(); auto __end = _container.end(); for (; __begin != __end; ++__begin) { _n = *__begin; } 比較演算子はちゃんと定義してるし 上のコードは何故かコンパイル通る だけど for (const auto _n : _container) { //hoge } は何故か通らない
424 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 16:41:14.97 ID:n1RanWws.net] 範囲for文のconst autoをconst auto&かauto&&に変えるとどうなる?
425 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 16:43:13.35 ID:UbqPSgHc.net] >>424 auto&&にした時のみエラーが増えます cannot bind rvalue reference of type ‘const long unsigned int&&’ to lvalue of type
426 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 16:54:13.46 ID:/ZzCGjK1.net] beginとendのシグニチャは?
427 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 17:02:57.34 ID:UbqPSgHc.net] >>426 using iterator = typename std;;vector<int>::iterator; using const_iterator = typename std;;vector<int>::const_iterator; using my_iterator = MYIterator; my_iterator begin(); iterator end(); const my_iterator begin() const; const_iterator end() const; const my_iterator cbegin() const; const_iterator cend() const;
428 名前:デフォルトの名無しさん [2019/04/28(日) 17:18:10.81 ID:HBE/zmE6.net] これで動かん? for (auto&& _n : _container) { }
429 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 17:28:42.95 ID:UbqPSgHc.net] >>428 動かないです
430 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:12:40.94 ID:/ZzCGjK1.net] MYIteratorの実体がunsigned longみたいだけど vector<int>::iteratorの実体がポインタだったらoperator!=の定義できなくない?
431 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:13:25.64 ID:7uO4eV2c.net] >>420 wandboxで再現コード作って出直すか、それができないんならエスパーに頼んだほうがいいんじゃないかな。 https://mevius.2ch.net/test/read.cgi/tech/1187922645/
432 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 20:53:07.97 ID:B+3vkW9O.net] >>423 bool operator != (〜) const ← これ付け忘れてないか?
433 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 20:57:20.67 ID:HwAGJ3yN.net] constつけ忘れは時々はまる
434 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 23:15:17.87 ID:UbqPSgHc.net] >>427 自己解決 const iteratorとconst_iteratorが一緒だと勘違いしていた const my_iteratorではなくmy_const_iteratorを実装して返り値とすべきでした
435 名前:デフォルトの名無しさん mailto:sage [2019/04/29(月) 08:12:30.69 ID:caHZo185.net] struct A{ int member; }; struct B: A{ void run(){member = 0;}//ok }; template<typename T> struct TA{ T member; }; template<typename T> struct TB:TA<T>{ void run(){member = 0;}//NG。this->memberとするとok }; クラステンプレートを継承してクラステンプレートを作成した場合にthisでないと継承元のメンバーが見えないのは仕様?
436 名前:デフォルトの名無しさん mailto:sage [2019/04/29(月) 10:32:33.68 ID:ytpB6N2f.net] 仕様 一寸前までのmsvcではなぜか通っていたけど
437 名前:デフォルトの名無しさん mailto:sage [2019/04/29(月) 11:47:53.29 ID:atpu4K08.net] >>436 なんでそんな仕様になってるんだろう…
438 名前:デフォルトの名無しさん mailto:sage [2019/04/29(月) 12:13:25.59 ID:TWBg2sM/.net] >>437 2phase lookupだから 最初のTB解釈時にはTAが型引数一つのtemplate classであるという情報以外使わない だいたいTAが特殊化される可能性があるだろ
439 名前:デフォルトの名無しさん [2019/04/30(火) 10:16:07.47 ID:5viqjSMx.net] 8bitや16bitのintしか使えない環境で、 32bitなどの大きな数を扱うにはどうすれば良いですか? 変数をいくつかつなげて大きな数を表現できないかと思っているのですが、やり方が分りません。 ご存知の方いらっしゃいましたら教えて頂けると嬉しいです。
440 名前:439 [2019/04/30(火) 10:20:33.67 ID:5viqjSMx.net] 補足させて下さい。 足し算、引き算は出来るようにしたいです。 可能でしたら、掛け算や割り算もできると助かります。
441 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 10:25:07.05 ID:l5C1eDEl.net] 多倍長演算で検索
442 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 10:45:28.19 ID:Cm5pFeJF.net] >>438 > だいたいTAが特殊化される可能性があるだろ なるほどそりゃそうか、サンクス
443 名前: mailto:sage [2019/04/30(火) 11:43:40.55 ID:iYYZTFZo.net] >>439-440 https://mevius.5ch.net/test/read.cgi/tech/1434079972/51 近々、委譲をやめて継承に戻すつもりです あと掛け算はkaratsubaを適用できる目処がたちました x64 に特化してインラインアセンブラ化することも考えています
444 名前:はちみつ餃子 mailto:sage [2019/04/30(火) 12:03:49.54 ID:MGpUBTsC.net] karatsuba はかなり桁数が多いときじゃないと効果がないとも聞くけど
445 名前: mailto:sage [2019/04/30(火) 12:09:22.58 ID:iYYZTFZo.net] >>444 多分それは乗算FFTのことかと
446 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 12:28:54.66 ID:44LYo/LT.net] >>439 stdint.h で int_least32_t とか使えるのでは?
447 名前: mailto:sage [2019/04/30(火) 13:43:58.68 ID:iYYZTFZo.net] >>446 8bit/16bit CPU で int_least32_t とかはそもそも存在しないのでは?
448 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 14:19:40.82 ID:44LYo/LT.net] >>447 「8bitや16bitのintしか使えない」を見て long や long long はもっと大きいんじゃないの?と思ったんだよ。 「整数型」の意味で"int"って書いてたんなら、確かに存在しない環境のことを言ってるのかもしれない。 その場合は ISO C/C++ の LONG_MAX の最低絶対値の要求に準拠できないってことになるんだけど。
449 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 14:19:47.17 ID:gDkH0fQs.net] 8bit pic用XCでもlongは32bitなのに
450 名前: mailto:sage [2019/04/30(火) 15:03:05.44 ID:iYYZTFZo.net] >>449 それはそれですごいインプリメンテーションですね… 8 bit PIC で 32bit int がさくさく書けちゃうとは、そのインプリメンターは根性がありますね、それか頭のねじが何本か外れていて「無理を無理と思わない人」とか…
451 名前:デフォルトの名無しさん [2019/04/30(火) 15:29:16.24 ID:0LsajAP1.net] shortは16bit固定でlongは32bit固定でしょ。何言ってんの?
452 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 16:18:35.89 ID:coQMvXAj.net] >>451 いや、お前こそ何を言ってるんだ?
453 名前: mailto:sage [2019/04/30(火) 16:37:10.66 ID:iYYZTFZo.net] >>451 残念でした、short も long もインプリメンターが好きに実装していいのですっ!きりっ!
454 名前:さまよえる蟻人間 mailto:sage [2019/04/30(火) 16:45:08.36 ID:lzNlO/OB.net] >>451 64-bit Linux でsizeof(long) が8だった。移植がある場合は<cstdint>使わんとあかん
455 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 17:46:03.06 ID:bcA0O1+B.net] intが16bitならISOの規格は満たしてることになるかな。 32bit以上の長い整数はクラスと演算子オーバーロードで誤魔化すか。 頑張ってもリテラル表記もダメだろうから、使い勝手は悪いよな。
456 名前:デフォルトの名無しさん [2019/04/30(火) 19:51:46.33 ID:tnl21ewQ.net] >>451 うろ覚えだが VC Win32bit: int 32bit long 32bit pointer 32bit gcc Linux32bit: int 32bit long 32bit pointer 32bit -ここまでは同じ VC Win64bit: int 32bit long 32bit pointer 64bit -int64_tで64bit整数 gcc Linux32bit: int 32bit long 64bit pointer 64bit
457 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:17:37.41 ID:YvhWBPAF.net] 既にLP64とかLLP64とかの呼び方が存在するんだから、そっちを使おうよ https://ja.wikipedia.org/wiki/64%E3%83%93%E3%83%83%E3%83%88#64%E3%83%93%E3%83%83%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A2%E3%83%87%E3%83%AB
458 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:34:29.38 ID:4LCMFhXh.net] 厳密なbit長が必要なときにintだのlongだの使っちゃ駄目よ
459 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:56:09.36 ID:ba2OmOyM.net] じゃあ何を使えばいいの?
460 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:59:46.66 ID:jq/I62+g.net] int_leastシリーズでは?
461 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:02:03.72 ID:tJFiug19.net] intの配列のラッパーのようなものから再発明すりゃーいい class Bignumber{ int number[4]; Bignumber(const String num){ for(int i=0; i<4; i++){ number[i] = //考えるのが面倒臭い } } Bignumber operator+(){ //以下、延々とオペレータオーバーロードが続く } };
462 名前: mailto:sage [2019/04/30(火) 21:02:11.05 ID:iYYZTFZo.net] >>459 int64_t とか int32_t とか cstdint の面々を使うしかないでしょうね…私もデフォでそうするようになりました
463 名前:デフォルトの名無しさん [2019/04/30(火) 21:08:03.86 ID:0LsajAP1.net] あ…ありのまま 今 起こった事を話すぜ。 平成の終わりにいろんな奴からshort/longに対する認識の誤りを指摘される恥辱を味わった。 何言ってるかわからねーと思うが(以下略
464 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:08:35.71 ID:QYmLdpSV.net] なんかもうビットという表現すら無くそうとしてるんじゃなかった?
465 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:19:14.38 ID:l5C1eDEl.net] 制限された環境で使える多倍長整数のライブラリくらいいくらでもありそうだけど
466 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:42:28.23 ID:ba2OmOyM.net] >>462 なるほど、cstdint ですか! 教えてくださりありがとうございます
467 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 23:24:19.16 ID:xHYWEb3z.net] ビット数を付けるのは、MISRA-C で決まっているだろ int8, 16, 32 uint8, 16, 32
468 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 00:05:54.61 ID:rGIFhODV.net] C++の規格上はintは16 bit以上(ターゲットのアーキテクチャで一番自然なサイズ 、longは32 bit以上 だったと思った
469 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 06:23:13.87 ID:EdGuPz7E.net] class ClassA class ClassB: public ClassA class ClassA::ClassC のときに、ClassBはClassAのサブクラスと言いますがClassCはなんと呼ぶものですか?
470 名前: mailto:sage [2019/05/01(水) 06:32:09.33 ID:JcO9/TOD.net] >>469 >class ClassA::ClassC この意味はなんですか?
471 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 06:32:44.82 ID:TS5dpT59.net] 基底クラス スーパークラス 親クラス ベースクラス
472 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 06:56:41.43 ID:q4ZM9Khf.net] 細かいことを言えば、規格準拠の処理系でも int32_t (ピッタリ32bit) が定義されるとは限らないのね。 int_fast32_t, int_least32_t なら定義される。 8bit単位じゃないCPUへの配慮らしいから、 普通の(この表現も危険だけど)コンピュータを使う分には int32_t があると仮定して書いてもたいがい大丈夫だろうけど。 コンパイルエラーが出るから出たら対処、で十分かと。
473 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 07:06:00.95 ID:EdGuPz7E.net] >>470 クラス内で定義したクラスです class ClassA { public: ... private: class ClassC; ClassC * C; } class ClassA::ClassC { ... } の場合class ClassA::ClassC からClassA::を取るとコンパイルが通りません
474 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 07:25:40.44 ID:shCLaGGL.net] 「プログラミング言語C++」だと、入れ子クラス(nested class)とか メンバクラス(member class)とか呼んでるみたい。
475 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 07:36:13.31 ID:EdGuPz7E.net] おお、なるほど ありがとうございます
476 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 09:29:42.19 ID:HwrGV3PF.net] 内部クラス(inner class)もよく聞くけど調べたらJava用語っぽいな
477 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 10:28:09.06 ID:imZnb7dZ.net] Inner Class、Java用語なのか。そう呼んじゃってたわ
478 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 17:22:15.78 ID:Ul5/0sra.net] 今よみがえる構造体ネストの悪夢
479 名前:はちみつ餃子 mailto:sage [2019/05/01(水) 17:31:05.65 ID:Gk4iJJA0.net] >>473-474 nested class は仕様にあるので、 これが公式な用語と思って良いみたいだね。
480 名前:デフォルトの名無しさん [2019/05/01(水) 19:23:34.42 ID:DLNQH846.net] 以前、「完全さを求めるあまり今存在する良い物を犠牲にしてはならない」という趣旨のことわざをBBCハードトークで仄聞したのだが、原典はなんだろうか?
481 名前: mailto:sage [2019/05/01(水) 19:59:09.50 ID:JcO9/TOD.net] >>480 ググってヒットしたもののうち、これについてめぐらせています(ことわざとは関係ありません…) www.kt.rim.or.jp/~hisashim/gabriel/WIB.ja.html この人(原著者)、最後まで間違ったままでいるような気がしてなりませんが、実際のところどうでしょうか
482 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 22:03:28.27 ID:EdGuPz7E.net] >>479 ありがとう
483 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 17:19:13.49 ID:x8LtSB02.net] >>480 https://en.wikipedia.org/wiki/Perfect_is_the_enemy_of_good
484 名前:デフォルトの名無しさん [2019/05/06(月) 08:44:53.70 ID:Omhj+R8I.net] ストリームの遅さは凄い凄すぎる。 ほとんどの場合、遅くても問題ないということはわかる。 でもあそこ迄遅くする必要があったのだろうか。
485 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 10:41:12.07 ID:ZJRraXBB.net] 突然何?
486 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 12:17:09.96 ID:jqdyfBGc.net] 3.5 ストリーム ttps://sicp.iijlab.net/fulltext/x350.html これだろう 理想的にはこうなるべきだが、技術的には未だに追いついてないだけであり、将来的には解決される なのでC++では他のどの言語も真似してない<<や>>がある 逆に言うとストリーム・プログラミングが主流になったらC++が主流の座に返り咲く
487 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 15:05:44.09 ID:XjarcZ9f.net] 今やどの言語もprintfのような書式付き文字列を指定する方式に回帰した(jsすら!)。 少なくとも書式付き出力に限れば、ストリームはプログラミング言語の中ではもう淘汰されてしまったんだと思うよ。 早いとこ、string::format()とかbasic_ostream::format()とか作ってほしいわ
488 名前:デフォルトの名無しさん [2019/05/06(月) 15:24:11.52 ID:ecbY6TsO.net] 多言語対応するためにはC#みたいに %1, %2みたいに引数を番号で指定できる書式じゃないとダメでしょ。
489 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 15:30:05.12 ID:HRNpJ9Fc.net] ストリームの精神はrangeに受け継がれて生き残るよ だから書式はそろそろ負けを認めよう
490 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:03:09.57 ID:ZJRraXBB.net] どうしてprintf使わないの?
491 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:28:48.00 ID:YSlWnmwv.net] オーバーロードできないから
492 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:36:53.99 ID:oGUqqIoM.net] <<には<<なりの良さがあると思うので、ストリームというより、stringがoperator <<をサポートすれば良いと思う。
493 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:40:04.95 ID:DF3zK1Xx.net] 文字列操作するためのインターフェイスとしては最悪だよ。 考えた奴は自分では絶対使わないで人に使わせるだけのタイプだろうな。
494 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:45:40.32 ID:Yv9FD/Sb.net] そもそもだけど、なんで文字って表示されるのに << とか %s とかこういうのが必要なの? どの言語でもprint(a);だけで表示させればよくない?aが文字列でも整数でも小数でもさ。 引数で判断してくれよ。
495 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:51:17.77 ID:oGUqqIoM.net] >>493 え、そう? 文字列を連結する時に、+=と+を使い分けるより<<だけですむ方が楽だし、連結する順番も自明だし結構良くない? std::string str; str << "hoge" << 123 << ".txt"; みたいな。
496 名前: mailto:sage [2019/05/06(月) 17:27:51.75 ID:vu8V8zIe.net] >>492 それは私も考えていました、cerr に都度吐いているメッセージを、もう一度プログラムの最後にまとめて吐きなおす、とかをやってみたいんです…
497 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 17:37:23.51 ID:QULX0INn.net] >>495 そのやり方は引数の順序を変えられないから語順が違う言語間での翻訳で困る
498 名前:デフォルトの名無しさん [2019/05/06(月) 17:37:57.33 ID:ecbY6TsO.net] コンストラクタの引数に出力先stringインスタンスを渡すostream派生クラスを作ればいいじゃない。 string str; hogestream sstr(str); sstr << "hoge" << 128;
499 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 17:42:30.68 ID:B4KNKrTg.net] 別にstringstreamで良いじゃない
500 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 17:42:46.83 ID:B4KNKrTg.net] 別にstringstreamで良いじゃない
501 名前:デフォルトの名無しさん [2019/05/06(月) 18:13:11.14 ID:L6nFhRY+.net] iostreamの<<はC++の黒歴史の一つだね
502 名前:はちみつ餃子 mailto:sage [2019/05/06(月) 18:19:09.50 ID:K/rO19sE.net] stream の機能はいらんからとにかく文字列に差し込むだけ出来ればいいってのなら 単に operator<< を定義すれば出来るけど……。 https://wandbox.org/permlink/dIkEh0LDZEixGoiF
503 名前:デフォルトの名無しさん [2019/05/06(月) 18:27:12.43 ID:ecbY6TsO.net] >>499 ,500,501 ostream派生クラスじゃなくて独自のクラスのほうが軽量でいい。 stringインスタンスへのポインタのほかに、数値書き込み時の進数設定(oct,dec,hexを覚えておく)などをメンバ変数に持てばOK。
504 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 18:58:24.90 ID:oGUqqIoM.net] >>502 をを、なるほど、これは素晴らしいw
505 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 21:02:54.05 ID:ZJRraXBB.net] >>492 stringstream・・・
506 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 19:51:10.38 ID:FbrTB0S1.net] basic_ostream使えよっていつも思う なんで決め打ちするのかわからない
507 名前:デフォルトの名無しさん [2019/05/08(水) 21:52:50.27 ID:iQQm+nuQ.net] to_charsというものをみつけました。
508 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 18:03:02.17 ID:PdPEbd3c.net] b配列全てをa配列のケツにコピーするとき std::vector<char> a; char b[]={0,1,1,3,4}; a.insert(a.begin(),&b[0],&b[sizeof b]); これでいいの? &b[sizeof b] これが死ぬほど気持ち悪いんだけど
509 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 18:18:44.76 ID:JXKWFyOS.net] そんな気色悪い書き方しなくてもこれでいいよ a.insert(a.end(), std::begin(b), std::end(b));
510 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 18:25:51.81 ID:PdPEbd3c.net] なるほど!ありがとう
511 名前:はちみつ餃子 mailto:sage [2019/05/09(木) 18:44:16.05 ID:IVoLxnXn.net] >>508-509 std::copy に back_inserter を渡す方が効率的という豆知識。
512 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 18:53:31.44 ID:vbHvKAwn.net] >>511 insertのが速いんでね? resizeしてmemcpyになるはず
513 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 23:40:45.34 ID:q7ofaYCv.net] アルゴリズムよりvector::insertのほうが実装による最適化の余地は大きそうだな
514 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 00:47:30.50 ID:5C678nxv.net] ポインタがイテレータとして渡された時点で相手が連続バッファだってわかるからね
515 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 11:00:01.95 ID:KAkBQh2y.net] &b[sizeof b]でもstd::end(b)でもやってることは変わらないんだけどな 見映えは重要だな
516 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 11:08:59.15 ID:pPfi71KH.net] sizeof bじゃcharでしか使えないんで、そういう意味でもイケてないかも
517 名前:はちみつ餃子 mailto:sage [2019/05/10(金) 12:01:59.87 ID:g2QrvVju.net] >>515 見栄えというか、名前が付いているってのはそれだけで単純にわかりやすいな。 (名前が妥当であれば。)
518 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:02:43.61 ID:UhKi+qPE.net] 嫌儲で、東京五輪チケットのソースコードが出てるけど C++使ってるお前らなら、こんなソースコードじゃないよね? https://gogotsu.com/wp-content/uploads/2019/05/01-9.jpg
519 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:05:10.83 ID:curN/h5M.net] >>518 サーバーサイドあまりやってないけどこんな泥臭い書き方するのか
520 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:05:16.55 ID:TAwz/zT/.net] javascriptやん
521 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:36:57.50 ID:tfYAY6pz.net] こんなもんだろ SIerが間違ってコンシューマ系のWeb制作を請けてしまうとこんな感じになる
522 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 21:47:05.61 ID:oOPMkjEw.net] てかこんなもの韓国に出すのね 安くなさそう ってもしや北の方?
523 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 21:53:19.07 ID:oOPMkjEw.net] parseInt(Num).lengthって動かなそう
524 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 21:57:58.16 ID:TAwz/zT/.net] ほんまやw桁でも返ってくるのかと思ったがundefinedじゃんかw
525 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 22:59:11.84 ID:HK1/2Yro.net] 型に無駄にこだわった結末がstreamと知っとくのは重要。 あの間違いを覚えとけ。
526 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 23:25:31.58 ID:u3uVdMgu.net] ゲームのシーンを管理するクラスとシーンクラスがあり、管理するクラスはシーンクラスを保持しています シーンクラスから管理クラスのシーンチェンジを行う関数を呼び出したいのですがどうやったらいいでしょうか シーンクラスが管理クラスのインスタンスを持ちたくありません
527 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 23:30:31.35 ID:0WVRNDv3.net] >>518 webにあげるなら難読化まではしないにしても最低限圧縮するよね
528 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 23:55:31.69 ID:tshfuAdx.net] >>526 シーンクラスに管理クラスへの参照(ポインタ)を持たせればいいんじゃないのか
529 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 03:16:15.93 ID:xsmcwCcm.net] 早速情報漏洩やらかしたの?
530 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 10:30:07.92 ID:f5HniSEP.net] >a.insert(a.begin(),&b[0],&b[sizeof b]); > これ、添字オーバーしてるけどメモリエラーとかにならないの?
531 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 10:54:36.87 ID:RjxICFG6.net] >>530 イテレータ範囲のendは配列の場合最後の要素の次のアドレス それは普通の実装ではアクセスされることはない 規格的にも最後の次の要素へのポインタだけは未定義じゃない
532 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 11:55:52.83 ID:Y1ZlGg0p.net] >>530 アクセスしてるからダメそう
533 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:40:07.82 ID:3XjGQ6E0.net] []はただのアドレス計算じゃん
534 名前:デフォルトの名無しさん [2019/05/11(土) 12:42:52.29 ID:DVWj7ai3.net] &p[N]はp + Nと同じって規格にあったっけ?
535 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:44:31.45 ID:RjxICFG6.net] 確かに&b[sizeof b]はデリファレンスしてるわ これはあかんそう
536 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:56:49.51 ID:FaKAPAIh.net] >>533 a[i]は a+i ではなく *{a+i}
537 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 13:12:17.25 ID:2v2BzL6t.net] 経験上出来るプログラマーは言語オタクが多いイメージ?(ただし浅い)
538 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 18:44:16.82 ID:fU686pnk.net] &*pはデリファレンスなしで単にpと評価するってどっかで特別に決められてなかったっけ?
539 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 06:58:46.18 ID:x4ccFx6b.net] >>530 int a[5]; int *p = &a[5]; というコードが有効、つまり 「配列の最終要素の次の要素」(現実には存在しないデータ)のアドレスを取れる、 という仕様から、この場合は許される、というのが >>531 の指摘か。 一般的に >>538 が成り立つなら便利だけど、調べ切れなかった。 流れの元になった >>508 を見返したら、 a.insert(a.begin(),&b[0],&b[sizeof b]); これだと b[] の内容はベクタ a の先頭に挿入されちゃうね。
540 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 07:43:52.68 ID:2y1+p9UL.net] >>530 >>a.insert(a.begin(),&b[0],&b[sizeof b]); >> > >これ、添字オーバーしてるけどメモリエラーとかにならないの? 508だけど、これは a.insert(a.begin(),&b[0],&b[sizeof b]); こっちの間違いです。ごめんなさい。 a.insert(a.end(),&b[0],&b[sizeof b]); &b[sizeof b]); この部分は b+sizeof(b) これなら問題ない感じ? どちらでも動くけど、たまたまいてる可能性捨てきれないから不安なんだよね。 実際のソースはsizeof(b)がbに格納されているデータのサイズを示していて、 char b[256]; int s = read( fd, b, sizeof b); a.insert(a.end(),&b[0],&b[s]); みたいな感じで書いてます。 んで、b最大数来た場合にちゃんと動くか気になったというわけっす。 int s = read( fd, b, (sizeof b)-1); 無難にこれの方がいいですかね?
541 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:19:05.13 ID:k8bUqGvO.net] >>539 >int *p = &a[5]; これは多分だめで、ポインタ値としての存在なら許される int *p = a+5;
542 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:53:09.39 ID:nuZIUjqi.net] ややこしいからoperator <<を定義しようw
543 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 15:25:00.10 ID:8/5ODvoI.net] VC++だと std::vector<T> a; &a[a.size()]はoperator[]のassertionに引っかかるね
544 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 22:25:11.86 ID:yr8YjJOU.net] std::transformって並列処理されてますか?
545 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 23:20:05.82 ID:jFoQmc6B.net] c++17のparallel版使えば並列実行されるかもしれない
546 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 01:24:36.27 ID:RKe/NLvg.net] visual studioでC++17にしたけどいまいち並列版の使い方が分からなかった 普通にfor回すのと、OpenMP使ってfor並列化するのと、transform(非並列)使うの比較したら OpenMP>普通にfor≧transform だった
547 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 20:49:38.54 ID:YS57w6Jq.net] おとなしくpthead使えよ。
548 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 20:56:12.40 ID:WUu3P+2G.net] 非並列使ったならそりゃそうなるだろ
549 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:02:33.17 ID:1v50lv4I.net] struct AとAを継承したstruct Bがあって Aの内容をBの共通部分にコピーする方法ってないですか? A a; B b = a; みたいにしたいんですけど親を派生先にキャストはできないので困ってます
550 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:06:57.91 ID:mZDDPYlt.net] struct B : public A { B* operator=(const A& a){ this->hoge = a.hoge;} }; これ初期時にも使えるんかな
551 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:25:05.62 ID:1v50lv4I.net] コピーコンストラクタが実装できたとしてメンバ変数は1個ずつコピーするしかないですかね
552 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:28:08.55 ID:mZDDPYlt.net] スライシングをさせるとか? 安全に?スライシング起こす方法ってあったっけな? なんか危ういからやろうともしなかったが
553 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:25:17.13 ID:/dAesd8e.net] cloneメソッド用意するとか
554 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:31:42.80 ID:ebJ8HHSX.net] >>549 初期化時は普通にコンストラクタ初期化リストで A(a) って書けるでしょ。残りのメンバをどうするのか知らんけど。 代入なら static_cast<A&>(b) = a か b.A::operator=(a) で済みそう。
555 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:33:37.60 ID:C3C4SHXA.net] 普通にコンストラクタかオペレーター作ればいいんじゃね B::B(const &A) B::operator =(const &A) A::operator B() 雑なキャストでよければdynamic_cast<A>でおk
556 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:38:27.18 ID:C3C4SHXA.net] ↑dynamic_cast<B>の間違い B b = dynamic_cast<B>(a);
557 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 11:40:14.21 ID:74mGoL8y.net] >>551 sturctでまとめればデフォルトコピーコンストラクタが使えるけどね。 あとはintとかPODオブジェクトだけだったらmemcpyしちゃうとかも、俺はたまにやるなw
558 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 17:20:00.24 ID:PgzYowjZ.net] 549です 解決しましたありがとうございます 以下のように書いたら思っていたことが出来ました (派生先のコンストラクタで親のデフォルトコピーコンストラクタ呼べるの知りませんでした) 代入は現状使う予定がないので大丈夫です B::B(const &A a) : A(a) {}
559 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 18:17:29.46 ID:mr2QiBZl.net] その内容だったら=defaultでいいよ
560 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 21:32:58.41 ID:/aEDSlbd.net] 引数付きコンストラクタって、=default使えるの?
561 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 22:09:55.18 ID:jJO9F8Je.net] 使えないよね うかうかっと読み過ごしてたわw