1 名前:デフォルトの名無しさん mailto:sage [2017/10/10(火) 00:11:34.01 ID:nc/5PI4P0.net] 次スレを立てる時は本文の1行目に以下を追加して下さい !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part131 mevius.2ch.net/test/read.cgi/tech/1501295308/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.101【環境依存OK】 mevius.2ch.net/test/read.cgi/tech/1500329247/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
697 名前:デフォルトの名無しさん mailto:sage [2017/11/14(火) 23:16:12.96 ID:kNpqefN60.net] OO用語の定義に関して、何か始まりそうな感じだが もう何十回と繰り返されたか、初心者的にはまだまだやり足りないのかもしれないが 老婆心ながら言わせていただくと、OO用語の定義談義合戦は過去幾度となく繰り返されたが 特に意味はなかったから止めておいたほうが良いよ OO自体、まじめに考えてもあんま意味ないっつーか、むしろまじめに考えるとドツボっつーか 一見正しいけど、本質的には意味が無いことってあるじゃん ある視点で見れば正しいんだろうけど、そういうことじゃないっていう どうしてもやりたいなら止めないけど
698 名前:デフォルトの名無しさん [2017/11/14(火) 23:25:41.26 ID:WJGjqzt8d.net] 定義がないんだから議論の正しさの検証も測定もできないしね
699 名前:デフォルトの名無しさん [2017/11/14(火) 23:47:17.80 ID:A1uj0brl0.net] 測定機ならAliexpressでいろいろ売ってるよ。
700 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 04:07:06.94 ID:EEpCgCZL0.net] C++のクラスなんて便利な構造体以上の何者でもない OO宗教でそれ以上の縛りを入れる必要なんてないわ
701 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 04:43:25.86 ID:oRL+59ym0.net] C++の書式がどーの新機能がどーのってプログラマーが、楽になる機能なわけで、本質は、楽してコードが動けばいい。 学術的だとどーでもいい。議論するだけ無駄。 コンパイラは、速くて、安全なアセンブリコードを吐いてくれればいいよ。
702 名前:デフォルトの名無しさん [2017/11/15(水) 05:57:24.70 ID:1fEpam2j0.net] 禿もそういう系の揉め方を防ぐように気を使っているらしいな なんだっけ、どの分野の人々をも侮辱しないとか 全てが1つのクラスから派生しなければならないというのは押しつけがましいとか
703 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 13:52:35.02 ID:qOFIR485M.net] 数値の比較をしていってある一定の差があるところを区切っていきたいです たとえば{1,4,7,8,11}って値を先頭から見て行って差が2以上あるところ{1}{4}{7,8}{11}のような感じで区切る どうすれば実現できるでしょうか
704 名前:デフォルトの名無しさん [2017/11/15(水) 14:31:02.26 ID:l7NNgtZ+d.net] >>694 「区切る」の定義をしてくれ 入力が文字列じゃなくて数値ってことは、間に区切り文字を挟むとかそういうことじゃないんだろう。
705 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 14:34:11.09 ID:ckRbh5hb0.net] 後ろから前を引いて2以下?なら前を前回と同じバッファにプッシュバック。的な感じ。
706 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 14:55:59.73 ID:qOFIR485M.net] >>695 後々区切られたまとまり毎に操作したいので できればまとまり毎にそれぞれ別の変数に入れたいです ただ操作上絶対に有り得ない数値を区切り文字として使うのでも良いです {1}{9999}{4}{9999}{7,8}{9999}{11}{9999} みたいな形で
707 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 15:10:16.47 ID:mxK8zV000.net] こりゃまた大物新人が来ましたね
708 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 15:49:08.40 ID:hv/Fx57R0.net] >>694 の書き出し化けてない? 「??白lの比較をしていって…」と表示されるんだけど。 対象の {1,4,7,8,11} はconstの整数のvectorへの参照で受け取るとして、 結果は要素グループごとに格納したvectorのvectorで返すかな。 各グループの先頭要素へのインデクスを格納したvectorで返すかも。 >>697 を見ると、前者の方が後の使い勝手が良いのかな。 要素グループのvectorのvectorってこと。
709 名前:デフォルトの名無しさん [2017/11/15(水) 16:08:47.13 ID:l7NNgtZ+d.net] 俺の知らない言語の話だったか...
710 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 16:15:16.93 ID:SXIXTuPm0.net] 麻雀か何かのアルゴリズム?
711 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 16:20:55.95 ID:8IQafsadM.net] >>699 実装も前者の方が楽そうですな。 前の値と比べて差が広かったらグループ追加。
712 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 16:49:04.26 ID:5RHQ4qAcM.net] >>699 その部分は数値の比較と書きました 要素グループのvectorのvectorですか どのような感じで書けばいいとかどのような調べかたをすれば良いか教えて頂けないでしょうか 取っ掛かりが分からなくて
713 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 16:49:57.11 ID:VtRcCO4N0.net] >>697 参考までに聞きたいんだが この処理を何に使うの?
714 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 16:57:55.30 ID:5RHQ4qAcM.net] >>704 ある方法で手に入れた
715 名前:「くつかの数値を先頭値から見ていき、 前後で差が小さいもの同士でグループ分けしていったあと そのグループ毎の平均値を出していきたいだけです [] [ここ壊れてます]
716 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 17:01:28.65 ID:mxK8zV000.net] それを何に使うかって聞いてんじゃないの
717 名前:デフォルトの名無しさん [2017/11/15(水) 17:04:07.50 ID:QX/ZMY070.net] こういう泥臭いのは人に聞くよりもスクリプトでもなんでも良いから書いて試行錯誤すればいいと思うのよ
718 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 17:07:39.49 ID:VtRcCO4N0.net] 株価やFXの予測とかそんな感じか?
719 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 17:52:07.11 ID:SXjwAfn20.net] >>705 ruby2.2〜ならchunk_while/slice_whenで出来る
720 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 18:15:01.29 ID:SXjwAfn20.net] スレタイみてなかた
721 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 18:49:45.50 ID:9uMqyRhU0.net] >>705 思い付くまま書くとこうなるがもう少し短く出来そうな気もする Ideone.com - dOQm10 - Online C++ Compiler & Debugging Tool https://ideone.com/dOQm10
722 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 20:48:51.98 ID:5RHQ4qAcM.net] >>711 ありがとう参考にする しかし、よくこうスラッとプログラム書けるよなぁ 凄いわ
723 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 20:52:44.99 ID:r8JgjB1aM.net] 平均なら https://ideone.com/tZALcZ で充分と思うが
724 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 22:24:21.73 ID:KiQc4/2v0.net] 自分なりにやってみた。 https://ideone.com/ugURi1 >>711 vector::insertで領域の再確保が起こると既存のイテレータが破壊されるんで 24-25行あたりの処理はヤバイ。
725 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 22:45:07.35 ID:sivdqd190.net] >>694 書き方だけならもう少し洗練?できるだろうけど https://ideone.com/DYlMc0
726 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 19:03:07.86 ID:qgvG7lfo0.net] すれちがいだけど、 C++が出る前のC言語で、STLが必要な処理はどうしてたの?
727 名前:片山博文MZ mailto:sage [2017/11/16(木) 19:10:17.36 ID:1Qzf60whd.net] >>716 固定バッファとか、ヒープとか、自己参照構造体などで管理してたはず。
728 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 20:50:27.90 ID:WXeeSnzL0.net] >>612 ←こういう馬鹿がいるから
729 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 21:22:02.83 ID:xIkq77qW0.net] 一応つっこみ。 型の一般化がテンプレートと思うが マクロじゃなくてテンプレート使えって書いてた本もあったような 気がする。
730 名前:デフォルトの名無しさん [2017/11/16(木) 21:27:58.68 ID:w4cxkmV2d.net] >>718 新たな馬鹿の登場かな?
731 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 21:39:47.71 ID:Pxu9bZObM.net] >>716 いや自分で書けばよくね?
732 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 08:37:40.63 ID:smNh
] [ここ壊れてます]
733 名前:jLrp0.net mailto: >>716 STL 等はあれば便利なだけで「それが必要な処理」などない。 [] [ここ壊れてます]
734 名前:デフォルトの名無しさん [2017/11/17(金) 09:38:50.05 ID:S87VOpst0.net] >>716 STLで使われているアルゴリズムはC++前からあったものばっかだよ
735 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 09:46:53.51 ID:4EHSQg4KM.net] 汎用アルゴリズムのコードを業界で共通化することもなく、みんなが各々で実装してたんですか?というアンチテーゼだろ
736 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 09:59:16.63 ID:smNhjLrp0.net] 違うと思うけど?
737 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 10:03:14.26 ID:NwY4XtJI0.net] まぁ、ライブラリとして偏在はしてたんだろうけど、あの会社はあのライブラリこの会社はこのライブラリってややこしいことになってたと思う。
738 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 16:57:04.66 ID:vGXyPrNqa.net] リンクリストと平衡二分木ぐらいなら雑に書いても500行ぐらいでできる みんな大学の復習と思って書いてたんじゃないかな?
739 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 18:49:47.16 ID:a6b9gyRQd.net] 自力で書いてる人の方が多かった STLがあっても用途によっては独自になるよな ディスク上に作るとか、JPEGのハフマン符号みたいに表現が決まってる物とか
740 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 18:52:08.38 ID:a6b9gyRQd.net] STLはあくまでお手軽用途 表現縛りがなかったとしても、 ガチガチに最適化する用途では使えない
741 名前:デフォルトの名無しさん [2017/11/17(金) 20:50:18.49 ID:HNipYc2I0.net] 最適化できない? なんで?? テンプレートだろ
742 名前:デフォルトの名無しさん [2017/11/17(金) 21:51:52.32 ID:Eetf/DNi0.net] テンプレート万能説爆誕。
743 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 22:21:21.86 ID:EgKbzTW+0.net] if ( オーバーヘッドがない != 最適化される )
744 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 22:36:52.56 ID:stAFfC8Ar.net] ガチガチに最適化する状況が最近はほとんどない
745 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 23:08:51.45 ID:grVEZAi9M.net] ガチガチに最適化すべき場合ってどんな時だろうか
746 名前:デフォルトの名無しさん [2017/11/17(金) 23:17:53.86 ID:Eetf/DNi0.net] ガチガチの最適化が仕様に盛り込まれたとき。
747 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 23:46:01.61 ID:grVEZAi9M.net] そんな恒真命題は期待してないゾ 証券取引所とかか
748 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 23:47:03.87 ID:Xj6+FFKd0.net] プログラミング工数の最適化
749 名前:デフォルトの名無しさん [2017/11/17(金) 23:50:29.19 ID:sEHgCDk10.net] 最近は凝ったアルゴリズムより単純な配列(vector)の方が速かったりするうえに、余程古いかクソな標準ライブラリを使用してない限りstd::vectorを最適化する余地なんてほぼ無いわな。
750 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 00:03:07.23 ID:r8nC/FGp0.net] 最適化はコンパイラに任せてソースは読み易さ重視 std使っとけばデバッガでも追いやすいし
751 名前:デフォルトの名無しさん [2017/11/18(土) 00:08:41.90 ID:CUoz+hOS0.net] 拡張ライブラリが有ったとしたら、名前空間はstxになるのかね。
752 名前:デフォルトの名無しさん [2017/11/18(土) 00:11:29.34 ID:CUoz+hOS0.net] Qtでウェブサイト作ったら何の問題もなくずっと動き続けてびっくりですよ。 Javaスレの人たちがC++は稼働し続けるとメモリーの分断化で落ちるとか言ってたから、 早く書き直さなきゃって思ってたんだけど。 クライアント用のQtがサーバーで頑健だったのは意外だった。
753 名前:デフォルトの名無しさん [2017/11/18(土) 00:14:32.63 ID:asu2qdyg0.net] まぁ意識高い系が言うことなんかその程度ってこった
754 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 00:21:40.93 ID:GO3RY34O0.net] >>741 TreeFrogの人?
755 名前:デフォルトの名無しさん [2017/11/18(土) 01:10:27.30 ID:PnwIkFzo0.net] >>741 クソJavaプログラマーがC++を書くとほぼ間違いなくやるただのメモリリークを俺のせいじゃないということにしたかっただけというのに1票
756 名前:デフォルトの名無しさん [2017/11/18(土) 06:06:05.59 ID:mIICZMYh0.net] 自分のコードでさえ後で読むと読みやすく書いたつもりが裏目に出ていたりする
757 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 08:23:02.49 ID:cx1PUhyJ0.net] 奴らはnewしても決してdeleteしないからな
758 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 11:32:01.12 ID:azZ7ClyG0.net] 俺も最近unique_ptrに任せっきりでdeleteってほとんど書かねえわ コピコンの=deleteとかは書くけど
759 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 12:02:10.83 ID:Erlsd62p0.net] >>739 古いコンパイラ(つっても10年くらい)だと、クラス内の配列をイジるとクラスオブジェクト自体がイジられたことになるので最適化放棄とかしてたしなー そういうのだとvectorなんて最適化放棄しまくり。
760 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 13:45:01.11 ID:6KFO0fze0.net] バカは素直にスマポ使っとけばいいのにな
761 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 14:09:50.22 ID:fgAW9Gk/0.net] >>748 オブジェクトXに対するアクセスの最適化放棄はコンパイラの知りえない形での Xへの副作用が有り得ると判断された場合に行われるがこれは現用コンパイラでも変わらん 改善したというのはコンパイラの能力向上というよりは、テンプレートによるインライン展開のご利益なのでは… (つまりstd::vectorは元来最適化向きの進化である
762 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 14:13:16.03 ID:fgAW9Gk/0.net] 例: 次のコードの並びにおいて、 1と3の読み込み結果は同一とはみなされず、1〜3を通してのX.aのレジスタ割り当ては行われない 1. Xのメンバaを読む 2. 外部リンケージ(かつ素性の知れた組み込み関数以外)の関数foo()を呼ぶ 3. Xのメンバaを読む 特効薬はfoo()のインライン展開
763 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 14:16:28.52 ID:fgAW9Gk/0.net] なお手動を厭わないなら次の風にしても良い: 0. auto変数v = X.a 1. X.aを読む代りにvを読む 2. 外部リンケージ(かつ素性の知れた組み込み関数以外)の関数foo()を呼ぶ 3. X.aを読む代りにvを読む これならいくら古いコンパイラでもvを1〜3を通してレジスタ割り当てすることが気体できる
764 名前:デフォルトの名無しさん [2017/11/18(土) 16:28:12.38 ID:gZtBhbAH0.net] 浮動小数点をすべて網羅するループが書きたいのですがどうすればいいでしょうか。
765 名前:デフォルトの名無しさん [2017/11/18(土) 16:29:45.36 ID:CUoz+hOS0.net] ラスボス級が現れた。
766 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 16:46:32.60 ID:gZtBhbAH0.net] takashiijiri.com/study/miscs/fastsqrt.html やりたいことは、上のサイトにある高速根号計算の精度検証です。 サイト内では2の根号に対して精度検証していますが すべての倍精度実数に対して検証をしたいと考えています。 64bitの整数のビット表現を、同じビット表現の倍精度実数に変換できれば 整数についてループを回すことで網羅できると考えています。 変換の方法をご存知の方がいれば教えて頂けないでしょうか。
767 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 16:47:50.09 ID:R4dFDjUs0.net] >>753 イプシロン足してくとか。
768 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 16:48:48.90 ID:np1Yc2el0.net] >>755 memcpy
769 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 16:49:32.41 ID:R4dFDjUs0.net] >>755 IEEEの仕様読め。 https://ja.wikipedia.org/wiki/IEEE_754
770 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 16:50:13.11 ID:R4dFDjUs0.net] >>757 reinterpret_castでいい予感。
771 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 16:51:55.15 ID:np1Yc2el0.net] >>755 ところでその検証、何年ぐらい時間かけていい話なの?
772 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 16:53:01.86 ID:np1Yc2el0.net] >>759 未定義動作でも「いい」と言うなら、そう。
773 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 16:55:15.51 ID:R4dFDjUs0.net] あー検証だからな。すまんかった。
774 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 17:20:21.34 ID:gZtBhbAH0.net] みなさま、レスありがとうございます。 >>757 memcpyでできそうです。ありがとうございます。 int main() { double f = 0; for (unsigned long long i = 0; i <= -1; ++i) { void* fp = static_cast<void*>(&f); void* ip = static_cast<void*>(&i); std::memcpy(fp, ip, sizeof(i)); std::cout << f << std::endl; } system("pause"); } >>760 そんなに時間かかるんですかね。。。 1週間ぐらいは覚悟してたんですが。 とりあえず回してみます。
775 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 17:32:14.09 ID:np1Yc2el0.net] >>763 https://randomascii.wordpress.com/2014/01/27/theres-only-four-billion-floatsso-test-them-all/ > ... you can test every float bit-pattern (all four billion!) in about ninety seconds. ... 32bit が 90 秒ほどで済ませられるそうな。 64bit だと単純計算で・・・ 735439.6... 年ぐらいかな。 1週間で済ませようと思ったら 38347922 並列ぐらいで走らせればよさそう。 検証する計算内容によっても変わるだろうけど、まぁがんばれ。
776 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 17:35:34.11 ID:hpuIg+Nf0.net] とりあえず範囲を絞って回してみて、 力任せの方法で受け入れられる処理時間なら単純なプログラムのまま、 時間かかりすぎるようなら先にプログラムを洗練させる、としないと。
777 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 17:56:05.12 ID:gZtBhbAH0.net] >>764 ありがとうございます。 32bitと64bitが桁違いですね 範囲を絞ったり、間隔あけてサンプリングしたりしてみます。
778 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 19:06:18.60 ID:cx1PUhyJ0.net] isnan()でnanチェック入れたほうが良さそう
779 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 19:44:12.36 ID:euoYf0NO0.net] >>761 未定義にはならなくね?ポインタtoポインタだからそのまま、で終わりでは。 なお、Cなら *(long long*)&f = i; // mov命令でコピー または f = *(double*)&i; // fmov命令でコピー >>766 まず仮数部53bit+指数部の偶奇で54bit分でいい。 非正規化数もいらないだろうから仮数部52bit扱いでもいい。 意味が分からないのなら仕様読め>>758
780 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 20:29:47.22 ID:np1Yc2el0.net] >>768 type-based aliasing rule (strict
781 名前: aliasing rule) というものがあってな。 (詳しく調べると闇に落ちるから言語オタクでもなければ深堀りはおすすめしない。) mempcy なら動作が定義されてるかというとそうでもないんで、 明示的に未定義といわれているかどうか(=最適化で問題を起こしやすいかどうか)の違いしかないんだけど。 [] [ここ壊れてます]
782 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 20:40:55.67 ID:b6ZSsfqz0.net] std::launder「そろそろ俺の出番だな」
783 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 21:23:52.47 ID:azZ7ClyG0.net] ここまでfrexpとldexpの話なし
784 名前:片山博文MZ mailto:sage [2017/11/18(土) 21:57:24.41 ID:QiNK1qRtd.net] https://github.com/katahiromz/RisohEditor せっかくだから、だれかバグ発見・修正してけ。
785 名前:片山博文MZ mailto:sage [2017/11/18(土) 21:58:52.49 ID:QiNK1qRtd.net] 初回の例外というのがよくわからない。。。
786 名前:デフォルトの名無しさん [2017/11/18(土) 22:06:57.57 ID:asu2qdyg0.net] なんか古い書き方だから2000年ごろからの年季の入ったソースかと思ったら最近の奴なんだな
787 名前:片山博文MZ mailto:sage [2017/11/18(土) 22:12:33.66 ID:QiNK1qRtd.net] >>774 古臭い技術専門が時代遅れのために作っているもんだから、古いと言われても仕方ない。 auto、C++11が使えるclang++に移行したい。
788 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 22:42:09.82 ID:euoYf0NO0.net] >>769 調べたけどこれでいいのか? https://sta
789 名前:ckoverflow.com/questions/98650/what-is-the-strict-aliasing-rule これならreinterpret_cast関係ないじゃん。static_castにしたところで変わらん。 ただそれ以前に該当しないだろ。 「同一のメモリを違う型としてaliasしたときにコンパイラがそれに気づけず最適化で削除してしまう」という問題であり、 今回はそうではない。 > mempcy なら動作が定義されてるかというとそうでもないんで ほんとか?それじゃmemcpyマトモに使えないじゃん。 void*は++で1増えるって仕様に決まったはずで、、、と思ったがこれがgcc拡張だという話があり、このことを言っているのか? ならグダグダ言わずにCキャストで書けよもう、としか思わないが。 或いはC++的には許せないのかもしれんが static_cast<double>にしてしまうとかか? [] [ここ壊れてます]
790 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 22:48:23.04 ID:euoYf0NO0.net] すまんミスった × static_cast<double> ○ static_cast<double*>
791 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 23:20:13.09 ID:np1Yc2el0.net] >>776 static_cast じゃコンパイル通らない。 "*(long long*)&f = i" は double 型のオブジェクトに long long 型の参照を通してアクセスしているので 未定義動作になる。結果は「最適化で削除してしまう」に限らず、何でもアリだよ。 これが「「同一のメモリを違う型としてalias」に該当しないという理屈も無いでしょ。 memcpy の結果が定義されてるのは、同じ型のオブジェクト間でのコピーだけだったかと。 違う型の間で memcpy した結果の値が実は定義されてるということなら実に興味深いので ぜひ規格の該当箇所を示して欲しい。 この場合の C スタイルキャストの動作は reinterpret_cast に丸投げされるだけなので話は変わらないよ。
792 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 23:37:48.32 ID:5VdCNKN70.net] ここまでnextafter/nexttowardが出てきていない
793 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 23:38:32.35 ID:euoYf0NO0.net] >>778 > "*(long long*)&f = i" は double 型のオブジェクトに long long 型の参照を通してアクセスしているので してないぞ。 それは「fのアドレスを(long long*)にキャスト(この時点でlong long*型)したアドレスに対しiを書き込め」 であって、つまり long long に long long を書いている。だからmovが出る。 逆に f = *(double*)&i; は double に double を書くから fmov が出る。 その後の最適化で変更されるのはまた別の話。 > static_cast じゃコンパイル通らない。 だったら最初から>>759 の言うとおり、reinterpret_castでいいだろ。 > 違う型の間で memcpy した結果の値が実は定義されてる void* と void* なんだから同じ型だろ。何言ってんだ? お前、基本的に理解がずれてね?
794 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 23:47:06.34 ID:np1Yc2el0.net] >>780 なるほど、オブジェクトの型と式の型との区別がついてないんだね。 そこの理解無しで aliasing rule に関する話は無理だから、 C++ の規格を読み直すなりして区別が付くようになってからの出直しをおすすめする。
795 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 23:50:31.47 ID:euoYf0NO0.net] >>781 俺には君が全く理解出来てないように見えるけどね。 まあ平行線だろうし、終わりでいいけど。
796 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 00:03:31.90 ID:xhmNfS4m0.net] >>782 そうなると GCC も「全く理解出来てない」ことになるねぇ。 https://wandbox.org/permlink/WMFUTpXAgs2oZuos > prog.cc:5:17: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] > *(long long*)&f = i; > ^ > prog.cc:6:18: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] > f = *(double*)&i; > ^
797 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 00:12:55.40 ID:XAwzlQ9S0.net] >>782 それ以上恥かきたくなかったらこれ読んでくるといいよ blog-ja.intransient.info/2011/05/c-13.html