1 名前:デフォルトの名無しさん (ワッチョイ dfcf-HvS5) mailto:sage [2017/01/09(月) 14:49:27.56 ID:p96WJVyd0.net] 次スレを立てる時は本文の1行目に以下を追加して下さい !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part128 echo.2ch.net/test/read.cgi/tech/1480172629/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 echo.2ch.net/test/read.cgi/tech/1478440682/ ■長いソースを貼るときはここへ。■ 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
930 名前:デフォルトの名無しさん (ワッチョイ fe1f-sIi0) [2017/03/26(日) 18:22:41.51 ID:Ntld20FG0.net] >>906 浮動小数点ではよくある、気にならないとおもうが・・ 浮動小数点の演算は誤差、ケタ落ちを考慮するのが普通。
931 名前:デフォルトの名無しさん (ワッチョイ fe1f-sIi0) [2017/03/26(日) 18:27:34.32 ID:Ntld20FG0.net] 誤差の
932 名前:問題よりソフトウェアの速いからという回答になってるが・・ なんでハードウエアサポート使わないの? この質問に対する回答によると、「2011年の10月以降 x86-64の Linuxではこの(ソフトウェア)コードが使われており、 明らかにFSINより速い(Since October 2011, this is the code that actually runs when you call sin() on a typical x86-64 Linux system. It is apparently faster than the fsin assembly instruction.)」とのことです。 というわけで、現在かなり普及している x86_64 アーキテクチャの CPU の三角関数命令 FSIN は、速度、精度などが問題視されており(少なくとも glibc では)、別途ソフトウェア的に実現されているようです。 まとめ ■サインなどの三角関数の値はテーラー展開を使用した有名な式を昔も今も使って計算していることが多い。 ■20年以上昔から浮動小数点数演算用のFPUには三角関数の値を計算する命令(ハードウェアサポート)がある。 ■しかしインテルの x86_64 系アーキテクチャーのこの命令は精度及び速度に問題があるらしく、少なくとも glibc 2.22 ではFPUのサイン命令は使っておらず、ソフトウェア的に計算しているらしい。 という感じでした。 http://tomeapp.jp/archives/1282 [] [ここ壊れてます]
933 名前: ◆QZaw55cn4c (ワッチョイ a6ff-nbIt) mailto:sage [2017/03/26(日) 19:45:11.69 ID:KxYPtDxZ0.net] テイラー展開/マクローリン展開(x=0) を中心から遠くに適用しようとすると誤差はでるね 周期で割って近場で代入するのが普通だが,それを嫌ったのかな?
934 名前:デフォルトの名無しさん (オッペケ Srd3-QntA) mailto:sage [2017/03/26(日) 21:51:40.27 ID:fl4IudC1r.net] 浮動小数点計算で精度が足りないとか言ってる奴は たいていは精度じゃなくてオツムが足りない
935 名前:デフォルトの名無しさん (ワッチョイ 8ac3-Cbvv) mailto:sage [2017/03/26(日) 21:53:51.01 ID:5/5Va2U30.net] 最近の大学では実用数学やらんのか
936 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/26(日) 22:32:47.30 ID:r1GdkURH0.net] 64bitで精度が足りなくなるのは原子力か宇宙か暗号くらいじゃないのか
937 名前:デフォルトの名無しさん (オッペケ Srd3-QntA) mailto:sage [2017/03/26(日) 22:40:07.59 ID:pnqG1H1Or.net] 精度の問題と>>906 の様にロジック自体がおかしいアホの問題を一緒にしてしまっているような
938 名前:デフォルトの名無しさん (ワッチョイ b71f-Oq8d) mailto:sage [2017/03/26(日) 22:49:30.03 ID:+0YN82z50.net] >>913 分布を扱う業種だったら足りなくなるだろ tail riskの話になると64bitじゃ全然足りない
939 名前:デフォルトの名無しさん (ワッチョイ 6f92-kvyc) [2017/03/27(月) 03:12:54.27 ID:om6iAVJe0.net] 浮動小数点の精度の問題と特定のsin実装の誤差の問題をごっちゃにしてるのがいるな
940 名前:デフォルトの名無しさん (ワッチョイ 7b59-BXGz) mailto:sage [2017/03/27(月) 19:37:51.44 ID:DcY7c9jX0.net] 三角関数とか測量や透視投影関連の画角計算するようなごく一部の連中しか使わないだろJK しいて言えば機械学習する人らがまれにacos()を使うかな〜ぐらい ニッチすぎてハードウェア演算だろうがソフトウェアーエミュだろうが大して問題になんね
941 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/27(月) 19:47:44.82 ID:iyhdhEhz0.net] 話の元としては、特徴抽出だったから、フーリエ変換かな。。。
942 名前:デフォルトの名無しさん (ワッチョイ 2b92-2Cpe) mailto:sage [2017/03/27(月) 20:48:32.18 ID:iw91puSD0.net] ソフトウェア開発工程に実装設計が必要なんじゃないかなって思い始めたんだけど そんなことしてるひといるかな?
943 名前:デフォルトの名無しさん (ワッチョイ aa6b-VHv+) mailto:sage [2017/03/27(月) 20:59:26.57 ID:+nINF5LH0.net] ニッチな数学関数は社会インフラのクリティカルな部分に使われるからひやひやする でもそんくらいの些細な誤差なら数百億かけたお天気衛星が落ちるくらい うみほたるがいきなし潰れたりスカイツリーがいきなり倒れたりはしない
944 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/27(月) 21:12:17.23 ID:iyhdhEhz0.net] >>919 LLDのことじゃなくて? 具体的には、どんな感じ?
945 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/27(月) 21:48:32.03 ID:cEFtoidy0.net] cmathのよくわからない関数は誰か使ってんのか?
946 名前:デフォルトの名無しさん (ワッチョイ be8c-72yv) [2017/03/27(月) 22:03:40.41 ID:gdZSPxyQ0.net] C++17でspecial math functionsが追加される件のことか?
947 名前:デフォルトの名無しさん (ササクッテロル Spd3-yqOs) mailto:sage [2017/03/27(月) 22:16:03.16 ID:9PqnwE37p.net] LLDって何の略?
948 名前:デフォルトの名無しさん (ワッチョイ be8c-N8vi) mailto:sage [2017/03/27(月) 22:17:37.19 ID:YTkDzohr0.net] long long decimal
949 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/27(月) 22:52:15.25 ID:iyhdhEhz0.net] Lower Level Design
950 名前:デフォルトの名無しさん (スプッッ Sdea-2Cpe) mailto:sage [2017/03/28(火) 00:29:07.69 ID:wYvZd6LUd.net] >>921 はじめて聞く 俺の中のイメージだと 要件定義・基本設計・詳細設計の次に実装設計が合ってもいいと思うんだ 詳細設計って機能とかだからそれをどう実現するかとかの関数の中のサブ関数レベルの話
951 名前:デフォルトの名無しさん (ワッチョイ b7f4-Vb+v) mailto:sage [2017/03/28(火) 00:57:49.92 ID:0r7X/qmQ0.net] >>917 いや、普通にPC使ってたら三角関数位使うだろ
952 名前:926 (ワッチョイ aa67-QN42) mailto:sage [2017/03/28(火) 01:17:13.75 ID:EZ0E4K7B0.net] >>927 詳細設計=LLDね。 詳細設計をやると、実装の設計までいきませんか? データの持ち方、関数のフローチャートまで書くとおもうのですが。。 単体検査で、分岐追えなくなってしまうし。。 なんか、思い違いしてますかね。
953 名前:デフォルトの名無しさん (ワッチョイ 9375-iMo4) [2017/03/28(火) 01:21:00.12 ID:r9lg9pov0.net] >>928 GUI使ってたらグラフィックスライブラリが間違いなく使ってるよね
954 名前:デフォルトの名無しさん (ワッチョイ 0aed-yqOs) mailto:sage [2017/03/28(火) 01:35:15.98 ID:7ttxV7Jp0.net] その辺の言葉って仕事の分野とか規模とかによってまちまちな気がして面倒臭い 結局のところブレークダウンして行ってるだけだし、文書のメンテする手間とか勘案した上でやった方が良いと判断したならやれば良いんじゃないか あとスレチじゃね
955 名前:デフォルトの名無しさん (ドコグロ MM4a-hXJm) mailto:sage [2017/03/28(火) 06:57:20.65 ID:+hgLXPeGM.net] > 詳細設計=LLDね。 俺も初めて聞いた 英語で低レベルな糞設計は何て言うんだろ?
956 名前:デフォルトの名無しさん (スプッッ Sdea-2Cpe) mailto:sage [2017/03/28(火) 07:09:38.55 ID:wYvZd6LUd.net] >>931 スレチかすまん ちょっと探してくる >>929 規模によるとは思うが事細かな処理内容は記載されなくないか 分岐処理とかの内部のやつとか
957 名前:デフォルトの名無しさん (ワッチョイ eb37-72yv) [2017/03/28(火) 10:52:55.66 ID:JfwQ0DgC0.net] crappy design
958 名前:デフォルトの名無しさん (ワッチョイ 6f92-kvyc) [2017/03/28(火) 17:59:50.95 ID:lUbwlPy10.net] >>917 三角関数がニッチすぎるだとかwさすがですね
959 名前:デフォルトの名無しさん (ガックシ 0626-0VlJ) mailto:sage [2017/03/28(火) 20:42:08.50 ID:Woa0lIQR6.net] まあ数学はなるたけ使わずにプログラムできるようにいろんなライブラリが整備されてるわけだから、三角関数不要と思ってる奴がいるのはむしろライブラリ作成者が成功している証といえる
960 名前:デフォルトの名無しさん (ワッチョイ eb5e-72yv) [2017/03/28(火) 23:53:38.80 ID:mX0+s2UE0.net] >>936 おまえシャブでも食ってんのか? 今日は何グラム?
961 名前:デフォルトの名無しさん (オッペケ Srd3-QntA) mailto:sage [2017/03/29(水) 08:00:31.62 ID:vWDDuFOJr.net] double型は使う分野と使わない分野の差が激しい 少なくとも誰でも使う訳ではない
962 名前:デフォルトの名無しさん (ワッチョイ 5739-6tpp) [2017/03/29(水) 09:05:07.67 ID:Ysl+RBZV0.net] シャブシャブなら
963 名前:デフォルトの名無しさん (ワッチョイ 1b84-rs+5) mailto:sage [2017/03/29(水) 17:29:03.34 ID:5uJ1HJ780.net] ideone.com/jWckMu 誰か助けて。 constexprクラスの練習してるけど、うまく動かない。 なんで?
964 名前:デフォルトの名無しさん (ワッチョイ 1b84-rs+5) mailto:sage [2017/03/29(水) 17:52:07.04 ID:5uJ1HJ780.net] ideone.com/oXM2RE これも無理だった。 もしかして、std::arrayのイテレータってconstexpr対応してない??
965 名前:デフォルトの名無しさん (ワッチョイ 1b84-rs+5) mailto:sage [2017/03/29(水) 18:50:14.93 ID:5uJ1HJ780.net] ideone.com/QBggO4 VCで動くけどGCCで動かない魔法のコード。 もういやー。
966 名前:デフォルトの名無しさん (ワッチョイ 5728-TrMc) mailto:sage [2017/03/29(水) 18:50:40.75 ID:Bb2qhsdR0.net] C++14からループとか使えるようになってたのか 「std::array constexpr」でググると知りたいことに辿り着けるかと
967 名前:デフォルトの名無しさん (ワッチョイ 1b84-rs+5) mailto:sage [2017/03/29(水) 19:16:10.03 ID:5uJ1HJ780.net] d.hatena.ne.jp/yohhoy/20160328/p1 これか。今策定中やんけ・・・。 俺には早かったな。もうちょっと環境がそろわないとむりだー。
968 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd4a-qegt) mailto:sage [2017/03/29(水) 20:18:49.04 ID:uG+6tdKud.net] >>945 ideone.com/j5in94
969 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd4a-qegt) mailto:sage [2017/03/29(水) 20:27:00.54 ID:uG+6tdKud.net] typenameを削っただけだ。
970 名前:デフォルトの名無しさん (オッペケ Srd3-QntA) mailto:sage [2017/03/29(水) 21:16:39.11 ID:sErT1Yizr.net] C++17のドラフトはライブラリのtypedefがusing宣言に修正されて見やすくなった typedefが老害と言われる日も遠くない
971 名前:デフォルトの名無しさん (ワッチョイ cff9-72yv) [2017/03/29(水) 21:24:13.15 ID:NU8Q9yFr0.net] typedefはもういらんな
972 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd4a-qegt) mailto:sage [2017/03/29(水) 21:38:57.12 ID:uG+6tdKud.net] テンプレートの型を使うときに、typenameが要る場合と要らない場合があって、使い分けないといけない。
973 名前:デフォルトの名無しさん (ワッチョイ 2b92-2Cpe) mailto:sage [2017/03/29(水) 22:53:40.27 ID:RGihPrn00.net] 質問なんだが二台構成のPC間(LANで直接繋ぐ)のソフトウェア同士で通信するときは 相手方のIPアドレス指定してその次にポートを指定するだけで良い? そんなことC++でできる??
974 名前:デフォルトの名無しさん (ワッチョイ cff9-72yv) [2017/03/29(水) 22:54:03.75 ID:NU8Q9yFr0.net] いま酔っ払ってて思考能力がないが それ規格のバグちゃうの? まさか特定のコンパイラでどうたらって話じゃねえだろな?
975 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd4a-qegt) mailto:sage [2017/03/29(水) 23:10:32.67 ID:uG+6tdKud.net] 酔っぱらいは機械の操作をしてはなりません
976 名前:デフォルトの名無しさん (ワッチョイ 7b59-BXGz) mailto:sage [2017/03/29(水) 23:32:23.28 ID:AoD4FYay0.net] 型なのか変数なのかまぎらわいし依存名の解決に使う
977 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 00:08:17.06 ID:POGQ4vF/r.net] 規格のバグではなく「テンプレートの型」などという意味不明な言葉を使う奴のオツムのバグか エラーにしなければならないのにコンパイルを通してしまう特定のコンパイラーのバグ
978 名前:デフォルトの名無しさん (ワッチョイ cf1f-jsM4) mailto:sage [2017/03/30(木) 00:32:16.96 ID:gILJOuVy0.net] >>950 できるかどうかなら、出来ると言うことに 詳しく聞きたいなら、こちらの方が良いかも echo.2ch.net/test/read.cgi/tech/1414709836/
979 名前:デフォルトの名無しさん (ワッチョイ 53c1-Fkbu) mailto:sage [2017/03/30(木) 01:52:01.18 ID:igjKpMzz0.net] funcっていう関数があったときに func(char* a) と func(char *a)って違う?
980 名前:デフォルトの名無しさん (ワッチョイ b392-8ugA) mailto:sage [2017/03/30(木) 01:53:25.34 ID:T78D8oTL0.net] >>956 ポインタの位置が違うだけ?一緒だよ >>955 できるか そこも見てたんだけどログの流れ遅くてこっちに来てしまった
981 名前:デフォルトの名無しさん (ワッチョイ f37a-QmV0) mailto:sage [2017/03/30(木) 01:58:51.15 ID:Qgxuh/pI0.net] ぐぐればわかることを
982 名前:デフォルトの名無しさん (ワッチョイ 53c1-Fkbu) mailto:sage [2017/03/30(木) 02:00:30.85 ID:igjKpMzz0.net] >>957 同じか ありがとう
983 名前:デフォルトの名無しさん (ワッチョイ bf3c-agmj) [2017/03/30(木) 02:32:10.51 ID:sHIKu4vn0.net] >>14 プログラムのローダーがやるんだろう。 www.ertl.jp/~takayuki/readings/info/no02.html https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%83%80 アセンブラプログラミングでよく使う .BSSという擬似命令は データセグメントのうち、0で初期化されるものをいう。 https://ja.wikipedia.org/wiki/.bss 非0の場合は実行ファイルに初期化内容が書かれる。 セグメントの情報は実行ファイルに WindowsだったらPE形式(つまりexe)にセクションとして書かれている。 0初期化領域は、実体の記述はなくサイズだけ書いてあることもある。 コンパイラやリンカによって、セクションの名前は変わるけれども コードセグメント → .text データセグメント → .data 読専データ → .rdata リソース → .rsrc こういったセクション名を付けるのが慣習となっている。 .bssというセクション名を持ってるPEファイルも結構あるっぽい。 OSがない原始的なコンピュータの場合は、読み取り専用はROMに置くまでだが、0も非0もRAMに置くことになる。 最近のマイコンなら、実行ファイル内に、0を記述しておくか、非0を記述しておくかということで済むはず。なんらかのハードがメモリ空間へロードさせる。 30年位前だったらROMがメモリ配線に直結されるし、容量的に初期値を持ったRAMということ自体がタブーだろうから、コード内に初期値や0初期化の処理を埋め込むことになる。
984 名前:デフォルトの名無しさん (ワッチョイ b392-AsIq) mailto:sage [2017/03/30(木) 03:34:28.25 ID:9cHNN/bR0.net] >>960 ここはC++スレだぞ 質問の意味理解してない的はずれな長文でロングパス返さなくて良い
985 名前:デフォルトの名無しさん (ワッチョイ 038f-MCV6) [2017/03/30(木) 06:51:34.25 ID:kb+hG/9a0.net] 記録的な亀レスだな
986 名前:デフォルトの名無しさん (ワッチョイ 83b4-bOuD) mailto:sage [2017/03/30(木) 07:10:52.31 ID:GtG5BmiK0.net] >>955 が質問者の日本語を理解出来ていない気がしなくもない
987 名前:デフォルトの名無しさん (ワッチョイ 7384-+x88) mailto:sage [2017/03/30(木) 08:19:28.37 ID:/X8qE6aT0.net] >>945 ありゃ、残ってたか。それは盲点だった。 参考になったよありがとう。
988 名前:デフォルトの名無しさん (アウアウオー Sa1f-mlhd) [2017/03/30(木) 08:40:58.04 ID:9khgRv1/a.net] https://goo.gl/8by4rX これは嫌だなー。。本当?
989 名前:デフォルトの名無しさん (ワッチョイ bfcc-hXdu) mailto:sage [2017/03/30(木) 08:50:24.61 ID:FvKuiJ0u0.net] どうせまたお肌のスキンケアだろ
990 名前:デフォルトの名無しさん (スプッッ Sddf-8ugA) mailto:sage [2017/03/30(木) 11:54:42.41 ID:3i58Fh9vd.net] namespaseで区切るのは良いんだけど 無名名前空間の使い道がさっぱりわからん
991 名前:デフォルトの名無しさん (ワッチョイ a328-ZZMP) mailto:sage [2017/03/30(木) 12:05:24.60 ID:QknQ1y490.net] そのソース以外では使わない関数なんかを放り込んでおけばいい staticと同じ使い道かな
992 名前:デフォルトの名無しさん (ワッチョイ 038f-MCV6) [2017/03/30(木) 12:37:53.22 ID:kb+hG/9a0.net] つーか無名名前空間があれば記憶クラスのstaticはいらんだろ 1つ1つちまちまstaticをつけて回らなくてもまとめてボンだし
993 名前:デフォルトの名無しさん (スップ Sddf-mnw5) mailto:sage [2017/03/30(木) 12:40:17.76 ID:41dNcfyJd.net] >>967 名前を考えるという面倒くささなしにメリットを享受できる。
994 名前:デフォルトの名無しさん (ドコグロ MM1f-3MUK) mailto:sage [2017/03/30(木) 13:02:35.48 ID:tcaHNIPGM.net] >>962 記録的と言うのはこういう奴だろ hanabi.2ch.net/test/read.cgi/i4004/1221375066/491
995 名前:デフォルトの名無しさん (ワッチョイ 038f-MCV6) [2017/03/30(木) 13:40:52.52 ID:kb+hG/9a0.net] 8年半かw
996 名前:デフォルトの名無しさん (ラクッペ MM97-8ugA) mailto:sage [2017/03/30(木) 17:30:29.40 ID:K9zcp/soM.net] xxx.hに定義されたクラスのメンバ関数を、xxx.cppではなくxxx_impl.hというファイルに実装してるソースがあるのですが、これはどういった意図でしょうか?
997 名前:デフォルトの名無しさん (ワッチョイ cf92-KV4R) [2017/03/30(木) 17:36:39.51 ID:NvGEhIva0.net] Pimplの実装部分を別ファイルにしたかったんじゃね
998 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 17:36:40.33 ID:oKZnpR9xr.net] 作った奴に訊けボケ
999 名前:デフォルトの名無しさん (ササクッテロレ Sp17-EkMZ) mailto:sage [2017/03/30(木) 17:41:14.24 ID:uipyTNiYp.net] ヘッダで完結させたい テンプレート関数 ヘッダと実装の分離 このへん
1000 名前:デフォルトの名無しさん (ワッチョイ f37a-QmV0) mailto:sage [2017/03/30(木) 19:08:10.58 ID:Qgxuh/pI0.net] 何が何でもヘッダから実装を追い出したい人がやってるやつ
1001 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 19:50:46.10 ID:dELrX4bqr.net] ↑ヘッダーとファイルを混同している低能 そしてxxx_impl.hをxxx_impl.cppに空目したアホ
1002 名前:デフォルトの名無しさん (スッップ Sddf-ahp/) mailto:sage [2017/03/30(木) 20:13:43.42 ID:qxGCi119d.net] ヘッダに実装書くとコンパル時間うざくない?
1003 名前:デフォルトの名無しさん (ワッチョイ bf3c-agmj) [2017/03/30(木) 20:33:38.20 ID:sHIKu4vn0.net] >>961 バカでごめん。 >>9-14 以降、よく高級言語だけでギャーギャー130レスも盛り上がれたな。 qiita.com/nanashi/items/4aff10ab6f9669d006dc これそっくりのコードで実験した int hoge(int i) { int r=0; if (i >= 0) { static int ii = static_int(i); r=ii; } else { static int ii = static_int(i); r=ii; } return r; } static_int(i)を呼び出すあたりで MOV DWORD PTR SS:[ESP],a.00406048 ←ガード(ロック)のためのオブジェクト(もちろんコンパイラが吐く暗黙のだろう)への参照を引数にとっている模様 CALL <JMP.&libstdc++-6.__cxa_guard_acquire> → この中には libwinpthread-1の pthread_once、pthread_mutex_lock、pthread_cond_wait、pthread_mutex_unlockなど(>>15 ) TEST EAX, EAX JE なんちゃら (つまりこの分岐でstaticを初期化するかどうか決めている模様) リリースはこれ MOV DWORD PTR SS:[ESP],a.00406048 CALL <JMP.&libstdc++-6.__cxa_guard_release> 上記はhoge()内が i と定数比較による単純な正負2分岐であり、呼び出しもhoge(1)などの定数の場合は、hoge()が二つの関数に展開された場合もあった。 hoge()内の i の分岐が定数比較の5分岐(else if)にしてみたら、ガードオブジェクトが個別に5つ作られているように見えた。 結構おもしろね、この結果。
1004 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 20:55:33.59 ID:8zS706yR0.net] >>967 なんらかのクラスのメンバ関数を他の翻訳単位から見えなくしたいが 明示的に名前つけたnamespaceにしたくないときは要る staticでは代わりにならない (他になんかあるっけ;
1005 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 21:03:14.83 ID:dELrX4bqr.net] >クラスのメンバ関数を他の翻訳単位から見えなくしたいが明示的に名前つけたnamespaceにしたくないとき 始めて聞く珍妙な説だ 今日はクスリを飲み忘れているとか?
1006 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:21:56.78 ID:8zS706yR0.net] >>982 a.cppとb.cppに同じ名前のクラスの定義を書いてしまい、さらに同じシグネチャのメンバ関数を書いてしまい、 しかし関数の中身が違うケースを考えると良い これはリンク時にエラーになるか、杜撰な処理系だとどちらかが適当に呼ばれるという実害があり、 なおかつnamespaceでガードしない限り、ソースコードを弄る誰かが知らずに上のケースを実現してしまう危険性が残る
1007 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:26:32.64 ID:8zS706yR0.net] スマン 誤: namespaceでガードしない限り 正: 無名namespaceでガードしない限り 名前付きnamespaceだとたまたま同じ名前を使われてしまう危険性が残る、
1008 名前:デフォルトの名無しさん (ワッチョイ cf1f-jsM4) mailto:sage [2017/03/30(木) 21:26:49.87 ID:gILJOuVy0.net] 杜撰な処理系って具体的には何?
1009 名前:デフォルトの名無しさん (ワッチョイ 038f-MCV6) [2017/03/30(木) 21:33:19.96 ID:kb+hG/9a0.net] >>981 メンバは強制的に外部結合だからなあ 982は
1010 名前:Vャブじゃなくエトルフィンでも入れてるのかな [] [ここ壊れてます]
1011 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:34:44.32 ID:8zS706yR0.net] >>985 Visual Studo 2010についてくるVC++とかいうマイナーな処理系 2008もそうだったような…
1012 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:39:33.97 ID:8zS706yR0.net] 次のコードで実験でくる。今日実験したら答えはcall_foo_a()もcall_foo_b()も30やったわ; ■ "a.cpp" static foo { int func(int x, int y) { return x + y; } }; void call_foo_a() { foo x; printf("%s: func(10, 20)=%d\n", __FUNCTION__, x.func(10, 20)); } ■ "b.cpp" (a.cppと同じだが、foo::func()の中身を return x - y;に変えたやつ) ■ "main.cpp" extern void call_foo_a(); extern void call_foo_b(); int main() { call_foo_a(); call_foo_b(); }
1013 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:43:20.63 ID:8zS706yR0.net] >>987 それはそうかもしれないが、無名namespaceのマングリング規則がトリッキーなのを >>987 は知らないんじゃないの; いや詳しくは漏れも知らんが、 実際>>988 のコードは"a.cpp"と"b.cpp"のfooをどっちも無名namespaceで囲えば正しく動く、 (call_foo_a()は30、call_foo_b()は-10となる、
1014 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 21:45:46.29 ID:dELrX4bqr.net] >>983 >しかし関数の中身が違うケースを考えると良い なるほど それはクラスの定義自体が漏れていることが問題なのだが なぜかメンバ関数の問題と勘違いしてしまったのだな
1015 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:49:03.80 ID:8zS706yR0.net] >>990 何言ってるのかわからんが推測でレスするが、 メンバ関数を含まないクラスや構造体はリンクが必要なシンボルを生成しないから 同名のブツが複数の翻訳単位にあっても全く問題は無い(よってC言語はstaticだけで逝けた つまりメンバ関数がこの話の本質だとわかっていない>>990 のレスは大概だ、
1016 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 22:05:28.61 ID:dELrX4bqr.net] >全く問題は無い なるほど ODR違反の未定義動作が問題無いと考えてしまうようでは致し方ない。 ちなみにC++にはテンプレートというものが有って 重複定義された型をパラメーターに持つテンプレートのインスタンスが問題を起こすと言うことには気づかなかったらしい
1017 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 22:15:12.42 ID:8zS706yR0.net] >>992 ていうか話は逆で、>>988 のようなケースがあるからODR制約という概念が生まれ、 無名namespaceは>>988 のようなケースにおける解決策 (異なるマングリング名で異なる定義を識別するのだからODR制約には抵触しなくなる ソースは脳内 >重複定義された型をパラメーターに持つテンプレートのインスタンスが問題を起こすと言うことには気づかなかったらしい そりゃーODR制約違反のソースだとそうなるが、 無名namespaceで修正した>>988 のfooでは起き得ない話、
1018 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 22:24:43.35 ID:dELrX4bqr.net] >無名namespaceで修正した>>988 のfooでは起き得ない話、 うーむ、二つ前の本人のレスは 無名namespaceで修正してなくても関数が無ければ全く問題ない だったと思うのだが、もう忘れたのだろうか
1019 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 22:47:57.29 ID:8zS706yR0.net] おk 無名namespaceで修正して「いない」>>998 はODR違反だった気がするので 今謹んで訂正した、
1020 名前:デフォルトの名無しさん (ワッチョイ d372-8ugA) mailto:sage [2017/03/30(木) 23:55:20.49 ID:Plkrcx8f0.net] >>976 テンプレート関数だからでした。 想定されてたコンパイラのテンプレートの解釈がinclusion-modelってやつで、そのためでした。 ありがとうございました。
1021 名前:デフォルトの名無しさん (ワッチョイ efc8-CrJt) mailto:sage [2017/03/31(金) 01:06:57.90 ID:ryHYQIXS0.net] こういう糞議論してる間にほかの言語で着々とプロダクトが作られていくわけである。
1022 名前:デフォルトの名無しさん (ワッチョイ f37a-QmV0) mailto:sage [2017/03/31(金) 01:09:12.34 ID:UkLjKqcm0.net] 記述の自由度が高いせいで全貌を知る者がほとんど居ない
1023 名前:デフォルトの名無しさん (ワッチョイ cf36-FVbu) mailto:sage [2017/03/31(金) 01:14:14.24 ID:RI1LGJ050.net] いや利用者の多いまともなプロダクトはc++で記述されているのが多いだろ。 LL言語のVMとかブラウザとかもそうだし
1024 名前:デフォルトの名無しさん (ワッチョイ cf92-KV4R) [2017/03/31(金) 01:44:24.21 ID:zbf3isLY0.net] パフォーマンスが重要な製品作る必要あるなら現状C++しか選択肢ないからね
1025 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています