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
2 名前:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK3f-6Slv) mailto:sage [2017/01/09(月) 16:53:24.81 ID:FJMj93WYK.net] STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。 ---- テンプレ ここまで ----
3 名前:デフォルトの名無しさん (ワッチョイ 0f42-twlg) mailto:sage [2017/01/09(月) 16:56:41.17 ID:jVBRIf3C0.net] これは>>1 乙じゃなくてシフト演算子なんだからね
4 名前:デフォルトの名無しさん (ワッチョイ dfc1-f52P) mailto:sage [2017/01/09(月) 17:39:43.46 ID:MgtRKFl00.net] ご苦労!
5 名前:デフォルトの名無しさん (ワッチョイ 6f13-HvS5) mailto:sage [2017/01/09(月) 17:40:19.60 ID:s0WlKSpH0.net] これは>>1 じゃなくてストリームへの入力なんだからね
6 名前:デフォルトの名無しさん (ワッチョイ df98-S/j3) [2017/01/09(月) 20:32:19.17 ID:IZbe/h670.net] catch(>>1 & err) { err << "うむ、ご苦労"; }
7 名前:デフォルトの名無しさん (オッペケ Sr3f-KLRm) mailto:sage [2017/01/09(月) 20:48:55.53 ID:NzCLpVsYr.net] >>2 ゴミを貼るなボケ
8 名前:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK3f-6Slv) mailto:sage [2017/01/09(月) 20:57:29.53 ID:FJMj93WYK.net] へへへっ
9 名前:デフォルトの名無しさん (ワッチョイ fb04-nASw) [2017/01/09(月) 22:45:37.43 ID:cNtoCjW40.net] グローバルなstatic変数は(コンパイル単位が違うと)初期化タイミングが不定だから使うな みたいな話がありますが、これはクラスメンバのstatic変数でも同じでしょうか。 やはり定番のローカルなstatic変数の参照を返すのがベストでしょうか?
10 名前:デフォルトの名無しさん (ワッチョイ df8e-KLRm) mailto:sage [2017/01/09(月) 23:42:53.87 ID:YmMsaSRh0.net] static int a = f(); ↓ static int &get_unko() { static int a = f(); return a; } 問題解決になるとは到底思えない ちなみにクラスの静的メンバーでも同じ
11 名前:デフォルトの名無しさん (ワッチョイ 1b7b-p/5D) [2017/01/10(火) 00:09:01.54 ID:qNfJPVUt0.net] >>9 ベストは静的な寿命をもつ変数が別の静的な寿命を持つ変数を参照するような設計にしないこと やむを得ずそうなる場合はローカルなstatic変数の参照を返す方法がベター しかしそれも構築は初めて呼ばれた時になるが、破棄の順が不定なのは変わらずだから注意
12 名前:デフォルトの名無しさん (ワッチョイ dfcf-IbiL) mailto:sage [2017/01/10(火) 00:34:11.81 ID:kCG+Vhkl0.net] >>11 破棄準は構築と逆順になるよ。 [basic.start.term]
13 名前:デフォルトの名無しさん (ワッチョイ 1b7b-p/5D) [2017/01/10(火) 01:22:55.56 ID:qNfJPVUt0.net] >>12 ホンマやね メモリ上の配置と関係なしに構築した順番覚えてるのな。
14 名前:デフォルトの名無しさん (ワッチョイ 0f33-Flmg) [2017/01/10(火) 02:41:10.58 ID:YALu2HFR0.net] しかし、関数内で定義したstatic変数ってどうやって「一度のみ初期化」を実現してるんだろう? 規格上の明記は無いよね? もし、コード上に初期化フラグ的なものを保持して毎回判定してるのだとしたら、単純なグローバル変数よりアクセス遅くなるのかな?
15 名前:デフォルトの名無しさん (ワッチョイ dfcf-IbiL) mailto:sage [2017/01/10(火) 03:28:04.72 ID:kCG+Vhkl0.net] >>14 気になるならアセンブリ出力を見ればいい。 https://godbolt.org/g/Rp3mVk 効率は実測でどうぞ。
16 名前:デフォルトの名無しさん mailto:sage [2017/01/10(火) 03:42:52.33 ID:N3Ngq+Oq0.net] 江添は何て言ってる?
17 名前:デフォルトの名無しさん (ワッチョイ 0f7b-/uDL) mailto:sage [2017/01/10(火) 04:16:44.71 ID:UGgokZQL0.net] 規格オタクの江添に実装のことを聞いてどうするのか
18 名前:デフォルトの名無しさん (ワッチョイ 5f36-GcKO) mailto:sage [2017/01/10(火) 07:19:19.96 ID:xRFVWFBm0.net] >>17 規格上明記は無いのではという>>14 の疑問に対して>>16 のレスだろうから、実装は関係ないでしょ。
19 名前:デフォルトの名無しさん (ドコグロ MMff-JQu6) mailto:sage [2017/01/10(火) 08:35:32.37 ID:WWXPDPHuM.net] >>14 スコープが違うだけだろ フラグとか意味わからん
20 名前:デフォルトの名無しさん (ワッチョイ 0f33-Flmg) [2017/01/10(火) 09:01:12.67 ID:YALu2HFR0.net] >>18 主要な実装がどうなっているのか気になりますねー。
21 名前:デフォルトの名無しさん (ワッチョイ 0f33-Flmg) [2017/01/10(火) 09:03:05.70 ID:YALu2HFR0.net] >>19 関数内の場合は初期化タイミングが明確にされている部分が違うよね?
22 名前:デフォルトの名無しさん (スプッッ Sdff-5duh) [2017/01/10(火) 09:17:26.16 ID:Kh8Jpf0Qd.net] 静的ローカル変数のデストラクタはどうやって呼び出してるんですか コンパイル時には順番決まらないですよね
23 名前:デフォルトの名無しさん (ワンミングク MMff-kB5U) mailto:sage [2017/01/10(火) 10:17:49.42 ID:KPiaZgHCM.net] >>22 生成された順にデストラクタスタックに積んどきゃええだけやろ
24 名前:デフォルトの名無しさん (ワッチョイ bb7b-XpjH) mailto:sage [2017/01/10(火) 21:06:37.99 ID:aZrJHKL80.net] >>14 マルチスレッド下でも1度だけ初期化しなけりゃならないのでややこしいことをやってる
25 名前:デフォルトの名無しさん (ワッチョイ 6fa6-HvS5) mailto:sage [2017/01/10(火) 21:27:26.24 ID:A8TeocJX0.net] スレッドセーフな点がありがたいと思っているんだが
26 名前:デフォルトの名無しさん (ワッチョイ ab26-S/j3) mailto:sage [2017/01/11(水) 09:57:17.96 ID:kJf5mE6d0.net] その意味で、どのスレッドが最初に呼び出して初期化するか 分からないっていう怖さは有るがな スレッドに紐づくようなものを初期化するのはNGだ (COMであるとかウィンドウであるとか) もしくはプログラムの最初で明示的にメインスレッドから呼び出して初期化しておくか スレッド間でシェアする必要がなければTLSにしておくか
27 名前:デフォルトの名無しさん (ワッチョイ df98-S/j3) [2017/01/11(水) 11:52:08.85 ID:z2RHK6s+0.net] 最初からいきなりマルチスレッドなわけじゃなし mutexやatomicでどうにでもできるでしょ
28 名前:デフォルトの名無しさん (ワッチョイ ab26-S/j3) mailto:sage [2017/01/11(水) 12:30:02.49 ID:kJf5mE6d0.net] 関数内で定義したstatic変数を初期化するスレッドをメインスレッドなどに制限するのを >mutexやatomic でどうやって解決するのか熱く語ってもらおうか
29 名前:デフォルトの名無しさん (ワッチョイ df98-S/j3) [2017/01/11(水) 12:37:09.06 ID:z2RHK6s+0.net] 質問の意味がわからんぞ
30 名前:デフォルトの名無しさん (オッペケ Sr3f-KLRm) mailto:sage [2017/01/11(水) 12:37:52.47 ID:ZhOyh3uTr.net] >>26 >スレッドに紐づくようなものを初期化するのはNGだ いきなりお題改変乙 グローバルに置くんだからスレッド間で共有したい場合の話に決まってるのに
31 名前:デフォルトの名無しさん (ワッチョイ ab26-S/j3) mailto:sage [2017/01/11(水) 12:53:45.95 ID:kJf5mE6d0.net] >>29 お前が >mutexやatomic って言ったんだろ いっとくが排他制御の話など誰もしてないぞ 世の中には生成されたスレッドに紐づいてしまうオブジェクトというものがあって Windowsのウィンドウであれば、生成されたスレッドのメッセージキューで メッセージポンプを回すことになるし COMは生成されたスレッドのアパートメントで一生を過ごす どのスレッドで初期化されたかが重要になるオブジェクトもあるってこった そして関数内static変数は最初に呼び出したスレッドで初期化処理が走る <
32 名前:br> この問題をお前は >mutexやatomic で解決するんだろ? さあ、熱く語れ >>30 スレッドに紐づくようなもの(WindowsのCOMやウィンドウ)を 関数内で定義したstatic変数で初期化するのはNG →スレッドに紐づかないものであればOK、スレッド間で共有もできる 何がお題変更なの? グローバル変数やシングルトンに関数内static変数は便利だけど 相性が悪いものもあるって話なのに [] [ここ壊れてます]
33 名前:デフォルトの名無しさん (ワッチョイ df17-pn3f) [2017/01/11(水) 14:03:34.54 ID:9AYGk8zp0.net] static変数を考える場合、このスレ的にはC++11から導入された thread_local を無視できないでしょ。 スレッド局所記憶(英: Thread local storage, TLS) https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E5%B1%80%E6%89%80%E8%A8%98%E6%86%B6
34 名前:デフォルトの名無しさん (オッペケ Sr3f-KLRm) mailto:sage [2017/01/11(水) 15:00:37.89 ID:ZhOyh3uTr.net] >>31 >何がお題変更なの? 相性が悪いものの話なんかしてねーし スレッド間で共有したい変数の話の最中に 「スレッド間でシェアする必要がなければTLS」とか力説し始めて アホなの?
35 名前:デフォルトの名無しさん (ワッチョイ df98-S/j3) [2017/01/11(水) 15:51:10.26 ID:z2RHK6s+0.net] 同感
36 名前:デフォルトの名無しさん (ワッチョイ ab26-S/j3) mailto:sage [2017/01/11(水) 15:53:31.57 ID:kJf5mE6d0.net] 相性が悪いものがあるっていう書き込みをして何が悪いんだ? >スレッド間で共有したい変数の話の最中に それはお前が勝手に決めたことだろ 元々あくまで関数内static変数の初期化がスレッドセーフになっているというだけの話であり 本質的にロジックとして変数をスレッド間で共有する必要が有るのか無いのかまでは関係ないだろ 本質的にスレッド間で共有する必要がない場合はTLSに変更することもできる ってだけの話で そのほうがパフォーマンスが出る場合もある
37 名前:デフォルトの名無しさん (オッペケ Sr3f-KLRm) mailto:sage [2017/01/11(水) 16:34:37.80 ID:ZhOyh3uTr.net] static変数ってどうやって〜を実現してるんだろう? ↓ MT保証で複雑なことしてる ↓ そのstatic、ホントに必要ですか? ↓ いきなり何を言いだすの ↓ 本質的にロジックとして変数をスレッド間で共有する必要が有るのか無いのかまでは話してないからな←今ここ
38 名前:デフォルトの名無しさん (ワッチョイ ab26-S/j3) mailto:sage [2017/01/11(水) 16:47:40.32 ID:kJf5mE6d0.net] >そのstatic、ホントに必要ですか? スレッドローカル関数内static変数の事すら理解していないのがよく分かった
39 名前:デフォルトの名無しさん (ワッチョイ bb7b-XpjH) mailto:sage [2017/01/11(水) 17:27:25.47 ID:7JGhXUMg0.net] >>27 どのような状況で呼び出されても確実に一回だけ初期化する事が要求されている mutexは初期化する必要があるから役に立たん
40 名前:デフォルトの名無しさん (ワッチョイ df17-pn3f) mailto:sage [2017/01/11(水) 17:41:25.81 ID:9AYGk8zp0.net] IDが見えるスレッドなのに、ひとりの相手とやりとりしている錯覚に陥った ID:ZhOyh3uTr 氏は失礼ながら、精神疾患の兆候があるかも。
41 名前:デフォルトの名無しさん (ワッチョイ df98-S/j3) [2017/01/11(水) 18:35:56.09 ID:z2RHK6s+0.net] 俺は一言もstaticとは言ってないし mutexとatomic「だけで」とも言ってないのに 人の話の前提条件を勝手にでっち上げて叩く ストローマンに辟易としちまった
42 名前:デフォルトの名無しさん (ワッチョイ bb7b-XpjH) mailto:sage [2017/01/11(水) 18:45:08.90 ID:7JGhXUMg0.net] >>26 まではstatic変数(特に関数内)の初期化の話をしてたのに、知ったかぶって参加しようとしたID:z2RHK6s+0がグチャグチャにしたって事か
43 名前:デフォルトの名無しさん (ワッチョイ df8e-KLRm) mailto:sage [2017/01/11(水) 18:48:17.00 ID:wUdtm8ww0.net] いつもながらのぐちゃぐちゃ展開 それがこのスレの醍醐味
44 名前:デフォルトの名無しさん (ワッチョイ df8e-KLRm) mailto:sage [2017/01/11(水) 20:16:24.69 ID:wUdtm8ww0.net] >さあ、熱く語れ >どうやって解決するのか熱く語ってもらおうか どちらかというと>>26 あたりからおかしくなったようだ クスリでもやっているのか、>>28 あたりは何か幻覚を見たのではないかと
45 名前:デフォルトの名無しさん (ワッチョイ bb7b-XpjH) mailto:sage [2017/01/11(水) 21:00:46.12 ID:7JGhXUMg0.net] 具体的な例はないけど、作成したスレッドはRW、それ以外はROなんてのもありうるわけで 「スレッドに紐付付いてるのは共有するな」は受け入れ難い と考えると、これをstatic変数の初期化に使うのは要注意と言う指摘は一理はあるかと
46 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/12(木) 15:07:52.74 ID:8CizHZGj0.net] >>38 ひんとstd::mutexのコンストラクタはconstexpr修飾されてる
47 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/12(木) 15:28:40.45 ID:sAPGeyQI0.net] >>45 std::mutexってランタイムライブラリじゃ無いだろ
48 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/13(金) 00:15:44.24 ID:nVxQCvXm0.net] >>46 ちょっと何言ってるのかわからないから誰か解説者よろ
49 名前:デフォルトの名無しさん (ワッチョイ 1f36-cG99) mailto:sage [2017/01/13(金) 10:28:33.20 ID:VKtyxMUH0.net] >>47 なんだ、そこからかよ static変数の初期化の話題だってわかってる?
50 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/13(金) 10:37:18.84 ID:7CvKX7vR0.net] ぜんぜん話が見えてこない
51 名前:デフォルトの名無しさん (ドコグロ MM0a-Hii4) mailto:sage [2017/01/13(金) 12:28:56.30 ID:LkImdLNRM.net] >>48 関数内のstatic変数だろ。
52 名前:デフォルトの名無しさん (ワンミングク MMe2-dqLr) [2017/01/13(金) 12:56:57.82 ID:kKg87s4oM.net] >>48 それとランタイムライブラリが何って?
53 名前:デフォルトの名無しさん (ワッチョイ 3217-q48i) mailto:sage [2017/01/13(金) 13:13:35.85 ID:y8BGYaW90.net] ランタイムライブラリじゃない = ヘッダーファイルのみでOk という意味に、私は解釈したんだがほかの人は道南?
54 名前:デフォルトの名無しさん (ワンミングク MMe2-dqLr) [2017/01/13(金) 13:16:53.58 ID:kKg87s4oM.net] >>52 それが>>45 へのレスとしてつながる?
55 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/13(金) 17:12:37.37 ID:76Aeg2JY0.net] ランタイムライブラリが通じなかった? llvmで言うところのcompiler-rtだよ
56 名前:デフォルトの名無しさん (ワンミングク MMe2-dqLr) [2017/01/13(金) 18:02:07.52 ID:kKg87s4oM.net] >>54 それが?
57 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/13(金) 18:31:46.73 ID:76Aeg2JY0.net] >>55 これで何がわからない?
58 名前:デフォルトの名無しさん (ワンミングク MMe2-dqLr) [2017/01/13(金) 18:45:44.38 ID:kKg87s4oM.net] >>56 >>53
59 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/13(金) 18:49:34.49 ID:76Aeg2JY0.net] >>57 llvmで言うところのcompiler-rtって理解してる?
60 名前:デフォルトの名無しさん (ワンミングク MMe2-dqLr) [2017/01/13(金) 18:55:22.83 ID:kKg87s4oM.net] >>58 うん。 それとstd::mutexのコンストラクタがconstexprだということの関連性がわからん
61 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/13(金) 19:03:56.40 ID:76Aeg2JY0.net] >>59 じゃ、static変数の初期化の排他制御にstd::mutexを使うと言うお笑い提案に付いては?
62 名前:デフォルトの名無しさん (ワンミングク MMe2-dqLr) [2017/01/13(金) 19:08:40.80 ID:kKg87s4oM.net] >>60 規格上は別に問題ないんじゃない?
63 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/13(金) 19:14:15.66 ID:LnYnqLIL0.net] >>60 =28 ストローマンまだ粘着してたのか
64 名前:デフォルトの名無しさん (オッペケ Sr37-U8Ig) mailto:sage [2017/01/13(金) 19:24:27.07 ID:weu0eN0Dr.net] >>60 まだやってんのかよ バカに構うと時間を損するだけだぞ
65 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/13(金) 19:57:05.24 ID:76Aeg2JY0.net] >>61 constexprを理解してないのか もう一回規格読んでから出直しなよ 重要なところは3.6.2だぞ >>62 理解できないからって、おかしな捏造してごまかすのはやめたまえ
66 名前:デフォルトの名無しさん (ワントンキン MMe2-dqLr) [2017/01/13(金) 20:13:13.38 ID:8qb1acaCM.net] >>64 https://cpprefjp.github.io/reference/mutex/mutex/op_constructor.html
67 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/13(金) 20:15:51.46 ID:76Aeg2JY0.net] >>65 だから、何?
68 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/13(金) 20:19:22.63 ID:76Aeg2JY0.net] >>65 それのどこをどうよ読むと static変数の初期化の排他制御にstd::mutexを使えると言うお笑い提案が出てくるんだ?
69 名前:デフォルトの名無しさん (ワントンキン MMe2-dqLr) [2017/01/13(金) 20:22:34.22 ID:8qb1acaCM.net] >>67 他のスレッドより先に初期化されることが保証されているんだから排他に使えるでしょ。 まさに例で書かれてるんだけどコード読めないの?
70 名前:デフォルトの名無しさん (ワントンキン MMe2-dqLr) [2017/01/13(金) 20:38:51.43 ID:8qb1acaCM.net] ランタイムライブラリがどう関係してくるのか一つも説明ないんだけど、どういう事なの?
71 名前:デフォルトの名無しさん (ワッチョイ 7e13-dHfL) mailto:sage [2017/01/13(金) 20:46:26.83 ID:nYJUER3p0.net] お願いします. C::a, C::b を protected のままにしたいのですが,どうしても public を要求されます. なぜなのでしょうか ideone.com/x3ymxM
72 名前:デフォルトの名無しさん (ワッチョイ 7e6c-6SG4) mailto:sage [2017/01/13(金) 20:51:50.76 ID:daPh3nWD0.net] >>70 なんか色々言いたくなるけど とりあえずmyabsがfriendじゃないから要求されてるんじゃ?
73 名前:デフォルトの名無しさん (ワッチョイ 7e6c-6SG4) mailto:sage [2017/01/13(金) 20:53:38.14 ID:daPh3nWD0.net] >>70 ってエラーにそう書いてあるやん
74 名前:デフォルトの名無しさん (ワッチョイ 7e13-dHfL) mailto:sage [2017/01/13(金) 21:06:18.40 ID:nYJUER3p0.net] すみません.ありがとうございます. ideone.com/BhdBHO 他になにかいろいろまずいところがあるんですね. お手を煩わすようで恐縮ですがコメントいただけないでしょうか. よろしくお願いいたします.
75 名前:デフォルトの名無しさん (ワッチョイ 326c-6SG4) mailto:sage [2017/01/13(金) 21:12:36.47 ID:eTv8M5MG0.net] >>73 明らかにfriend不要になったでしょ 比較クラスが比較対象を継承してるのも意味不明 意味わからずコード書いてる感じがするから勉強し直したほうが良い気がする
76 名前:デフォルトの名無しさん (ワッチョイ c621-q48i) [2017/01/13(金) 21:30:49.97 ID:AzvsCcDE0.net] すごいコードだ
77 名前:デフォルトの名無しさん (ワッチョイ 7e13-dHfL) mailto:sage [2017/01/13(金) 22:09:13.50 ID:nYJUER3p0.net] >>74 ありがとうございます. 確かに例示としては ideone.com/Hi50Xi で十分でした. しかし次の場合はどうでしょうか? 不適当とは思いながら CCompare を C の継承としましたが,それでも protected がききません. ideone.com/XJbnUo echo.2ch.net/test/read.cgi/tech/1480579110/96 を書いている際にぶつかった問題です. よろしくお願いいたします.
78 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/13(金) 22:20:31.99 ID:76Aeg2JY0.net] ああ、わかって来たぞ void func() { static std::mutex mtx; // ←これ ... } このmtxの初期化を排他制御するために、非ローカルなstd::mutex生成して使うと言うお笑い提案か 目の付けどころが鴻海過ぎる
79 名前:デフォルトの名無しさん (ワントンキン MMe2-dqLr) [2017/01/13(金) 22:34:28.85 ID:8qb1acaCM.net] >>77 何言ってるのかわかんねえわ。
80 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/13(金) 22:51:30.29 ID:76Aeg2JY0.net] >>78 自分で言い出したんだろ >>65
81 名前:デフォルトの名無しさん (ワッチョイ f330-emOI) mailto:sage [2017/01/13(金) 22:59:08.33 ID:ByW8JYfQ0.net] >>76 CCompareがアクセスできるのは自身のメンバとしてのa,bだから 概念的にいうならCCompareが持っているのはCから継承した自身のメンバ CCompare::a,CCompare::bへのアクセス権であって C::a,C::bへの直接のアクセス権を持っているわけではないから
82 名前:デフォルトの名無しさん (ワントンキン MMe2-dqLr) [2017/01/13(金) 23:18:01.19 ID:8qb1acaCM.net] >>79 関数ローカルのstaticなstd::mutexをなぜmutexで保護しようとしたのかサッパリとわかんねえって言ってんの。 ランタイムライブラリとstd::mutexのデフォルトコンストラクタがconstexprである関係性の説明一つもないし相手しても出てこないって解ったから相手するのやめるよ。 最初から最後まで何が言いたいのか一ミリもわかんなかったわ。
83 名前:デフォルトの名無しさん (ワッチョイ 7e13-dHfL) mailto:sage [2017/01/13(金) 23:21:37.61 ID:nYJUER3p0.net] >>80 map や priority_queue にあたえる比較関数オブジェクト(CCompare) の中に, 別のクラス(例では C) の private/protected をアクセスすることはできないのでしょうか なんとかならないでしょうか
84 名前:デフォルトの名無しさん (ワッチョイ f330-emOI) mailto:sage [2017/01/13(金) 23:59:19.90 ID:ByW8JYfQ0.net] >>82 一般的には真っ当やり方ではどうにもならない >>76 のケースならCとCCompareのunionを使って真っ当にどうにかなるのかもしれない
85 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/14(土) 00:05:54.36 ID:8QfSwFFH0.net] >>81 関数ローカルなstatic変数の初期化は排他制御しなけりゃならない これはOKかな? その排他制御にstd::mutexを使えというお笑い提案が>>45
86 名前:デフォルトの名無しさん (スプッッ Sdf2-gTkB) mailto:sage [2017/01/14(土) 00:37:53.00 ID:rG4STkB+d.net] >>84 ランタイムライブラリじゃなければならない理由を説明するつもりならコード書いて例示すればいいんじゃないの? 断片的なコメント書くよりわかりやすいと思うぞ
87 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/14(土) 00:42:02.10 ID:Q3G32+hm0.net] >>85 関数ローカルのstatic変数の初期化を排他しなきゃいけないなんて言ってるバカを相手にしちゃいけないよ
88 名前:デフォルトの名無しさん (ワッチョイ b633-zxSj) [2017/01/14(土) 00:47:15.28 ID:/xjCjFtE0.net] >>82 #define private public #define protected public 異論反論は勿論認める。
89 名前:デフォルトの名無しさん (ワッチョイ b633-zxSj) [2017/01/14(土) 00:51:08.04 ID:/xjCjFtE0.net] あ、コード見てなかった。 ネタにもなって無かったわ…ごめん。
90 名前:デフォルトの名無しさん (ワッチョイ 3290-V/2k) mailto:sage [2017/01/14(土) 01:17:03.19 ID:RBO90iTA0.net] 質問ですが、mapやunordered_mapの[]演算子が非constしか用意されていないのは 何か理由があるんですか?
91 名前:デフォルトの名無しさん (ワッチョイ f330-emOI) mailto:sage [2017/01/14(土) 01:39:44.07 ID:mg/r9n9z0.net] >>89 指定したキーに対応する要素が存在しないときは新たに要素を作成するから
92 名前:デフォルトの名無しさん (ワッチョイ b633-zxSj) [2017/01/14(土) 01:40:54.24 ID:/xjCjFtE0.net] >>89 そのキーが存在しなくても、自動的に追加する仕様だから、const にはできない。
93 名前:デフォルトの名無しさん (ワッチョイ 4f04-lw3D) [2017/01/14(土) 02:18:12.38 ID:kOBEZk8k0.net] static変数の話の戻るんですけど、非ローカルstatic変数は生成/開放順序が不定 だから、使うな(googleスタイルガイド)やstaticローカルの参照にしろ(effective c++) は言っているわけですけが、非ローカルstatic constexpr変数なら問題ないですよね?
94 名前:デフォルトの名無しさん (ワッチョイ 3290-V/2k) mailto:sage [2017/01/14(土) 02:22:43.34 ID:RBO90iTA0.net] ありがとうです 仕様がそうなっているからですか わざわざatが用意されているのもそれが理由なんですね
95 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/14(土) 02:59:59.47 ID:Q3G32+hm0.net] >>92 変数にconstexpr付けたらコンパイル時定数になるから実行時の初期化とは無縁
96 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/14(土) 08:04:44.63 ID:8QfSwFFH0.net] >>94 あーあ、はいはい 3.7 The zero-initialization (8.5) of all block-scope variables with static storage duration (3.7.1) or thread storage duration (3.7.2) is performed before any other initialization takes place. Constant initialization (3.6.2) of a block-scope entity with static storage duration, if applicable, is performed before its block is first entered.
97 名前:デフォルトの名無しさん (ワッチョイ 328e-U8Ig) mailto:sage [2017/01/14(土) 08:14:50.33 ID:4HVF8lbq0.net] 話の前提(規格と実装)がずれてるような気がしなくもない
98 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/14(土) 08:16:06.74 ID:BjO/qPFR0.net] >>91 正確にはconstにできないのではなく、 constにするのは良心が咎める、だろ データの実体はthisに指されていないわけで
99 名前:デフォルトの名無しさん (ワッチョイ f642-SV1A) mailto:sage [2017/01/14(土) 11:01:30.33 ID:f29MAUgw0.net] >>76 protectedなんて使うな、あんなもんpublicと一緒だ いくつかそれっぽいの書いてみたから好きなの使え ideone.com/GkUTFI ideone.com/IvYKWe ideone.com/ZrgkZM
100 名前:デフォルトの名無しさん (ワンミングク MMe2-SV1A) mailto:sage [2017/01/14(土) 13:46:51.12 ID:TZ84v9ShM.net] 心が洗われるようなコード
101 名前:デフォルトの名無しさん (ワッチョイ b2ac-vSov) mailto:sage [2017/01/14(土) 15:44:02.75 ID:SDa1ObQ20.net] struct A { int value; }; auto p1 = new A; auto p2 = new A(); cout << p1->value << endl; // <- 不定 cout << p2->value << endl; // <- ゼロ この挙動の違いは規格のどの部分で定義されてるんじゃろ?
102 名前:デフォルトの名無しさん (ワッチョイ d3c9-U8Ig) mailto:sage [2017/01/14(土) 15:59:48.64 ID:kCGGguyq0.net] 規格を読まずに言うと8.5p11
103 名前:デフォルトの名無しさん (ワッチョイ d3c9-U8Ig) mailto:sage [2017/01/14(土) 16:00:41.57 ID:kCGGguyq0.net] 嘘を言った 8.5までわかっていて、規格を見たら段落11だった
104 名前:デフォルトの名無しさん (ワッチョイ 7e13-dHfL) mailto:sage [2017/01/14(土) 17:01:56.80 ID:pjYHXW8Q0.net] >>98 ありがとうございます.C++11以降の新鮮な書き方ですね 個人的には3番目のラムダ式のものが分かりやすくていいと思いました using 文を名前スペース以外に使う方法って,なんていうのですか?詳しく調べたいと思います.
105 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 12:13:55.44 ID:OwCHVx6x0.net] >>92 がバカに騙されてないか少しだけ心配
106 名前:デフォルトの名無しさん (オイコラミネオ MMce-mZvv) [2017/01/15(日) 12:52:42.89 ID:oZyLvSNYM.net] >>104 何も考えんとアホみたいにstatic使ってるやつよりマシやろ
107 名前:デフォルトの名無しさん (ワッチョイ d3c9-U8Ig) mailto:sage [2017/01/15(日) 13:12:23.80 ID:n2HQszSv0.net] マシかどうかではなく問題の有無で語るべきではないか
108 名前:デフォルトの名無しさん (オイコラミネオ MMce-mZvv) mailto:sage [2017/01/15(日) 13:19:44.69 ID:oZyLvSNYM.net] >>94 みたいな回答がついてそれに >>95 とツッコまれるくらいの問題はあるやろ
109 名前:デフォルトの名無しさん (ブーイモ MM8b-STcG) mailto:sage [2017/01/15(日) 13:41:07.01 ID:gYQA4gmtM.net] 「コンパイル時に定数として評価される」ことと「コンパイル時に解決される」ことを混同している人は結構いると思う。
110 名前:デフォルトの名無しさん (ワンミングク MMe2-SV1A) mailto:sage [2017/01/15(日) 13:50:38.16 ID:dIwTpKXnM.net] >>108 どうちがうの?
111 名前:デフォルトの名無しさん (アウアウカー Sa5f-YGRn) mailto:sage [2017/01/15(日) 14:48:53.66 ID:Vh4eztBka.net] ⊂
112 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/15(日) 16:26:13.53 ID:6tnmROhD0.net] >>95 それ C++14 の 6.7p4 ね。で、 3.6.2 p2 にこんな規定もある。 > Together, zero-initialization and constant initialization are called > static initialization; all other initialization is dynamic initialization. > Static initialization shall be performed before any dynamic initialization > takes place. だから>94の言う「実行時の初期化とは無縁」というのは間違ってないと思う。 あと、ここらへんの文面が C++14 の後に変わってて、>95の引用した文面は消えてる。 wg21.cmeerw.net/cwg/issue2026
113 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 20:39:17.85 ID:T6BZe6fz0.net] >>111 3.6.2のタイトルを1000回音読してから出直してくれたまえ
114 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/15(日) 20:51:15.65 ID:6tnmROhD0.net] >>112 3.6.2 Static initialization [basic.start.static] で、これ読んだら話がどう変わると思ってるの?
115 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 21:57:06.54 ID:T6BZe6fz0.net] >>113 なるほど、名前も変えるの見落としてた なんか支離滅裂な提案してるなと、読み込みを本能的に拒絶してた >>94 が正しくなるということだね >>86 みたいな電波とばしてるからマグレ当たりだろうけど
116 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/15(日) 22:22:21.32 ID:6tnmROhD0.net] >>114 名前?提案?いったい何の話? >46 からずっと、ほとんど何言ってるのかわかんなくてこわい。 もうちょっと伝わる文面にしてもらえないものか。 あと、「>>94 が正しくなる」じゃなくて現行の C++14 でも正しいよ。
117 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/15(日) 22:24:11.33 ID:RPIsJnBb0.net] >>108 今現在の流れにどんな関係があるんだ? constexprの効力は最適化と関係ないぞ
118 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 22:39:13.98 ID:OwCHVx6x0.net] >>115 少しでも解るなら凄いよ… 俺全く理解出来ないからスルーすると決めたもの。
119 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 22:49:15.83 ID:OwCHVx6x0.net] デタラメばかり言ってるから流石にもう騙される人は居ないと思うけど、一応関数ローカルなstatic変数の初期化タイミングに排他必要ないという記事張っとくよ ググって日本語で一番上にでた記事だよ d.hatena.ne.jp/yohhoy/touch/20120309/p1
120 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/15(日) 22:54:49.73 ID:RPIsJnBb0.net] ggrを最高神とあがめる信者か 採用1年目からアレをやらされるとそうなるかねえ
121 名前:デフォルトの名無しさん (ワッチョイ 0fc9-U8Ig) mailto:sage [2017/01/15(日) 23:01:04.84 ID:Ah8VE8+/0.net] 読点の前に書かれているように 読点の後を鵜呑みにするか試しているのではないか
122 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 23:02:17.22 ID:OwCHVx6x0.net] >>119 検索したらすぐ解ることを読めもしない規格だけ読んで間違って解釈するやつの前でそんな事言えんの? 残酷な奴だな
123 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 23:02:52.43 ID:T6BZe6fz0.net] >>118 そこにも日本語で解説してあるだろ > gcc 4.0.0から既定動作でスレッドセーフなコードが出力される。(自動的に排他制御コードが埋め込まれる。) これは最初から言っている(>>24 )
124 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 23:08:33.39 ID:OwCHVx6x0.net] >>122 いや、そんな事十分に理解しておりますよ。 自分で排他制御を書く必要ないって書くべきだったか? どこぞのレスで > >>86 みたいな電波とばしてるからマグレ当たりだろうけど って書いてるからそれに騙されてる人が居ないか心配で書いただけだよ
125 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 23:14:37.92 ID:T6BZe6fz0.net] >>123 はあ? 自分で排他制御なんてどうやって書くんだよ バカも休み休み言え
126 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 23:20:48.48 ID:OwCHVx6x0.net] それは >>84 に言えよ ってやべー間違ったわアンカー付けたの触ったらダメな奴だった
127 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 23:25:26.18 ID:T6BZe6fz0.net] >>115 >あと、「>>94 が正しくなる」じゃなくて現行の C++14 でも正しいよ。 現行はこれだろ > Constant initialization (3.6.2) of a block-scope entity with static storage duration, if applicable, is performed before its block is first entered. つまりブロックスコープのstatic storage durationな変数はそのブロックに最初に入る時に初期化、すなわち実行時
128 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 23:30:17.30 ID:T6BZe6fz0.net] >>125 >>45 が > gcc 4.0.0から既定動作でスレッドセーフなコードが出力される。(自動的に排他制御コードが埋め込まれる。) こう言う自動的に埋め込まれる排他制御にstd::mutex使えなんて愉快な提案してしたんだろ > ひんとstd::mutexのコンストラクタはconstexpr修飾されてる
129 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/15(日) 23:35:49.06 ID:6tnmROhD0.net] >>126 before は「前」って意味ね。ブロックに入る「時」とまでは限定されてない。 同時に、定数初期化(を含む静的初期化)はあらゆる動的初期化より前に行われる とする規定があるのは>>111 で挙げたとおり。 これにより、動的初期化(実行時の初期化)との間で順序が問題になることはない。
130 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 23:42:21.31 ID:OwCHVx6x0.net] >>92 の質問が >非ローカルstatic constexpr変数なら問題ないですよね? だからブロックスコープの話ですら無いんだけどね。
131 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 00:16:22.26 ID:4D4bT+Tb0.net] >>128 ブロックに入る前なので、「実行時の初期化とは無縁」じゃ無いだろ あと、>>111 に書かれてるのは現行は 3.6.2 initialization of non-local variables の規定だね
132 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/16(月) 00:21:18.11 ID:UB1GTfE40.net] >>121 すぐ解ることって自分で言いながら読めもしないって 言ってる意味わかんねえぜ 検索と規格のどっちが難しいかも逆に認識してるみたいだし まあ1年目に魔改造されたアタマっちゃそれらしいが
133 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/16(月) 00:39:27
] [ここ壊れてます]
134 名前:.16 ID:5OapSwc60.net mailto: >>130 ブロックに入る前、且つ、すべての動的初期化より前、だから「無縁」でもいいんじゃないの? ローカル static constexpr 変数について初期化順の問題が起こり得るというなら、コード例 出してみてよ。 >>114 の「名前」は 3.6.2 のタイトルのこと言ってたのか。ようやくわかった。 でも 3.6.2 のタイトルがどうあれ、>>126 で引用した箇所にある "Constant initialization" の 定義は 3.6.2 によるんだから、話は変わらないよ。 誤解を招くタイトル含め文面がマズいのは認めるけど、だからこそ本来の意図に沿うように修正 されたんだろうし。 [] [ここ壊れてます]
135 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 00:44:11.56 ID:4D4bT+Tb0.net] >>129 実行時の初期化とは無縁の理由として > 変数にconstexpr付けたらコンパイル時定数になる をあげている(ローカルでもコンパイル時定数になる) ところが、コンパイル時定数であってもブロックスコープのConstant initilizationは実行時初期化(ブロックに入る前)なので間違い
136 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 01:02:26.19 ID:4D4bT+Tb0.net] >>132 6.3.2を参照してるのはConstant initializerの定義だけ、 その初期化が行われるタイミングは6.7に書かれている通りブロックに入る前 ロード後、プログラムに制御が移る前かもしれないし、mainが呼び出された後かもしれない
137 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/16(月) 01:17:19.08 ID:5OapSwc60.net] >>134 Constant initializer じゃなくて
138 名前: Constant initialization の定義ね。 その Constant initialization に対する規定がローカル static の場合だけ 無視できるとする根拠が何かあるの? [] [ここ壊れてます]
139 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 02:10:36.59 ID:4D4bT+Tb0.net] > その Constant initialization に対する規定がローカル static の場合だけ > 無視できるとする根拠が何かあるの? 6.7で参照してるConstant initializationは 3.6.2のConstant initialization is performed:の下で3つ列挙されてる部分 定義であって、初期化のタイミングは参照していない それぞれに別の記述がある タイミングは何度も引用してるけど6.7は > Constant initialization (3.6.2) of a block-scope entity with static storage duration, if applicable, is performed before its block is first entered. 3.6.2は > Together, zero-initialization and constant initialization are called static initialization; all other initialization is dynamic initialization. Static initialization shall be performed before any dynamic initialization takes place.
140 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/16(月) 02:53:47.44 ID:5OapSwc60.net] >>136 別の記述があることが根拠? それら2つの規定の両方が適用され得るだろうと言ってるんだけど、 なんでどっちか片方しか適用されないと思ってるの? A ⊃ B の場合に A に対する規定が B にも及ぶってことを認めないの? (この場合は A = "Constant initialization", B = "Constant initialization of a block-scope entity")
141 名前:デフォルトの名無しさん (オッペケ Sr37-U8Ig) mailto:sage [2017/01/16(月) 07:40:40.27 ID:a6XjHitHr.net] >>137 >>134 の主張は3.6.2, 6.7のどちらとも矛盾しないように見えるのだが
142 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 08:43:01.09 ID:4D4bT+Tb0.net] むしろ 3.6.2 initialization of non-local variables と、明確に分けられてる項の規定が全部適用されると言ってるのが不思議過ぎる wg21.cmeerw.net/cwg/issue2026 もバグ指摘されてるし、前途多難だ
143 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/16(月) 09:38:47.49 ID:5OapSwc60.net] >>138 タイミングについての言及だけ読めばそうだけど、彼は 3.6.2 にある静的初期化一般に対する規定が ローカル static の場合に限っては及ばない、とする主張をしている。 新しい理由付けも出なくなって平行線みたいだし、次期規格ではざっくり改定される文面の話だし、 もういいかな。
144 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 10:48:30.43 ID:4D4bT+Tb0.net] 3.6.2のnon-localに関する規定は6.7で「そのブロックに入る前」と上書きされてるだろ 3.6.2がlocal, non-local問わずに有効なら「そのブロックに入る前」と言う規定は矛盾する
145 名前:デフォルトの名無しさん (スプッッ Sdf2-9KqD) [2017/01/16(月) 11:01:51.83 ID:ULOq3Vpcd.net] https://cpprefjp.github.io/reference/atomic/atomic.html atomicを使ったspinlockなるmutexの例があるのですが これを再帰ロック可能なrecursive_spinlockにするには どのように実装すればいいですか。
146 名前:デフォルトの名無しさん (オッペケ Sr37-U8Ig) mailto:sage [2017/01/16(月) 19:11:32.79 ID:a6XjHitHr.net] >>141 「ブロックに入る前、且つ、すべての動的初期化より前」 規格がUNKOなのはさておき、論理的にどこも矛盾していないのでは?
147 名前:デフォルトの名無しさん (ワントンキン MMe2-dqLr) [2017/01/16(月) 19:40:06.27 ID:LWQyQSVNM.net] 仮にブロックスコープのconstexpr変数が実行時に初期化されたとして、どんな問題が発生するという主張なん?
148 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/16(月) 22:29:50.06 ID:UB1GTfE40.net] 翻訳時に評価せよと指定したものが 実行時に評価されるようなら コンパイラを窓から投げ捨てて アセンブラか機械語を使うしかない int main() { return 1; }で0を返されるのと同じで もはや何を言っても無駄、根本的に話にならないということ
149 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 23:04:39.73 ID:4D4bT+Tb0.net] >>145 初期化の意味がわからない子は参戦しないように
150 名前:デフォルトの名無しさん (オッペケ Sr37-U8Ig) mailto:sage [2017/01/16(月) 23:23:13.66 ID:+uglxnZcr.net] >>144 特に実害はなくても>>94 の『実行時の初期化とは無縁』が真実でないことを問題と考える者がいるのだと思っていた
151 名前:デフォルトの名無しさん (ワントンキン MMe2-dqLr) [2017/01/17(火) 03:28:47.43 ID:tvPWGsMMM.net] なんというか糞の役にもたたんな 今現在そんな実装のコンパイラがあるわけでもなし、今から実装するにしてもわざわざ複雑にして実行速度落とすような実装にするとも思えないし
152 名前:デフォルトの名無しさん (ワッチョイ a258-rG+u) mailto:sage [2017/01/17(火) 04:25:31.38 ID:ngprCvv90.net] 最近猫でもわかるって奴読んで独学でちょくちょく勉強してんだけど、こんまま独学でプログラミング学んでったらオセロくらいなら作れるようになる?どんくらいかかるかな
153 名前:デフォルトの名無しさん (ドコグロ MM0a-8ZdN) mailto:sage [2017/01/17(火) 07:56:18.72 ID:ueZ17iDzM.net] >>144 組み込みじゃ、ROMになるかRAMになるか大きな違いが出るな
154 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/17(火) 13:27:45.10 ID:mkv39b380.net] >>150 constすら付けなくても初期値が決まっていて変更する可能性のあるコードが無ければ最適化で定数に置き換えられる時代にそんな事気にするんだ?
155 名前:デフォルトの名無しさん (ワッチョイ b624-los8) [2017/01/17(火) 13:30:54.01 ID:Pbl2vPGV0.net] >>146 おい間抜け どこかに初期化って書いてあったか? 人を小馬鹿にしたつもりだろうがブーメラン刺さってるぞw
156 名前:デフォルトの名無しさん (ワッチョイ 3e5b-vSov) mailto:sage [2017/01/17(火) 22:57:29.19 ID:FvzokP9y0.net] >>149 オセロくらいなら excel と vba で一週間くらい集中すればできんじゃないかね。
157 名前:デフォルトの名無しさん (ワッチョイ 4f17-0Plu) mailto:sage [2017/01/18(水) 01:28:58.03 ID:9W34sy+b0.net] >>153 アスペ
158 名前:デフォルトの名無しさん (ワッチョイ 6296-8ZdN) mailto:sage [2017/01/18(水) 01:54:34.51 ID:an9uI7uk0.net] >>151 定数が実行時に初期化されれば、それはROMじゃなくてRAMに配置されてるってことだろ?そりゃ組み込みなら気にならないほうがおかしい
159 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/18(水) 02:36:42.52 ID:n1DpjkbT0.net] >>155 int f(){static int v=5;return v;} と int f(){return 5;} が最適化後は一緒になるって言ってんの。 そして static constexpr int v=...; にしたらそのvの初期化値はコンパイル時に求まるし変更出来ない。ここまで言えば最適化後にどうなるか解るよね? まぁ、constexprの場合は最適化しなくてもなんだけどさ
160 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/18(水) 03:40:09.16 ID:2vnfhfI50.net] >>156 >>150 は>>144 の言った「仮に・・・」へのレスなんだから現実のコンパイラがどうなってるかは関係ないと思われ
161 名前:デフォルトの名無しさん (ドコグロ MM9f-lGK7) mailto:sage [2017/01/18(水) 07:14:44.33 ID:KfZHaLf7M.net] 定数であることと ROM に置くかどうかは別の話だし
162 名前:デフォルトの名無しさん (ワッチョイ 573c-U8Ig) mailto:sage [2017/01/18(水) 08:00:45.61 ID:+X3tak3t0.net] >>156 >最適化後は一緒になるって言ってんの デバッグ中の挙動を無視されると困ります
163 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/18(水) 08:42:08.41 ID:n1DpjkbT0.net] >>157 ごもっとも。規格がどうかも関係なかったね。 >>159 なんで?
164 名前:デフォルトの名無しさん (ブーイモ MMd2-a69X) mailto:sage [2017/01/18(水) 08:52:41.79 ID:ZS0nd/enM.net] >>158 定数であるからromにも置けるって話なんで関係ない訳がない。
165 名前:デフォルトの名無しさん (ドコグロ MM4e-lGK7) mailto:sage [2017/01/18(水) 18:41:42.82 ID:Abs9KEqJM.net] >>161 > 定数であるからromにも置ける だからと言ってROMに置くとは限らない って話なんだがお前には難しすぎたか?
166 名前:デフォルトの名無しさん (アウアウカー Sa5f-YGRn) mailto:sage [2017/01/18(水) 21:27:37.78 ID:4GI0Tt+ca.net] このスレを見て、C++って永遠に喧嘩できて寂しくない言語だと判った
167 名前:デフォルトの名無しさん (ワッチョイ 3e5b-vSov) mailto:sage [2017/01/18(水) 21:56:10.60 ID:qB5vepR/0.net] こういうやりとり見てるとやっぱリーナスの c++観は正しいなと思う。
168 名前:デフォルトの名無しさん (ブーイモ MM8b-a69X) mailto:sage [2017/01/18(水) 23:18:53.09 ID:0GLHJE+5M.net] >>162 置けるってのは置くこともできるって意味だが、随分日本語不自由なやつだな
169 名前:デフォルトの名無しさん (ドコグロ MM7f-j6UX) mailto:sage [2017/01/19(木) 06:46:32.74 ID:JadLiFtgM.net] >>165 > 随分日本語不自由なやつだな 「置ける」と言う可能性の話と「置く」と言う実際の動作の区別がつかない奴に言われても... でっかいブーメラン乙としか言いようがないわな w
170 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/19(木) 06:57:37.47 ID:bO+XZlhy0.net] 何を言い争ってんのか解らん 直値でもROMに置けると言えるだけでなんの違いも無いんだが。
171 名前:デフォルトの名無しさん (ワッチョイ 637b-voKO) mailto:sage [2017/01/19(木) 08:39:21
] [ここ壊れてます]
172 名前:.82 ID:4Gh/dudO0.net mailto: >>152 初期化==評価と考えてなけりゃ >>145 は出てこねーんだよ バーカ [] [ここ壊れてます]
173 名前:デフォルトの名無しさん (スプッッ Sd1f-xrkK) [2017/01/19(木) 10:16:43.40 ID:CldDY8MLd.net] int a=100; int&& b=std::move(static_cast<int>(a)); b=200; aは100、bは200になるのですが キャストすると必ず一時オブジェクトが生成されるのでしょうか 環境によってaもbも200になったりしますか。
174 名前:デフォルトの名無しさん (ワッチョイ ffcf-JQ1R) mailto:sage [2017/01/19(木) 10:39:40.20 ID:gPdsJo1i0.net] >>169 必ず生成される。 https://timsong-cpp.github.io/cppwp/n4140/expr.static.cast#4
175 名前:デフォルトの名無しさん (スプッッ Sd1f-xrkK) [2017/01/19(木) 10:50:03.86 ID:CldDY8MLd.net] わかりました
176 名前:デフォルトの名無しさん (ワッチョイ 23c9-mcUU) mailto:sage [2017/01/19(木) 11:10:02.61 ID:ipEwSksA0.net] 次に、「ボクのパソコンではaが200になるんてすけど」というレスが来るに違いない
177 名前:デフォルトの名無しさん (ドコグロ MMff-j6UX) mailto:sage [2017/01/19(木) 12:54:31.63 ID:Ccs4bPhGM.net] >>167 わからないなら絡んでくるなよ w
178 名前:デフォルトの名無しさん (オッペケ Sr87-mcUU) mailto:sage [2017/01/19(木) 14:28:16.75 ID:oLhGNghYr.net] >>169 >環境によってaもbも200になったりしますか Yes
179 名前:デフォルトの名無しさん (ワッチョイ bfcb-SmTw) [2017/01/19(木) 20:26:21.94 ID:+cE5RWPo0.net] どっちですか
180 名前:デフォルトの名無しさん (ワッチョイ cf24-RK9q) [2017/01/19(木) 21:29:45.00 ID:x+icVyy10.net] >>173 わからないなら絡まれたフリをするなよw おまえに教えを請うようなクズの中のクズはさすがにこのスレにもいないだろうから
181 名前:デフォルトの名無しさん (ドコグロ MMff-j6UX) mailto:sage [2017/01/19(木) 21:35:22.14 ID:ylWIT8ZQM.net] >>176 わからんって言ってるのは俺じゃなくて >>167 なんだが... 色々お前には難しすぎたか? w
182 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/19(木) 21:54:21.33 ID:bO+XZlhy0.net] 何を言い争ってんのかわからん。
183 名前:デフォルトの名無しさん (ワッチョイ ff6c-L1Ju) mailto:sage [2017/01/19(木) 21:55:13.80 ID:f8wSWc2J0.net] いいのよ
184 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/19(木) 21:56:39.26 ID:bO+XZlhy0.net] >>179 ありがとう
185 名前:デフォルトの名無しさん (アウアウカー Sac7-WqDQ) mailto:sage [2017/01/20(金) 02:35:51.43 ID:WXRyG1p+a.net] 最近この喧嘩は自演じゃないかと思ってる
186 名前:デフォルトの名無しさん (ワッチョイ f302-JQ1R) mailto:sage [2017/01/20(金) 08:56:02.47 ID:1CC8R4dK0.net] ここで出た話題のTips集を出したら売れるんじゃないかと思えてきたわ
187 名前:デフォルトの名無しさん (スプッッ Sd1f-ddg/) mailto:sage [2017/01/20(金) 18:53:55.75 ID:zIVGmPHgd.net] 32bitのソフトを64bit対応させようかなって考えてるのだけど printf, winapi, _t型変数以外気を付けることある?俺これやってはまったわみたいなのが知りたい
188 名前:デフォルトの名無しさん (ワッチョイ cf24-RK9q) [2017/01/20(金) 23:36:02.52 ID:GZ99lyBK0.net] >>168 いーや、初期値==評価とは考えずに書いた 事実とおまえの考えは完全が食い違っているんだよ せいぜい妄想の世界で自画自賛してろナルシスト
189 名前:デフォルトの名無しさん (ワッチョイ 637b-voKO) mailto:sage [2017/01/21(土) 01:01:56.19 ID:v+i75+9D0.net] >>184 引っかかりやがった 初期化の話題で評価と言い出しのはテメーだ バーカ
190 名前:デフォルトの名無しさん (ワッチョイ cf7b-5ScM) mailto:sage [2017/01/21(土) 01:52:25.87 ID:RmTA4cQd0.net] 江添はなんて言ってる?
191 名前:デフォルトの名無しさん (アウアウカー Sac7-WqDQ) mailto:sage [2017/01/21(土) 11:02:38.55 ID:Bf4L6OzOa.net] それワイのやつや!
192 名前:デフォルトの名無しさん (ワッチョイ cf24-RK9q) [2017/01/22(日) 00:06:25.08 ID:LwmXYJhf0.net] >>185 だから初期化ってどこに書いてあるんだよ 幻視か? だからリスパダールちゃんと飲めとあれほど・・・
193 名前:デフォルトの名無しさん (ワッチョイ cf7b-rTuY) [2017/01/22(日) 00:24:56.56 ID:77/TNfJH0.net] >>182 こんなのどうやってまとめるんだ…
194 名前:デフォルトの名無しさん (ワッチョイ bfcb-xrkK) [2017/01/22(日) 02:31:51.43 ID:hchjfZjx0.net] 江口はなんて?
195 名前:デフォルトの名無しさん (ワッチョイ 6f56-3qL8) mailto:sage [2017/01/22(日) 02:40:24.62 ID:rrJzCAZR0.net] 教えて下さい。 環境は VisualC++2015 x64 です。 与えられた文字列の引数について、1文字が1バイトなのか、2バイトなのかで呼び出す関数を切り分けたいと思い、SFINAE で以下のようなコードを書きました。 しかし、こののコードで「関数A」を呼んで欲しいのに、「関数B」が呼ばれてしまいます。 - なぜ関数Bが呼ばれるのか - 1文字のバイト数で切り替える手段 この2点について、教えて下さい。よろしくお願いします。 extern void* enabler; // 関数A (本当は1文字が1バイトの時用の関数) template <typename STR, std::enable_if_t<sizeof(decltype(std::remove_all_extents<STR>::type()[0])) == 1> *& = enabler> void hoge(const STR&) { } // 関数B (本当は1文字が2バイトの時用の関数) template <typename STR, std::enable_if_t<sizeof(decltype(std::remove_all_extents<STR>::type()[0])) != 1> *& = enabler> void hoge(const STR&) { int tmp; tmp = sizeof(decltype(std::remove_all_extents<STR>::type()[0])); // どういう訳か tmp == 1 となる } void main() { std::string s; hoge(s); // 1バイト版である、関数Aを呼んで欲しい }
196 名前:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-o4cX) mailto:sage [2017/01/22(日) 03:05:41.88 ID:NkQzBql/K.net] >>191 1 charは常に2バイトではない。あなたはマルチバイト文字列の基礎を理解していないようだ。 マルチバイト文字列中の複数のcharが一文字になっているか否かは、 文字列の先頭から1charごとにcharの値の範囲を確認し、lead byteかtrail byteかを判定するしかない。
197 名前:デフォルトの名無しさん (ワッチョイ bfcb-SmTw) [2017/01/22(日) 03:12:07.68 ID:hchjfZjx0.net] ビルド通らないからなんでかはわかんない template <typename STR, std::enable_if_t< sizeof( typename STR::value_type ) == 1, std::nullptr_t > SFINAE = nullptr > void hoge(const STR&) { } template <typename STR, std::enable_if_t< sizeof( typename STR::value_type ) != 1, std::nullptr_t > SFINAE = nullptr > void hoge(const STR&) { } これでいけない?
198 名前:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK47-o4cX) mailto:sage [2017/01/22(日) 03:12:21.28 ID:NkQzBql/K.net] 型情報からはマルチバイト文字列のlead/trailに関する情報は得られない。よって、各charの値の範囲を実際に確認しないと、わからない。
199 名前:デフォルトの名無しさん (ワッチョイ 23c9-mcUU) mailto:sage [2017/01/22(日) 07:14:06.66 ID:7mC+0LM10.net] >>192 日本語が理解できないボケ老人は去れ
200 名前:デフォルトの名無しさん (ワッチョイ a37d-wsSS) mailto:sage [2017/01/22(日) 08:04:55.45 ID:5o7PrILb0.net] >>191 例のコンパイラがぶっ壊れてるんだろうね gccは期待通り ideone.com/9pSqel
201 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/22(日) 08:28:45.75 ID:gigvK4EO0.net] オーバーロードでよくね
202 名前:191 (ワッチョイ 6f56-3qL8) mailto:sage [2017/01/22(日) 08:37:36.49 ID:rrJzCAZR0.net] >192-196 ありがとうございます。 >193 確かに期待通りの動作をします。 ただ、この先 MFC の CStringA, CStringW, 生配列などを仮引数として与えたいため、operator[] の戻り値で判定出来ないか考えていました。 >196 なるほど。コンパイラの問題くさいので代替案を考えてみます。 ありがとうございました。
203 名前:191 (ワッチョイ 6f56-3qL8) mailto:sage [2017/01/22(日) 08:50:18.71 ID:rrJzCAZR0.net] >192-197 下の様に、sizeof, decltype を移動させたら、あっさり動きました。失礼しました。 template <typename STR> struct helper { enum { item_size = sizeof(decltype(STR()[0])), }; }; extern void* enabler; // 1バイト版 template <typename STR, typename std::enable_if<helper<STR>::item_size == 1>::type *& = enabler> void hoge(const STR&) { } // 2バイト版 template <typename STR, typename std::enable_if<helper<STR>::item_size == 2>::type *& = enabler> void hoge(const STR&) { } void main() { std::string a; hoge(a); // 1バイト版 std::wstring w; hoge(w); // 2バイト版 }
204 名前:デフォルトの名無しさん (ワッチョイ 237b-rTuY) [2017/01/22(日) 09:58:50.62 ID:iEDujvJA0.net] https://youtu.be/quIHgwuF6r4
205 名前:デフォルトの名無しさん (ワッチョイ f302-JQ1R) mailto:sage [2017/01/22(日) 13:37:19.35 ID:gnARoY8z0.net] CStringとかまだ存在してたのかよ
206 名前:デフォルトの名無しさん (ワンミングク MM9f-aDhR) mailto:sage [2017/01/22(日) 14:40:31.27 ID:hBhrTyQGM.net] https://chrome.google.com/webstore/detail/%E3%81%AF%E3%81%A6%E3%81%AAng/mbgdnfmdelffjdhkdggilmphfdihnmcj?hl=ja
207 名前:デフォルトの名無しさん (ワッチョイ ffcf-JQ1R) mailto:sage [2017/01/22(日) 15:06:13.66 ID:paMlvMvI0.net] >>199 sizeof(decltype(STR()[0])) って sizeof(STR()[0]) と何か違ったっけ?
208 名前:デフォルトの名無しさん (ワッチョイ 23c9-mcUU) mailto:sage [2017/01/22(日) 15:53:04.56 ID:7mC+0LM10.net] mainがvoidなレベルの人にそんな突っ込みをしても…
209 名前:デフォルトの名無しさん (ワッチョイ cf24-RK9q) [2017/01/22(日) 20:43:26.81 ID:LwmXYJhf0.net] 戻らないmainについてもガタガタ言っちゃう人がねえ
210 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/22(日) 22:57:58.70 ID:gigvK4EO0.net] mainのreturnは省略したら0が返ることが保証されている
211 名前:デフォルトの名無しさん (ワッチョイ 23c9-mcUU) mailto:sage [2017/01/22(日) 22:59:58.14 ID:7mC+0LM10.net] >>206 当たり前のことを言い出して、いきなりどうした
212 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/22(日) 23:01:08.57 ID:gigvK4EO0.net] >>207 戻らないmain(?)へ宛
213 名前:デフォルトの名無しさん (ワッチョイ 23c9-mcUU) mailto:sage [2017/01/22(日) 23:14:20.58 ID:7mC+0LM10.net] >>208 なるほど理解した 『戻らないmain』は[[noreturn]]のことだと思ったので理解できずスルーしていた 人に『リスパダールちゃんと飲めとあれほど』と言って自分が飲み忘れたのかと
214 名前:デフォルトの名無しさん (ワッチョイ 23c9-mcUU) mailto:sage [2017/01/22(日) 23:26:22.29 ID:7mC+0LM10.net] >>203 CStringは知らないが、stringは恐らく同じ sizeof(STR()[0]) →sizeof (char &型の左辺値) →sizeof (char)と同じ sizeof(decltype(STR()[0])) →sizeof (decltype(char &型の左辺値)) →sizeof (char &型) →sizeof (char)と同じ
215 名前:191 (アウアウカー Sac7-/Qox) mailto:sage [2017/01/23(月) 09:48:36.48 ID:SwVOU3U8a.net] >203 vc++2015で deltype をぬくと、関数に[] は出来ません、みたいなエラーで通りませんでした。 STR()をコンストラクタではなく、関数と思ってるんだと思います。
216 名前:デフォルトの名無しさん (オッペケ Sr87-mcUU) mailto:sage [2017/01/23(月) 17:40:29.94 ID:oJYEiyR6r.net] 宣言に解釈できるときは宣言として解釈 みたいなルールだっけ
217 名前:デフォルトの名無しさん (ワッチョイ ff9f-tc54) mailto:sage [2017/01/23(月) 18:40:50.71 ID:FReCyx8S0.net] コンストラクタ ⊆ 関数
218 名前:デフォルトの名無しさん (アウアウカー Sac7-WqDQ) mailto:sage [2017/01/23(月) 19:40:02.64 ID:Ij4EmhsFa.net] アンダーバー要らなくね?
219 名前:デフォルトの名無しさん (ワッチョイ ffcc-DOWB) mailto:sage [2017/01/24(火) 03:03:03.61 ID:ch78KtiL0.net] MFCとか何処のバカが設計したんだろうな とっくに絶滅しているもんだとおもっていたぜw
220 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/24(火) 03:50:21.48 ID:nvNd8iP10.net] それより優れたものを設計してから言えよな
221 名前:デフォルトの名無しさん (ワッチョイ f302-JQ1R) mailto:sage [2017/01/24(火) 03:56:08.97 ID:Af36V4kC0.net] >>216 ←今日のバカ
222 名前:デフォルトの名無しさん (ワッチョイ 137b-Eksc) [2017/01/24(火) 11:11:02.03 ID:dVVoZ7Su0.net] MFCが作られた時代を考えられないやつのほうがバカなんだよなあ あれはWin32APIの薄いラッパでしかないから 文句あるなら別のライブラリを使えばいいだけの話、それも出来ないならやっぱりお前が無能でバカ
223 名前:デフォルトの名無しさん (スップ Sd1f-xrkK) [2017/01/24(火) 11:33:11.15 ID:9X3I9Jqtd.net] int (*func)(int) = &hoge; func = nullptr; funcへの代入をできないようにconst付けたいのですが どう書けばいいですか。 usingやtypedefは使わない方法でお願いします。 あとメンバ関数への参照はどう記述すればいいですか int (hage::*func)(int) = &hage::test; の参照版です
224 名前:デフォルトの名無しさん (アウアウカー Sac7-WqDQ) mailto:sage [2017/01/24(火) 11:41:16.20 ID:GCEfrzc1a.net] 益のない煽りはよしなよ(・ิω・ิ)
225 名前:デフォルトの名無しさん (ワッチョイ 7330-J7L1) mailto:sage [2017/01/24(火) 12:11:20.65 ID:ekWjtoGq0.net] >>219 int (* const func)(int) = &hoge; int (piyo::* mf0)(int) = &piyo::test; int (piyo::* & mf1)(int) = mf0; int (piyo::* const & mf2)(int) = &piyo::test;
226 名前:デフォルトの名無しさん (ワッチョイ ffcf-JQ1R) mailto:sage [2017/01/24(火) 12:13:02.49 ID:NfDXKGen0.net] >>211 そっか sizeof だと式と型の曖昧さが問題になるけど decltype なら式しか取らないから曖昧さを消せるのか。
227 名前:デフォルトの名無しさん (ワッチョイ ffcf-JQ1R) mailto:sage [2017/01/24(火) 12:13:28.46 ID:NfDXKGen0.net] >>219 [dcl.mptr]/3 (Note) "There is no "reference-to-member" type in C++."
228 名前:デフォルトの名無しさん (スップ Sd1f-xrkK) [2017/01/24(火) 12:19:40.53 ID:9X3I9Jqtd.net] >>221 それだとメンバ関数のポインタの参照になってませんか int (&func)(int) = hoge; のメンバ関数版はできないでしょうか constの件はうまくいきました
229 名前:デフォルトの名無しさん (ワッチョイ ffd9-iijN) mailto:sage [2017/01/24(火) 13:24:18.69 ID:kmpgWA440.net] >>224 thisが必要になるから無理なんじゃないの それよりクラス内でメンバ関数へのポインタを書くとthisが必要になる
230 名前:デフォルトの名無しさん (ワッチョイ 6f5b-OQjX) mailto:sage [2017/01/24(火) 21:23:55.09 ID:GIi5sfFU0.net] 一生こういう些末なところに引っかかって 中身を書けない人生を送るんだろうな〜
231 名前:デフォルトの名無しさん (ワッチョイ cf42-Wde1) mailto:sage [2017/01/25(水) 00:27:17.93 ID:I9ZrCxSQ0.net] uint8_tとbasic_ifstream組み合わせるといろいろ面倒なんだけど、みなバイナリファイル読み込むときどうしてんの?普通にchar使っ使う?
232 名前:デフォルトの名無しさん (オッペケ Sr87-mcUU) mailto:sage [2017/01/25(水) 00:35:21.87 ID:KGxAJ6V6r.net] バイナリでchar使うのは30年前の老人の発想
233 名前:デフォルトの名無しさん (ササクッテロレ Sp87-Taza) mailto:sage [2017/01/25(水) 00:51:14.53 ID:/+qbj4+Vp.net] fopenでおk
234 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/25(水) 01:30:42.64 ID:5KwEWhG70.net] 他の型をバイト列として解釈するときは(unsigned )charしか許されてないから普通にchar使う
235 名前:デフォルトの名無しさん (ワッチョイ ff17-SmTw) [2017/01/25(水) 02:33:17.29 ID:LUWqNFoa0.net] fgetc() の戻り値を直接 char 変数に代入して EOF(=-1)判定するヘマ。あるある
236 名前:デフォルトの名無しさん (ワンミングク MM9f-cBXx) mailto:sage [2017/01/25(水) 04:12:15.84 ID:nJO+CT7AM.net] ねぇよ
237 名前:デフォルトの名無しさん (アウアウウー Sa67-OTU1) mailto:sage [2017/01/25(水) 15:31:39.49 ID:uJriqNlza.net] fopen、fgets系は使わないな。処理をFILE*依存にしたくない >>230 >>228 が言ってるのはそういう意味のcharじゃないでしょ
238 名前:デフォルトの名無しさん (ワッチョイ cf24-RK9q) [2017/01/25(水) 21:44:43.91 ID:gbQNFS3L0.net] FILE*に依存しないとしてじゃあ何を使うんだ? intにも依存したくないのか?
239 名前:デフォルトの名無しさん (ワンミングク MM9f-cBXx) mailto:sage [2017/01/25(水) 22:01:41.63 ID:nJO+CT7AM.net] fileno して read/writeかな
240 名前:デフォルトの名無しさん (ワッチョイ aacc-X95Y) mailto:sage [2017/01/26(木) 00:52:19.97 ID:GN6UrdAH0.net] おまいら相変わらず抵レベルな話題しているな
241 名前:デフォルトの名無しさん (ワッチョイ 6f02-FuHd) mailto:sage [2017/01/26(木) 02:07:00.45 ID:cRvsGxqc0.net] 高レベルな人が2ch何か見てるわけないからな
242 名前:デフォルトの名無しさん (ワッチョイ 2613-AZYz) mailto:sage [2017/01/26(木) 06:24:12.10 ID:XBNxNxvo0.net] >>237 FILE * を使う人はどうして2chをみないのか?iostream な人はどうなるのか?
243 名前:デフォルトの名無しさん (スップ Sdca-kwgD) [2017/01/26(木) 08:04:45.44 ID:fFyxUIyid.net] プログラミングにはCBDオイルというのが有効だそうです。アイデアが治療に有効するので安倍内閣総理大臣も持病に使っているそうです。 ビル・ゲイツもこれで億万長者になれました
244 名前:デフォルトの名無しさん (JP 0H16-T3y8) mailto:sage [2017/01/26(木) 13:11:34.03 ID:lD0mvySBH.net] 低レイヤーな釣りですね
245 名前:デフォルトの名無しさん (ワッチョイ 3e24-XYXB) [2017/01/26(木) 18:22:33.18 ID:A9/xu7Tb0.net] 物理層?
246 名前:デフォルトの名無しさん (ワッチョイ aacc-X95Y) mailto:sage [2017/01/29(日) 15:48:31.23 ID:Hm/zwJzS0.net] この処理低レベルだねぇと言われてムキーっとなるヤツ→素人童貞 この処理低レベルだねぇと言われて得意げにほくそ笑むヤツ→玄人
247 名前:デフォルトの名無しさん (ワッチョイ af7b-FuHd) mailto:sage [2017/01/29(日) 16:07:03.50 ID:K+/fnyLa0.net] すみません 低レベルな処理がが好きなんで
248 名前:デフォルトの名無しさん (ワッチョイ 1bc9-kHcU) mailto:sage [2017/01/29(日) 16:12:04.90 ID:2ZaFXkbr0.net] 環境・処理系固有の事情やバグに悩まされてばかりで 幸せな顔をして仕事をしている人を見たことがない
249 名前:デフォルトの名無しさん (アウアウカー Sa5b-seiz) mailto:sage [2017/01/29(日) 16:31:19.45 ID:sujTTxNda.net] 低レイヤって言えばいいのよ
250 名前:デフォルトの名無しさん (ワッチョイ 0ac0-H6k8) mailto:sage [2017/01/29(日) 22:01:55.93 ID:F8NpKYaN0.net] コスプレイヤーの仲間かな
251 名前:デフォルトの名無しさん (ワッチョイ 3e24-BAqL) [2017/01/30(月) 21:07:15.53 ID:P5tJpKPw0.net] >>228 std::fstream::readの引数が【なぜ】charなのか 理解できないアフォ?
252 名前:デフォルトの名無しさん (ワッチョイ 6fc9-a+zf) mailto:sage [2017/02/01(水) 22:16:18.72 ID:zf0e/zUB0.net] 30年前の設計だからだ!
253 名前:デフォルトの名無しさん (ワントンキン MM1a-9Rjx) [2017/02/01(水) 22:52:40.44 ID:mWAIN14mM.net] むしろバイナリでchar以外何使うんだ?
254 名前:デフォルトの名無しさん (ワッチョイ 137b-1ST5) mailto:sage [2017/02/02(木) 00:40:35.30 ID:kju30PyH0.net] いやバイナリならどう読もうが書こうがいいと思うが。 てか疑問の意味がわからん。
255 名前:デフォルトの名無しさん (ワッチョイ 7fcf-1ST5) mailto:sage [2017/02/02(木) 01:35:32.10 ID:FXYEZ0RW0.net] >>250 そんなんじゃ type based aliasing rule に殺されるよ
256 名前:デフォルトの名無しさん (ワッチョイ 1302-1ST5) mailto:sage [2017/02/02(木) 01:58:08.09 ID:hMTSyXzS0.net] 何か動作がおかしいときになってから考えれば良いんだよ 標準的な環境では考える必要は無いこと
257 名前:デフォルトの名無しさん (ワッチョイ cf24-1aN8) [2017/02/02(木) 22:10:32.43 ID:1pIxEkoa0.net] 真性アフォが早くも三名か。嘆かわしい。
258 名前:デフォルトの名無しさん (オッペケ Sra7-dUno) mailto:sage [2017/02/03(金) 08:10:44.86 ID:HxuiJzZXr.net] 真性のアフォの内の二人くらいは たいてい片山の自演
259 名前:デフォルトの名無しさん (スップ Sd9f-aC2u) mailto:sage [2017/02/03(金) 13:51:28.33 ID:+x5EsLXNd.net] 新卒一年目で過去のコードをバージョンアップさせる業務についてるんだけど 会社のコードってなんであんなにdefine切ったりtypedefしまくってるんだ? 可読性低くない?始めて作った人には良いだろうけど後のこと考えるとデメリットなんではって思うんだけど...
260 名前:デフォルトの名無しさん (ワッチョイ 6f6c-i1/f) mailto:sage [2017/02/03(金) 13:57:14.34 ID:Fv/X2f+d0.net] 場合によるからなんとも
261 名前:デフォルトの名無しさん (ワッチョイ 7f7b-1ST5) mailto:sage [2017/02/03(金) 15:21:22.58 ID:cyynpkXi0.net] 一年目か凄いね
262 名前:デフォルトの名無しさん (アウアウカー Sae7-mIyn) mailto:sage [2017/02/03(金) 16:26:23.88 ID:oWJS3iiDa.net] スマン、片山って誰ンゴ?
263 名前:デフォルトの名無しさん (スップ Sd9f-aC2u) mailto:sage [2017/02/03(金) 17:44:58.85 ID:+x5EsLXNd.net] >>256 それを言っちゃあおしまいだよ...と言いたいけどまさにそうか windowsapiが絡んでくると本当にわけがわからなくなる MSDNも読みにくいし
264 名前:デフォルトの名無しさん (ブーイモ MMc7-plQq) mailto:sage [2017/02/03(金) 19:35:01.87 ID:8SRwU46KM.net] 参考までに、どんなdefIneやtypedefなん?
265 名前:デフォルトの名無しさん (ワントンキン MM1f-fOGj) mailto:sage [2017/02/03(金) 21:14:55.23 ID:DgoKILm5M.net] >>255 情報が増えるtypedefは正義 たとえば、 typedef std::vector<int> personal_id_array_type; 減るtypedefはゴミ たとえば、 typedef std::vector<int> array_type;
266 名前:デフォルトの名無しさん (ワッチョイ a3a6-0MWP) mailto:sage [2017/02/03(金) 21:24:44.53 ID:2s9sq5BM0.net] >>261 情報の増減がどこにあると?
267 名前:デフォルトの名無しさん (ワッチョイ 937b-aC2u) mailto:sage [2017/02/03(金) 21:43:49.02 ID:flkT/o5k0.net] >>260 >>261 の前者・後者両方ともある あと色々な名前で__stdcallが切られてたりして読むのがきつい
268 名前:デフォルトの名無しさん (ワッチョイ a37b-jpzQ) [2017/02/03(金) 22:05:00.81 ID:ubtIaYbs0.net] ちなみにお前らの思うきれいなソースって具体的にどれよ
269 名前:デフォルトの名無しさん (スッップ Sd9f-oUAv) [2017/02/03(金) 22:11:40.27 ID:7t2mdctmd.net] glm
270 名前:デフォルトの名無しさん (ワッチョイ cf24-1aN8) [2017/02/03(金) 22:55:16.36 ID:aXFSiqlm0.net] 261が言ってるのは システムハンガリアンとアプリケーションハンガリアンてことだ ハンガリー記法に限らず意味づけと言うまでもないことを どう位置づけるべきかってこと
271 名前:デフォルトの名無しさん (ワッチョイ c35b-0MWP) mailto:sage [2017/02/03(金) 23:39:20.39 ID:CYbB7nGp0.net] >>255 変更しやすくする為じゃないの? 一箇所でそれ関連を纏めて変更したいんでしょ。 今は偶々同じ std:vector<int> なだけで。
272 名前:デフォルトの名無しさん (ワッチョイ 1302-1ST5) mailto:sage [2017/02/04(土) 00:17:30.98 ID:DV7gEIN40.net] m_ulDataCntとか全く意味を持たない変数名が多用されてて辛いわ コメントも無い
273 名前:デフォルトの名無しさん (ワッチョイ ffc0-Sup+) mailto:sage [2017/02/04(土) 05:48:10.84 ID:/r5Uxr2+0.net] >>264 ソースは俺
274 名前:デフォルトの名無しさん (ワッチョイ 937b-aC2u) mailto:sage [2017/02/04(土) 06:49:15.89 ID:JWHU8o9P0.net] >>267 なんか小難しい 定義されたものをさらに定義して さらにさらに定義してってのをやってるのも同じなんかな? 見たことない型を追うだけで何ヵ所も追わないといけなくて大変 コメントもないし
275 名前:デフォルトの名無しさん (ワッチョイ d3dc-0e9Z) mailto:sage [2017/02/04(土) 07:32:17.23 ID:uizo/+L30.net] >>268 字面だけで推測するなら m_ulDataCnt は m_ クラスのメンバ変数である ul unsigned long DataCnt データの個数 てな感じに見えるね。 元のソースファイルが一貫した命名規則を使ってれば それがどんな規則であれ、見てるうちに慣れてくると思うよ。
276 名前:デフォルトの名無しさん (ワッチョイ 7fcc-ysPd) mailto:sage [2017/02/04(土) 07:39:17.67 ID:6QMeFViK0.net] クソみてぇな命名規則
277 名前:デフォルトの名無しさん (ワッチョイ c35b-0MWP) mailto:sage [2017/02/04(土) 08:42:25.92 ID:UEIbCXwH0.net] >>270 基本的にはそうでしょ。 ある物をdoubleにするかfloatで済ますかという場合、系統毎にtypedefをしてそれを使うしかない。 クラスの継承も同じだと思うけど。 というか読み方間違ってるだろ。まずは縦に読まずに横に読めよ。 そしてそれ以前に上司に聞けよ。 どのみちソースは出せないのだろうから、ここでいくら
278 名前:聞いてもかなり憶測を含んだ回答しか得られない。 コメントが無いのを問題に思うのなら、コメントを付けるのもお前の仕事だろ。 ただ正直言って、m_ulDateCntは>>271 の言うとおりだろうし、そんなところにコメントがあっても嬉しくない。 多分君とそのソースでコメント作成基準に大幅にずれがある。 それは上司と打ち合わせしないと駄目だ。 最近の傾向としては、「コード読めば分かることをコメントするな!」みたいなのがあるが、 君はまさにその類のコメントを付けようとしている。 ただ逆に、何事であってもコメントを付けて二重化し「間違っていない」事を示す文化の所もある。 いずれにしても合わせるしかないんだから上司に聞け。 [] [ここ壊れてます]
279 名前:デフォルトの名無しさん (ワッチョイ a37b-jpzQ) [2017/02/04(土) 08:49:53.56 ID:XS0fIkHD0.net] とりあえずシステムハンガリアンは糞
280 名前:デフォルトの名無しさん (ワッチョイ cf24-1aN8) [2017/02/04(土) 10:35:39.62 ID:BOsvOfBI0.net] doubleかfloatかに迷いがあるときはtemplateだろjk
281 名前:デフォルトの名無しさん (ワッチョイ cf6b-aC2u) mailto:sage [2017/02/04(土) 20:11:06.99 ID:tL9rMbFt0.net] >>271 こういうの読めるようになりたい アンダーバーとかなんか特徴あるんかね?
282 名前:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK67-DkDD) mailto:sage [2017/02/04(土) 20:13:21.29 ID:sK4bvJ1nK.net] >>276 MFCのソース見れば時代遅れのハンガリアンが見れる。
283 名前:デフォルトの名無しさん (ワッチョイ 7fcc-ysPd) mailto:sage [2017/02/04(土) 20:29:05.55 ID:6QMeFViK0.net] MSのバカ社員が勘違いしてシステムハンガリアンが出来た
284 名前:デフォルトの名無しさん (ワッチョイ c35b-0MWP) mailto:sage [2017/02/04(土) 20:32:51.09 ID:UEIbCXwH0.net] >>276 むしろどこが読めないんだ? 271以外の解釈はないだろ。
285 名前:デフォルトの名無しさん (ワッチョイ 7f3c-ZDta) mailto:sage [2017/02/04(土) 20:36:47.66 ID:pJMir97a0.net] >>276 パターン認識って言うか慣れでしょ いろんなソース見てりゃだんだんなれてくるよ
286 名前:デフォルトの名無しさん (ワッチョイ cf6b-aC2u) mailto:sage [2017/02/04(土) 20:37:44.99 ID:tL9rMbFt0.net] ハンガリアンってなんだ ってレベルで初めて見るわ >>279 それは規則とか法則とか知ってるから読めるんだろ 大まかに言えば経験が違いすぎる なら読めよって話だけどさ
287 名前:デフォルトの名無しさん (ワッチョイ 1341-qcXh) [2017/02/04(土) 20:41:51.99 ID:URlnQv8F0.net] 場合によってはハンガリアン記法にすべきものもあるかもしれないけど 全ての変数に対してやるのはどうなんでしょ?
288 名前:デフォルトの名無しさん (ワッチョイ 1302-1ST5) mailto:sage [2017/02/04(土) 21:08:08.22 ID:DV7gEIN40.net] クラスの先頭にCを付けるのだけは全くの無駄だからやめて
289 名前:デフォルトの名無しさん (ワッチョイ a37b-jpzQ) [2017/02/04(土) 21:13:17.38 ID:XS0fIkHD0.net] >>282 それでもulとか環境によってサイズが変わる名前付けるのイミフだけどな
290 名前:デフォルトの名無しさん (ワッチョイ c35b-0MWP) mailto:sage [2017/02/04(土) 21:14:27.75 ID:UEIbCXwH0.net] >>281 いや多分、そのソース見たらそんなんばっかだから大体分かると思うぞ。 一応説明しておくと、 m_: method_ の略。(member_かも?) 頭に付けたらインテリセンスでソートされて便利とか言っていた奴もどこかのスレにいたはず。 (メソッドなのかフィールドなのか一目瞭然ということらしい。既に出ているが頭のCもそういう理由) 他でもルール的に「頭に」何か付けるのはよくある話。 MSのVC++のローカル拡張なら __int64 とか、頭に __(二重アンダースコア) がついている。 googleだとprivateは頭に _ だったかな? (なおgoogleはメソッドは動詞、フィールドは名詞を使えとか言っていたはず) サフィックスはユーザーが勝手に使い、プリフィックスはシステム側でルールとして使う。 ulはそのまま unsigned long の略。Cなら元の型は数種しかないから想像はつくだろ。 DataCntはDataCountの略。短くする時には母音(aiueo)を抜く。(子音だけでも何となく分かるから) そんなに経験の差って程の物でもないと思うが。 もっとも俺は無駄に頭に付けたり略したりしないので、このルールなら嫌いだが。
291 名前:デフォルトの名無しさん (ワッチョイ a37b-jpzQ) [2017/02/04(土) 21:24:54.38 ID:XS0fIkHD0.net] 補足 * グローバルスコープでアンダースコアで始まる * アンダースコアで始まって大文字が続く * 二重アンダースコアを含む に合致する名前は規格で処理系によって予約されてるからコンパイラとそれに付属する標準ライブラリーを実装する人以外は使っちゃダメ
292 名前:デフォルトの名無しさん (ワッチョイ 7f3c-ZDta) mailto:sage [2017/02/04(土) 21:42:33.76 ID:pJMir97a0.net] >>285 > m_: method_ の略。 そんなわけないだろ...
293 名前:デフォルトの名無しさん (ワッチョイ ffc0-Sup+) mailto:sage [2017/02/05(日) 00:12:45.37 ID:NucUcCyo0.net] グーグルはメンバ変数の最後に_ クソ過ぎわろた
294 名前:デフォルトの名無しさん (ワッチョイ 7fc1-AkR4) mailto:sage [2017/02/05(日) 00:14:15.03 ID:nBEZPMY50.net] >>288 結構あるくね? インスタンスに付けるてのもよく見る
295 名前:デフォルトの名無しさん (ワッチョイ 3342-fOGj) mailto:sage [2017/02/05(日) 00:41:54.55 ID:mLcywPgQ0.net] >>288 え、なんで? this->でもいいけど
296 名前:デフォルトの名無しさん (ワッチョイ cf6b-aC2u) mailto:sage [2017/02/05(日) 00:56:14.90 ID:6qCMRDqV0.net] アンダーバーを変数に付けるのは慣れないと気持ち悪く見えるな 今は慣れたけどなんでついてるかなんて考えたことがない
297 名前:デフォルトの名無しさん (ワッチョイ 7f3c-ZDta) mailto:sage [2017/02/05(日) 00:58:41.61 ID:PGIZ+KFZ0.net] >>289 そこそこある >>288 が井の中なだけ
298 名前:デフォルトの名無しさん (ワッチョイ cf6b-aC2u) mailto:sage [2017/02/05(日) 00:59:09.67 ID:6qCMRDqV0.net] 途中で投稿しちゃった 考えたことないなんて人も居るんじゃないの?と...俺が考えなさすぎてるだけか... >>285 二重アンダーバーもよく見かけるけどなんでわざわざ二重つけてんだよ!!!っていつも思う 母音抜くルールわかりやすかった 変に短いやつ見付けたら母音考えたら良いんだね
299 名前:デフォルトの名無しさん (スップ Sd9f-oUAv) [2017/02/05(日) 00:59:12.87 ID:rJZpHJC7d.net] m_xxxでもxxx_でもメンバである保証全くないからthis->派
300 名前:デフォルトの名無しさん (ワッチョイ 7f7b-1ST5) mailto:sage [2017/02/05(日) 01:01:31.92 ID:WpCJ+nTl0.net] メンバ変数は ぱっと見わかるように、 vector<string> _vstr; 前ハイフンつけてます
301 名前:デフォルトの名無しさん (ワッチョイ 3342-fOGj) mailto:sage [2017/02/05(日) 01:03:44.90 ID:mLcywPgQ0.net] 前ハイフンはシステム予約とバッティングしやすいから後ハイフン派
302 名前:デフォルトの名無しさん (ワッチョイ cf6b-aC2u) mailto:sage [2017/02/05(日) 01:04:30.83 ID:6qCMRDqV0.net] >>295 こんなルールのみだったらわかりやすいのに
303 名前:デフォルトの名無しさん (スップ Sd9f-oUAv) [2017/02/05(日) 01:07:18.77 ID:rJZpHJC7d.net] 変数はいいけどメンバ関数はどうすんの? m_とか後ろ_とかつけるの?
304 名前:デフォルトの名無しさん (ワッチョイ c35b-0MWP) mailto:sage [2017/02/05(日) 01:27:23.42 ID:lu7sp4/h0.net] >>293 > 母音抜くルールわかりやすかった まあここでも使われてるんだけどね。 kwskとか、ggrksとか。
305 名前:デフォルトの名無しさん (ワッチョイ 1302-1ST5) mailto:sage [2017/02/05(日) 01:29:06.53 ID:Yy4bNkpa0.net] バッティングしやすいと言われて避けてたけどかれこれ一回もしたことないから止めたわ
306 名前:デフォルトの名無しさん (ワッチョイ 7fc1-AkR4) mailto:sage [2017/02/05(日) 01:41:58.02 ID:nBEZPMY50.net] 確率論かよ プロのやることじゃないだろ
307 名前:デフォルトの名無しさん (ワッチョイ a37b-jpzQ) [2017/02/05(日) 02:18:19.91 ID:cECtpBb50.net] 避けてきたというのにバッティングしたこと無いから止めるって論理がちょっとおかしい。 お前サーバー管理者だけど今まで何も障害発生してないから要らないわ、解雇ね。 みたいな。
308 名前:デフォルトの名無しさん (ワッチョイ b31e-1yep) mailto:sage [2017/02/05(日) 03:03:49.00 ID:uDzXyp1X0.net] using std;してるのに変数名にcount使ってるのはたまに見かける そういう人は int printf = 0; とか書いてあっても気にならないんだろうか
309 名前:デフォルトの名無しさん (ワッチョイ 7f7b-1ST5) mailto:sage [2017/02/05(日) 04:04:57.35 ID:WpCJ+nTl0.net] いずれにしろわかると思うが
310 名前:デフォルトの名無しさん (ワッチョイ a3a6-0MWP) mailto:sage [2017/02/05(日) 08:20:30.97 ID:sLo1ryYQ0.net] >>301 2chにプロが来ると思うのはおかしいでしょ
311 名前:デフォルトの名無しさん (ワッチョイ cf42-qddC) mailto:sage [2017/02/05(日) 21:23:37.51 ID:QXihksJQ0.net] 規格上、メンバ変数の先頭にアンダーバーつけてもシステム変数とバッティングしたりしないよ。 defineとか色々やってるとバッティングするのかもしれんけど、誰か例示してくれ
312 名前:デフォルトの名無しさん (ワッチョイ cf24-1aN8) [2017/02/05(日) 21:50:38.91 ID:93yXMd2W0.net] マクロはスコープに従わない これこそが諸悪の根源
313 名前:デフォルトの名無しさん (ワッチョイ a37b-0yxR) [2017/02/05(日) 21:53:28.57 ID:cECtpBb50.net] 先頭アンダースコアに大文字が続くとローカルスコープでも×
314 名前:デフォルトの名無しさん (ワッチョイ cf24-1aN8) [2017/02/05(日) 22:00:58.46 ID:93yXMd2W0.net] operator "" がアンダースコアで始まらない std::chronoの識別子までハネるコンパイラを どう修正すべきか開発陣は詰んでるよね
315 名前:デフォルトの名無しさん (ワッチョイ 13c9-dUno) mailto:sage [2017/02/05(日) 22:11:51.14 ID:JZIpCKM70.net] cstddef無しでもdecltype(sizeof(int))が使えるぐらいだから別につんでない
316 名前:デフォルトの名無しさん (ワッチョイ cf6b-aC2u) mailto:sage [2017/02/06(月) 01:33:36.44 ID:EE2HabAa0.net] 初歩的な質問なんだけど 列挙体の列挙タグとかないやつってどういうときに使うの? 列挙タグないとどうしようもなくね?ってなってるんだけど
317 名前:デフォルトの名無しさん (ワッチョイ a37b-0yxR) [2017/02/06(月) 02:14:43.60 ID:cswrm9tC0.net] >>311 単に定数値として使われてるだけだとともう
318 名前:デフォルトの名無しさん (ワッチョイ cf6b-aC2u) mailto:sage [2017/02/06(月) 02:22:16.07 ID:EE2HabAa0.net] >>312 受けとる側を同じ型にしなくていいんかな? 基本的にint型らしいからint型で受けるものなの?
319 名前:デフォルトの名無しさん (ワッチョイ d3dc-0e9Z) mailto:sage [2017/02/06(月) 05:48:15.78 ID:GvVdGH4O0.net] enum { buf_size = 100; answer = 42; }; みたいな感じで使うenumの話だよね。 大雑把に言って「数値リテラルと同じ場面で使える名前のついた整数」。 配列定義の要素数に使えるし、キャストなしに任意の整数型に入れられる。
320 名前:デフォルトの名無しさん (ワッチョイ cf6b-aC2u) mailto:sage [2017/02/06(月) 09:45:50.45 ID:EE2HabAa0.net] >>314 まさにそれだ!!! 要素数か!!!そこ見落としてた 任意のやつに入れられるとしても 本来なら型は合わせるべきでってルールに反しててみたいな葛藤が繰り広げられてる
321 名前:デフォルトの名無しさん (ワッチョイ 7fcf-1ST5) mailto:sage [2017/02/06(月) 10:46:33.65 ID:eKJHyJFq0.net] >>315 Cならintの定数として使えばいいけど、C++ならテンプレートと組み合わせたときとかに型の違いが 出てきちゃうから、整数として使うならconstexpr intにしといたほうがいいよ。葛藤するぐらいならなおのこと。
322 名前:デフォルトの名無しさん (ワッチョイ a319-gmgt) mailto:sage [2017/02/06(月) 16:13:16.68 ID:1+9LFiOi0.net] f(x,a)をx.f(a)と書くみたいな新しいC++の機能になる予定のがあったと思ったんですけど この機能が何て言う名前か忘れたので教えてください。
323 名前:デフォルトの名無しさん (ワッチョイ 7f3c-mNa5) mailto:sage [2017/02/06(月) 17:15:37.05 ID:CRCNRbS80.net] 統一関数呼び出しだったかな。 提案されてるだけで取り入れられるかどうかはまだ決まってない気がする。 C言語の既存APIに対応できないとかで揉めてるんじゃないっけ?
324 名前:デフォルトの名無しさん (ワッチョイ a319-gmgt) mailto:sage [2017/02/06(月) 17:49:23.50 ID:1+9LFiOi0.net] ありがとうございました。 それが使いたいので気になってました。
325 名前:デフォルトの名無しさん (ワッチョイ cf24-1aN8) [2017/02/06(月) 19:36:58.46 ID:8E+Xd5G50.net] >>310 それoperator ""と関係あるの?
326 名前:デフォルトの名無しさん (ワントンキン MM1f-0yxR) [2017/02/06(月) 20:41:46.35 ID:XckUYI7fM.net] operator ""って何?
327 名前:デフォルトの名無しさん (スプッッ Sd9f-PPsr) [2017/02/06(月) 20:42:45.84 ID:vzOme6YXd.net] ユーザ定義リテラル
328 名前:デフォルトの名無しさん (エムゾネ FF9f-aC2u) mailto:sage [2017/02/06(月) 20:49:53.47 ID:wweedNqsF.net] パイプラインでデータ送るってのはexeからexeってイメージで良いのかな?
329 名前:デフォルトの名無しさん (ワントンキン MM1f-0yxR) [2017/02/06(月) 20:52:29.18 ID:XckUYI7fM.net] >>322 定義するときそんなの使うんだ。全く使わないし使いたいと思ったことがないからマジで知らんかった。
330 名前:デフォルトの名無しさん (ワッチョイ c35b-0MWP) mailto:sage [2017/02/06(月) 21:05:15.71 ID:R4XPB48C0.net] >>315 それ多分defineの代わり。 改善点は>>307 くらいか?俺はあまり文法には詳しくないから分からんが。 てかお前、マジで上司に聞いた方がいいぞ。 そういうところ改善しろって話じゃないと思うのだが。
331 名前:デフォルトの名無しさん (ドコグロ MMff-C4Pq) mailto:sage [2017/02/06(月) 21:14:58.49 ID:VJg+IRhiM.net] >>323 パイプラインの定義による 普通はプロセス〜プロセスだけど自分で定義した関数に渡せる PowerShell みたいな奴もいるから
332 名前:デフォルトの名無しさん (ワンミングク MM1f-PSyA) mailto:sage [2017/02/07(火) 20:42:19.89 ID:cTLgA1N6M.net] >>293 古アラム語の記法で2000年以上の歴史があるよ
333 名前:デフォルトの名無しさん (ワッチョイ cf24-1aN8) [2017/02/07(火) 20:54:19.60 ID:A56tKajQ0.net] >>326 pipeline burst SRAMってのがあったな
334 名前:デフォルトの名無しさん (スプッッ Sd9f-aC2u) mailto:sage [2017/02/07(火) 22:51:12.61 ID:LBkPe/Vnd.net] >>326 関数to関数ってdllと何がちがうんや
335 名前:デフォルトの名無しさん (ワッチョイ cf7b-gPBI) mailto:sage [2017/02/08(水) 01:04:48.39 ID:6rskJv7R0.net] Linuxのコマンドでも、同一プロセス内のコマンドと、別プロセスを起動するコマンドの、2種類ある 10万行のシェルスクリプトの実行時間でも、大きな差がある。 for 9分 while 5秒 awk・perl 0.1秒
336 名前:デフォルトの名無しさん (ワッチョイ 365b-a31+) mailto:sage [2017/02/09(木) 11:43:50.96 ID:18LIUJ/70.net] STLはどの程度使いこなせるのが一般的と思いますか? 書籍、簡単でいいのがなくて困ってます。 C++難しすぎ。
337 名前:デフォルトの名無しさん (スップ Sd72-Q8BR) [2017/02/09(木) 11:44:59.53 ID:ABH38W/Id.net] ↓STLというものは存在しない
338 名前:デフォルトの名無しさん (ワッチョイ 9302-ENO3) mailto:sage [2017/02/09(木) 12:39:20.71 ID:mjUCD5MK0.net] >>331 毎日cpprefjp眺めとけばそのうち結構覚えてる
339 名前:デフォルトの名無しさん (ワッチョイ b330-t3CD) mailto:sage [2017/02/09(木) 13:03:54.52 ID:Wn84KVBK0.net] 一般的なんてぼんやりした領域のことを聞かれても困るわ まC++をC++として使うつもりならコンテナ単体とコンテナとアルゴリズムの組み合わせくらいは なんとなくでも使えるようになっていて欲しいな
340 名前:デフォルトの名無しさん (ワッチョイ 83dc-w/2a) mailto:sage [2017/02/09(木) 13:09:01.92 ID:4sYnDBFk0.net] 入門書を何冊も試すより『プログラミング言語C++』第4版を手に入れて 先頭からのんびり読み進めながら、後半の標準ライブラリの部分も拾い読み、 という方が費用対効果は大きいかも。1万円近くするお高い本だけど。
341 名前:デフォルトの名無しさん (ワッチョイ 32cc-LNBT) mailto:sage [2017/02/09(木) 13:22:05.49 ID:erARudvS0.net] バカは一気に覚えようとするから そんなん受験くらいやろ 実践は身につけんと意味ない
342 名前:デフォルトの名無しさん (アウアウカー Sa1f-a31+) mailto:sage [2017/02/09(木) 13:31:32.51 ID:DP2Fqfwxa.net] 必要になったとき調べながら使ってれば自然と覚える
343 名前:デフォルトの名無しさん (ササクッテロレ Spf7-7zST) mailto:sage [2017/02/09(木) 14:05:14.86 ID:Ra4XvV1bp.net] STL覚えるのに金払うのは勿体無い気がする cpprefjpをざっと眺めてどんなものがあるか何となくレベルで把握→実際に使ってみる ってのを繰り返すべし
344 名前:デフォルトの名無しさん (ワッチョイ e2d4-cGUq) mailto:sage [2017/02/09(木) 15:54:11.28 ID:Ccc/L2ZJ0.net] VC++ なんですが typedef 絡み(スコープ?)で質問です。 typedef int macaddress_t[6]; void show(macaddress_t m) {} int test() { macaddress_t m; show(m); } なのですが、 error: 'macaddress_t' was not declared in this scope となってコンパイル通りません。 void show 〜の部分を extern "C" { void show(macaddress_t m) {} } って括ると大丈夫になります。 これは何が起きているのでしょうか。
345 名前:デフォルトの名無しさん (ワッチョイ e2d4-cGUq) mailto:sage [2017/02/09(木) 16:42:39.82 ID:Ccc/L2ZJ0.net] 補足 extern "C" なし時にエラーが出るは void show の行です。 C++では引数は別スコープ?
346 名前:デフォルトの名無しさん (ワッチョイ fe6c-lXju) mailto:sage [2017/02/09(木) 17:01:06.12 ID:ljwNeD6M0.net] それだけだとエラー再現しないから なんか他でやってるんじゃないの?
347 名前:デフォルトの名無しさん (スップ Sd72-Q8BR) [2017/02/09(木) 17:13:47.07 ID:ABH38W/Id.net] test関数が.cにあるとか
348 名前:デフォルトの名無しさん (ワッチョイ e2d4-cGUq) mailto:sage [2017/02/09(木) 21:17:24.37 ID:Ccc/L2ZJ0.net] あ、.cpp じゃなくて .c です。 これが大きいんですか?
349 名前:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK4f-4eBQ) mailto:sage [2017/02/09(木) 21:21:30.92 ID:2NLO6FImK.net] >>343 .cで定義した関数をC++で使うにはextern "C"で宣言しないといけない。
350 名前:デフォルトの名無しさん (アウアウカー Sa1f-a31+) mailto:sage [2017/02/09(木) 21:39:45.68 ID:H/sFxM1Na.net] >>331 です。皆さんありがとうございます。 www5c.biglobe.ne.jp/~ecb/cpp/cpp00.html でSTLを勉強中ですが投げ出しそうです。 独習C++は理解できましたが プログラミング言語 C++は厳しいです。 vector for_each random_shuffle sort の動作を確認中です。 random_shuffleが毎回同じ値を返すのですが どうやったら毎回異なる結果を返せますか?
351 名前:デフォルトの名無しさん (ワントンキン MM62-xxX2) mailto:sage [2017/02/09(木) 21:47:39.04 ID:0i4innvN
] [ここ壊れてます]
352 名前:M.net mailto: >>345 3番目の引数に数字入れろ random_shuffleじゃなくてshuffle使え HackerRankのSTLのコーナーでやれ 以上 [] [ここ壊れてます]
353 名前:デフォルトの名無しさん (ワッチョイ 9302-ENO3) mailto:sage [2017/02/09(木) 23:08:25.11 ID:mjUCD5MK0.net] >>345 random_shuffleは非推奨になったから別のを使え for_eachは特別な理由が無ければ範囲forを使え
354 名前:デフォルトの名無しさん (ワッチョイ 2731-CIv3) mailto:sage [2017/02/09(木) 23:17:44.28 ID:Tzm2iYcD0.net] C++11とかC++14とかC++17とかあるけど、C++はまだ開発途上なの?
355 名前:デフォルトの名無しさん (ササクッテロレ Spf7-eUd9) mailto:sage [2017/02/09(木) 23:23:36.93 ID:lbPmSuZmp.net] はい
356 名前:デフォルトの名無しさん (ササクッテロレ Spf7-7zST) mailto:sage [2017/02/09(木) 23:28:37.45 ID:Ra4XvV1bp.net] 進化なきソフトウエアに未来はないのだ
357 名前:デフォルトの名無しさん (ワッチョイ 9302-ENO3) mailto:sage [2017/02/09(木) 23:50:09.48 ID:mjUCD5MK0.net] 更新が止まるのは需要が無くなったときだ
358 名前:デフォルトの名無しさん (ワッチョイ 2731-CIv3) mailto:sage [2017/02/09(木) 23:55:51.94 ID:Tzm2iYcD0.net] ちょっと開発工程表出してくれる? 瑕疵期間は完成版リリース後1年ね。 もちろん予算は増やせないよ。
359 名前:デフォルトの名無しさん (ワッチョイ e7a6-cGUq) mailto:sage [2017/02/10(金) 00:02:15.87 ID:X8zCTp9W0.net] クライアントはよりどりみどりだから
360 名前:デフォルトの名無しさん (ワッチョイ 92c1-7zST) mailto:sage [2017/02/10(金) 00:04:38.63 ID:DjvLDgGn0.net] 唐突に始まる基地外顧客ごっこやめて
361 名前:デフォルトの名無しさん (ワッチョイ b37b-a31+) mailto:sage [2017/02/10(金) 00:06:53.18 ID:Rg0hWeb00.net] 型変換難しすぎます すぐコンパイラ先生に怒られます
362 名前:デフォルトの名無しさん (ワッチョイ 92c1-7zST) mailto:sage [2017/02/10(金) 00:08:58.24 ID:DjvLDgGn0.net] すぐ怒ってくれるコンパイラ先生に感謝感激雨あられですね
363 名前:デフォルトの名無しさん (アウアウカー Sa1f-Twc8) mailto:sage [2017/02/10(金) 00:10:01.98 ID:ynOefsL0a.net] サクラダファミリア
364 名前:デフォルトの名無しさん (ワッチョイ b37b-a31+) mailto:sage [2017/02/10(金) 00:16:30.32 ID:Rg0hWeb00.net] 普通の型からマイクロソフト定義の専用のきついわ あんなん初めから使うなよマイクロソフトさん
365 名前:デフォルトの名無しさん (ワッチョイ 9302-ENO3) mailto:sage [2017/02/10(金) 00:19:08.11 ID:Yd/z+i5f0.net] そのうちどれが何をdefineしたものかは大体察しが付いてくる
366 名前:デフォルトの名無しさん (ワッチョイ e2d4-cGUq) mailto:sage [2017/02/10(金) 16:18:59.44 ID:ovuuNq0I0.net] >>344 ==ここから== typedef int macaddress_t[6]; void show(macaddress_t m) {} int test() { macaddress_t m; show(m); } ==ここまで== ひとつのソースファイルなのですが、 全体を extern "C" で括るらともかく、なんでvoid show〜の行だけ括らないといけないのか、そこが理解できないんです
367 名前:デフォルトの名無しさん (ワッチョイ 7642-CIv3) mailto:sage [2017/02/10(金) 18:37:08.04 ID:bnzKLGGx0.net] NDKでC++ でwregex使おうとしたら コンパイルできないし。 wchar_tが4なんだな。 codecvtもないし まだ早すぎたのか。
368 名前:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK4f-4eBQ) mailto:sage [2017/02/10(金) 18:43:05.49 ID:HPN+NYiaK.net] >>361 NDKでBoost使えるか試してみてや。
369 名前:デフォルトの名無しさん (ワッチョイ 277b-VpYz) [2017/02/10(金) 20:32:59.12 ID:MRcACxyw0.net] >>361 wchar_tはWindows以外だいたい4だぞ
370 名前:デフォルトの名無しさん (スッップ Sd52-jZLg) mailto:sage [2017/02/10(金) 20:59:06.21 ID:kKjy5FQnd.net] >>360 試してみたいからどっかにソリューション一式アップしてみ?
371 名前:デフォルトの名無しさん (ワッチョイ 7b0e-zOJM) mailto:sage [2017/02/10(金) 21:53:45.98 ID:m9Xytejo0.net] 2だと合成文字どころかcodepointすら1つでは表現出来ない、半端仕様 それならもういっそutf-8でいいじゃないか
372 名前:デフォルトの名無しさん (ドコグロ MM8a-zlRv) mailto:sage [2017/02/10(金) 22:01:34.71 ID:YdIN6n2bM.net] >>360 釣果はどうだい?
373 名前:デフォルトの名無しさん (ワッチョイ 7b51-cGUq) mailto:sage [2017/02/10(金) 22:09:36.57 ID:WMmjWeX+0.net] 文字を「文字列の先頭」みたいな形でしか表せないのは用途によっては面倒くさい。
374 名前:デフォルトの名無しさん (ワッチョイ 93c9-3u4T) mailto:sage [2017/02/11(土) 00:41:43.23 ID:yp4PwuMD0.net] そうだな だから367はもうUnicode使わないようにしないと
375 名前:デフォルトの名無しさん (ワッチョイ 367b-ZOaM) [2017/02/11(土) 13:11:50.51 ID:I0QTm/K50.net] >>360 ひとつの.cppの中?それならextern "C"は必要ないよ .cと.cppをリンクするときは.cで定義した関数は.cpp側でextern "C"しなけりゃいけない キーワード:マングリング
376 名前:360 (ワッチョイ 7642-CIv3) mailto:sage [2017/02/11(土) 18:00:41.65 ID:mOx2IQFJ0.net] >>362 Boostビルドの前に Android Studioでinclude pathの設定が わからなくて お手上げ状態。
377 名前:デフォルトの名無しさん (ワッチョイ 9302-ENO3) mailto:sage [2017/02/11(土) 19:33:50.14 ID:I2Nt/svY0.net] C++の最大の難関は環境構築
378 名前:デフォルトの名無しさん (アウアウオー Sa8a-S0So) mailto:sage [2017/02/11(土) 20:04:39.39 ID:2PZ2/Gs1a.net] VCぇ。。。
379 名前:デフォルトの名無しさん (スプッッ Sd72-a31+) mailto:sage [2017/02/11(土) 20:10:03.55 ID:7410wxb3d.net] vcってなんなんですか
380 名前:デフォルトの名無しさん (アウアウオー Sa8a-S0So) mailto:sage [2017/02/11(土) 20:24:54.87 ID:2PZ2/Gs1a.net] VisualC++の略。 ダイアログアプリ以外は全然Visualじゃ無いけどね。 でもそんなの他のC++処理系も一緒。 (むしろダイアログアプリすら別に入れないと出来ない。そこがライブラリ選べる自由度の代償) VB的にC++使えたC++Builderは死んだのだ。。。 他の環境入れる辺り、GUIは関係無いだろうけど、GUI以外にもライブラリがインストール時に全部入るので環境構築は一番楽。 あ、VCでも.netならVB的に使える。 文法が独特になって、C#使った方がマシだが。
381 名前:デフォルトの名無しさん (ワッチョイ 9302-ENO3) mailto:sage [2017/02/11(土) 23:51:53.14 ID:I2Nt/svY0.net] MSVCとQtって組み合わせられるの?
382 名前:デフォルトの名無しさん (ササクッテロロ Spf7-eUd9) mailto:sage [2017/02/12(日) 03:21:26.71 ID:9ZkThf7dp.net] 組み合わせるの意味がよくわからんけどコンパイラにmsvcは使える
383 名前:デフォルトの名無しさん (ワッチョイ b27b-ENO3) mailto:sage [2017/02/12(日) 15:27:47.18 ID:YlSn9Fu90.net] vcっていう人とvc++っていう人がいる
384 名前:361 (ワッチョイ 7642-CIv3) mailto:sage [2017/02/12(日) 18:15:47.67 ID:2aJLYPTP0.net] build.gradleで cmake { cppFlags "-std=c++11 -frtti -fexceptions -I${project.buildDir}/../src/main/cpp/include" } としたらshared_ptrやらlexical_castは動いたわ。 Boostビルドやインテリセンスが動かない問題は解決できなかったけど
385 名前:デフォルトの名無しさん (アウアウオー Sa8a-S0So) mailto:sage [2017/02/12(日) 18:35:37.25 ID:ElZAn973a.net] >>377 VC6の時代は入門書には大体VCって書いてた。 あの頃がVC全盛期。
386 名前:デフォルトの名無しさん (ワッチョイ b27b-ENO3) mailto:sage [2017/02/12(日) 18:51:10.52 ID:YlSn9Fu90.net] >>379 実はVC6が仕事で使ったのが最後w MSCもVer.6が良かったなぁみたいな。
387 名前:デフォルトの名無しさん (スプッッ Sd72-a31+) mailto:sage [2017/02/13(月) 08:28:15.44 ID:w9FuiKwSd.net] fopenと_sの違いを教えてクレメンス
388 名前:デフォルトの名無しさん (アウアウオー Sa8a-S0So) mailto:sage [2017/02/13(月) 10:32:02.37 ID:dreuS3Zka.net] _sはセキュリティのs
389 名前:デフォルトの名無しさん (スプッッ Sd72-Q8BR) [2017/02/13(月) 13:50:40.30 ID:jR+QOQ4bd.net] コンストラクタの関数トライブロックのイニシャライザで発生した例外をキャッチしても そのままコンストラクタの外へ例外が飛び出るのですがそういうものですか?
390 名前:デフォルトの名無しさん (ワッチョイ b27b-ENO3) mailto:sage [2017/02/13(月) 14:12:07.77 ID:CDuxjgvH0.net] >>381 そんなんがあんのかorz
391 名前:デフォルトの名無しさん (ワッチョイ b330-t3CD) mailto:sage [2017/02/13(月) 14:22:10.35 ID:83glS84B0.net] >>383 そういうもの
392 名前:デフォルトの名無しさん (スプッッ Sd72-Q8BR) [2017/02/13(月) 14:41:07.98 ID:jR+QOQ4bd.net] そういうものですか
393 名前:デフォルトの名無しさん (オッペケ Srf7-3u4T) mailto:sage [2017/02/13(月) 22:21:47.14 ID:0ypMjrgpr.net] メンバーの初期化が失敗してる状態で続行されたら迷惑以外の何物でもない
394 名前:デフォルトの名無しさん (ブーイモ MM52-mpSg) mailto:sage [2017/02/13(月) 22:30:08.50 ID:2WrcuwMzM.net] catchブロックは必ずthrowで終わらないといけなくて、省略すると自動でrethrowするみたいね
395 名前:デフォルトの名無しさん (ワッチョイ b37b-a31+) mailto:sage [2017/02/13(月) 22:32:22.26 ID:riwEWnOT0.net] COM登録難しい 自動で作られる_p.cとか_i.cファイルってなんなんだ IIDやCLSIDとか難しすぎる
396 名前:デフォルトの名無しさん (ワッチョイ 129b-ilKL) mailto:sage [2017/02/14(火)
] [ここ壊れてます]
397 名前:00:03:42.00 ID:IGsQOpXK0.net mailto: >>382 secure [] [ここ壊れてます]
398 名前:デフォルトの名無しさん (スップ Sd72-a31+) mailto:sage [2017/02/14(火) 09:38:53.47 ID:dFgeiJZpd.net] idlをビルドしたときに作られる _p.c _i.c .h はコンパイラによって中身に差は出てくるけど 内容までは気にしなくて良いもの??
399 名前:デフォルトの名無しさん (スップ Sd72-RX11) [2017/02/14(火) 11:14:58.25 ID:T4QzsHFxd.net] void hoge { static string a; } void hage { thread_local string b; } int main() { hoge(); hage(); } とした場合aとbのデストラクタが呼ばれる順番の規定はどうなってますか
400 名前:デフォルトの名無しさん (スップ Sd72-a31+) mailto:sage [2017/02/14(火) 12:12:14.85 ID:dFgeiJZpd.net] >>392 cプラスはデストラクタは定義しないとないんじゃなかったっけ プログラム終了時は呼ばれるのだろうか
401 名前:デフォルトの名無しさん (ワッチョイ b330-t3CD) mailto:sage [2017/02/14(火) 12:20:58.70 ID:mNVQx7P30.net] シングルスレッドなら構築の逆順
402 名前:デフォルトの名無しさん (ワントンキン MM62-xxX2) mailto:sage [2017/02/14(火) 12:24:34.00 ID:cBGBFD/aM.net] マルチスレッドでも同じだで
403 名前:デフォルトの名無しさん (スップ Sd72-RX11) [2017/02/14(火) 12:26:56.53 ID:T4QzsHFxd.net] gcc6.2でやってますが順番を変えてもaのデストラクタが先に呼ばれます
404 名前:デフォルトの名無しさん (JP 0H4b-EsWW) mailto:sage [2017/02/14(火) 13:00:32.03 ID:he6YB8dMH.net] そいつら main と関係ないとこで呼ばれてるべ しかし記述順にかかわらず b が先じゃないとまずいんじゃないの
405 名前:デフォルトの名無しさん (スップ Sd72-RX11) [2017/02/14(火) 13:15:37.14 ID:T4QzsHFxd.net] ちゃんとmainのそれぞれの関数内で順番通りコンストラクタは呼ばれてます デストラクタは逆順にならないです
406 名前:デフォルトの名無しさん (ワッチョイ 93c9-3u4T) mailto:sage [2017/02/14(火) 13:39:07.66 ID:aNlWux3V0.net] >>392 3.6.3 Termination 段落1 『The completions of the destructors for all initialized objects with thread storage duration within that thread are sequenced before the initiation of the destructors of any object with static storage duration.』
407 名前:デフォルトの名無しさん (スップ Sd72-RX11) [2017/02/14(火) 14:23:27.77 ID:T4QzsHFxd.net] そのスレッド内のスレッド記憶期間を有する全ての初期化されたオブジェクトに対するデストラクタの完了は、静的記憶期間を有するオブジェクトのデストラクタの開始前に順序付けられる。 thread localはstaticの前に順序付けられる?
408 名前:デフォルトの名無しさん (ワッチョイ 93c9-3u4T) mailto:sage [2017/02/14(火) 14:33:18.78 ID:aNlWux3V0.net] thread_localのデストラクターの完了はstaticのデストラクター開始前となる つまりthread_localのデストラクターが先
409 名前:デフォルトの名無しさん (ワッチョイ df7b-3cRu) mailto:sage [2017/02/14(火) 14:43:39.35 ID:DbhRLpyW0.net] 英語読めねーザコにはC++は早い
410 名前:デフォルトの名無しさん (スップ Sd72-RX11) [2017/02/14(火) 14:54:00.41 ID:T4QzsHFxd.net] でもthread localのデストラクタが後に呼ばれているようです
411 名前:デフォルトの名無しさん (ワッチョイ 367b-F1sY) mailto:sage [2017/02/14(火) 17:04:24.30 ID:NG72BBfs0.net] clangだとどう? Wandbox等でも試せる
412 名前:デフォルトの名無しさん (スプッッ Sdc7-a31+) mailto:sage [2017/02/14(火) 18:47:20.33 ID:KObDNYqgd.net] テストについて考えてるんだけど難しい ソフトウェア開発難しくないか 一番ダメなのは俺が方向性を定めぬまま決めてしまっていることだろうが
413 名前:デフォルトの名無しさん (ワッチョイ df98-3CwI) mailto:sage [2017/02/14(火) 20:35:30.08 ID:lntB2yLX0.net] 仕事でやってるなら (まさか会社で物事を決める立場にある人がこんな質問しているとは思えないので) 先輩に聞くか、会社の方針に合わせるしかないよ 今までどのようにやってきているかを見て、同じようにやるしかない 趣味でやっていて、オープンソースか何か、チームの一員として参加しているのなら やはりチームの方針に合わせるしかないよ 今までどのようにやってきているかを見て、同じようにやるしかない 趣味でやっていて、個人で何か作っているっていうんなら、テストはする必要ないよ 個人開発はいつでも時間が圧倒的に足りてないから、テストなんか真面目にやってたら いつまでたってもソフトが完成しない 一般的にメインのコードよりもテストコードのほうが量が多い 1万行のコードに対して10万行のテストコード・・・とかなったらもうソフトが完成しない いろいろいう人もいるだろうけど、ここは現実問題を見たほうが良い ・・・お金取るなら別だけど
414 名前:デフォルトの名無しさん (ワッチョイ 93c9-3u4T) mailto:sage [2017/02/14(火) 20:38:17.32 ID:aNlWux3V0.net] ふむふむ、つまり長文=低能
415 名前:デフォルトの名無しさん (ワッチョイ e292-CIv3) [2017/02/14(火) 20:47:51.47 ID:kM+db1DC0.net] >>404 VC2017だと必ずthread_localが先にデストラクトされます gcc5.4.0だとコンストラクタと逆順になります clang3.8.1だとコンパイルできません
416 名前:デフォルトの名無しさん (スプッッ Sdc7-a31+) mailto:sage [2017/02/14(火) 21:15:15.99 ID:KObDNYqgd.net] >>406 まさに大当たりなんだな ソフトウェア開発こんな難しいとは思ってなかった 何が難しいって意見が違うところが多くて困る 結合テストどうすりゃええんやってマジ困ってるわ 単体やシステムはなんとなくわかるんだが
417 名前:デフォルトの名無しさん (オッペケ Srf7-3u4T) mailto:sage [2017/02/14(火) 21:26:41.34 ID:5RYrxuibr.net] VC2017って来月9日に出るやつか
418 名前:デフォルトの名無しさん (JP 0Hf7-7zST) mailto:sage [2017/02/14(火) 21:43:47.89 ID:w8MjV4wUH.net] 大前提として、100%不具合が存在しないことを保証することは現実的には不可能 その前提の上で、如何に効率良く目的に合った不具合を検出して修正できるかがテストの肝 何か拠り所が欲しいならJSTQBの用語集でも読んでみたら良いんじゃね
419 名前:デフォルトの名無しさん (ワッチョイ e7a6-cGUq) mailto:sage [2017/02/14(火) 22:01:03.71 ID:fgjpd/Zj0.net] バグを見つけるためのテスト
420 名前:デフォルトの名無しさん (JP 0H4b-EsWW) mailto:sage [2017/02/15(水) 00:15:28.29 ID:urFAvqLFH.net] バグを追い出すためのテスト 隠れ家を重点的に叩く
421 名前:デフォルトの名無しさん (ドコグロ MMa3-VkM2) mailto:sage [2017/02/15(水) 06:47:06.21 ID:zgJtAmDRM.net] 追い出されたバグは違うモジュールに... デスマーチあるある
422 名前:デフォルトの名無しさん (スプッッ Sd72-a31+) mailto:sage [2017/02/15(水) 07:31:50.49 ID:PfwOrtkrd.net] >>411 以下に効率よくってのポイントっぽいね 結合テストシステムテストの差がいつも怪しい
423 名前:デフォルトの名無しさん (ワッチョイ d236-a31+) mailto:sage [2017/02/15(水) 07:41:57.48 ID:XaX5xvK80.net] >>415 システムテストはシステムレベルの仕様に基づいてテストすればいいんじゃないかな。その際、中身がどのようにモジュールに分割されてるかは意識しない。 結合テストでは、システムレベルの仕様では見えないモジュール同士のインターフェースを中心に行う。
424 名前:デフォルトの名無しさん (スプッッ Sd72-a31+) mailto:sage [2017/02/15(水) 07:48:01.33 ID:PfwOrtkrd.net] >>416 dllを差し換える作業を今してるんだけどその結合テストとなると diiを呼び出す口を呼び出したときにどうなるか それだけ見ればよいってことで良いかな?
425 名前:デフォルトの名無しさん (スプッッ Sd72-a31+) mailto:sage [2017/02/15(水) 10:29:03.40 ID:PfwOrtkrd.net] strcpy_sってなんかMSDNの記載と挙動違うくない? 第三引数ぬるのときにエラーになる
426 名前:デフォルトの名無しさん (ワッチョイ 9b22-lHUq) mailto:sage [2017/02/15(水) 11:05:06.67 ID:t9yAVOgj0.net] strSourceがNULLだとEINVALを返すって書いてあるけど
427 名前:デフォルトの名無しさん (スプッッ Sd72-a31+) mailto:sage [2017/02/15(水) 11:10:10.21 ID:PfwOrtkrd.net] >>419 リリースビルド実行してもそんなことなく落ちてしまう
428 名前:デフォルトの名無しさん (ワッチョイ df7b-3cRu) mailto:sage [2017/02/15(水) 11:53:58.00 ID:LTs78uDW0.net] If strDestination or strSource is a null pointer, or if the destination string is too small, the invalid parameter handler is invoked, as described in Parameter Validation.
429 名前:デフォルトの名無しさん (スプッッ Sd72-a31+) mailto:sage [2017/02/15(水) 12:06:28.33 ID:PfwOrtkrd.net] >>421 それ読んでるけど表ではコピー先には0で返り値でエラーコードが返ってくると記載がある その文章の後半の実行の継続が〜って箇所がこれなんだと読んだんだが
430 名前:デフォルトの名無しさん (ワッチョイ df7b-3cRu) mailto:sage [2017/02/15(水) 12:14:45.33 ID:LTs78uDW0.net] パラメータバリデーションも読めばわかる その中で実行継続が選択された場合はエラーコードが返る
431 名前:デフォルトの名無しさん (ワッチョイ 0fd2-3yR0) mailto:sage [2017/02/15(水) 12:16:06.93 ID:tDlcUFQu0.net] >>422 記載内容
432 名前:確認したいのでURL張って [] [ここ壊れてます]
433 名前:デフォルトの名無しさん (ワッチョイ df7b-3cRu) mailto:sage [2017/02/15(水) 12:18:53.94 ID:LTs78uDW0.net] ググればトップに出てくるページも探せない奴は参加しなくて良い
434 名前:デフォルトの名無しさん (スップ Sd72-a31+) mailto:sage [2017/02/15(水) 12:25:15.30 ID:7fF4cQx4d.net] >>423 実行継続ってどうやってするんだ... リリースビルドのやつだとそのまま落ちちゃうけどもそれとは違うの?
435 名前:デフォルトの名無しさん (ワッチョイ df7b-3cRu) mailto:sage [2017/02/15(水) 12:29:16.41 ID:LTs78uDW0.net] Invalid Parameter Handler Routineを差し替える
436 名前:デフォルトの名無しさん (スップ Sd72-a31+) mailto:sage [2017/02/15(水) 12:34:47.36 ID:7fF4cQx4d.net] なんか手のつけたことのないやつに深入りしそうだ ぐぐりちゅう これ普通にだと落ちるのが正常ってことなんかね...? >>424 https://msdn.microsoft.com/ja-jp/library/td1esda9.aspx
437 名前:デフォルトの名無しさん (ワッチョイ df7b-3cRu) mailto:sage [2017/02/15(水) 12:35:51.87 ID:LTs78uDW0.net] レジストリ弄ってワトソン出さない方法もあるらしいけどやった事ない
438 名前:デフォルトの名無しさん (スップ Sd72-a31+) mailto:sage [2017/02/15(水) 12:45:49.37 ID:7fF4cQx4d.net] >>429 これって初期設定だと実行継続みたいなのをぽちっとしないといけない それがデフォルトってことなんね なんか思っていた動作と異なる くそやろう...
439 名前:デフォルトの名無しさん (スップ Sd72-a31+) mailto:sage [2017/02/15(水) 14:54:33.30 ID:7fF4cQx4d.net] で....できない srz-zumix.blogspot.jp/2012/08/strcpys.html?m=1 これ参考にしてるんだけどそのままコピペだとできない 助けてクレメンス
440 名前:デフォルトの名無しさん (ワッチョイ df7b-Ry7I) mailto:sage [2017/02/15(水) 15:37:40.84 ID:LTs78uDW0.net] #include <string.h> #include <errno.h> void handler( const wchar_t * expression, const wchar_t * function, const wchar_t * file, unsigned int line, uintptr_t pReserved) { } int main() { char a[20]; _set_invalid_parameter_handler(handler); strcpy_s(a, 20, NULL); printf("%d\n", EINVAL == errno); }
441 名前:デフォルトの名無しさん (オッペケ Srf7-3u4T) mailto:sage [2017/02/15(水) 18:51:08.84 ID:rJwzLFnhr.net] >>418 スレ違いは去れよ
442 名前:デフォルトの名無しさん (ワッチョイ 0fd2-3yR0) mailto:sage [2017/02/15(水) 20:32:24.80 ID:tDlcUFQu0.net] >>431 何が起きてるのかわからないから助けようがない ブレークポイント張って動作は追った?
443 名前:デフォルトの名無しさん (ワッチョイ fb5f-YBZc) mailto:sage [2017/02/17(金) 16:55:38.65 ID:oBsnwbhT0.net] >>430 _s関数の設計思想がプログラマが想定してない状況で動作を継続しないだもの NULLが来るのが想定内だってんならデバッグ用の_set_invalid_parameter_handler()なんか使わず最初からstrcpy_s()を呼ぶな
444 名前:デフォルトの名無しさん (ワッチョイ 5f17-P9CU) [2017/02/18(土) 02:10:37.30 ID:BjwZuIbZ0.net] Electronic Artsの標準ライブラリEASTL https://github.com/electronicarts/EASTL 3.05.02 release ようやくunordered_set, unordered_map が追加された。
445 名前:デフォルトの名無しさん (オッペケ Sr9f-xmLK) mailto:sage [2017/02/18(土) 09:00:37.40 ID:GNecI7Ewr.net] 『Electronic Artsの標準ライブラリEASTL』 俺ライブラリのくせに「標準」付けるところが馬鹿っぽい 標準って日本語の意味も理解しない低能
446 名前:デフォルトの名無しさん (ワッチョイ 0f7b-LjcY) mailto:sage [2017/02/18(土) 09:10:35.91 ID:IbdRLC160.net] 「標準ライブラリ実装」なら満足?
447 名前:デフォルトの名無しさん (オッペケ Sr9f-xmLK) mailto:sage [2017/02/18(土) 11:10:10.00 ID:GNecI7Ewr.net] Electronic Artsによる標準ライブラリの一部分の実装 EASTL
448 名前:デフォルトの名無しさん (ワッチョイ 5fcc-UoBp) mailto:sage [2017/02/18(土) 14:17:54.25 ID:cCamoDUt0.net] STLのSはStandardだからな 英語出来ない馬鹿なのか
449 名前:デフォルトの名無しさん (アウアウカー Sa9f-LRhM) mailto:sage [2017/02/18(土) 17:51:18.18 ID:DE0SU//Ra.net] Sugoi Tsuyoi Library
450 名前:デフォルトの名無しさん (ワッチョイ 5b02-Z7AI) mailto:sage [2017/02/18(土) 18:20:17.46 ID:oLH7rESg0.net] サブセットのなにがいけないのか
451 名前:デフォルトの名無しさん (ワッチョイ fba6-eq+O) mailto:sage [2017/02/18(土) 19:49:22.55 ID:fWF8oK3d0.net] 処理系を作っているなら「STL実装」を名乗ってもいいの?
452 名前:デフォルトの名無しさん (ワッチョイ 0f7b-qzUy) [2017/02/18(土) 20:29:26.5
] [ここ壊れてます]
453 名前:8 ID:bU7vWvgF0.net mailto: 「Electronic Artsの標準」って言ってるだけで何の問題もないと思うが? Standardという言葉を必要以上に狭く解釈するほうがバカみたい [] [ここ壊れてます]
454 名前:デフォルトの名無しさん (ワッチョイ 0f5b-6x/Q) mailto:sage [2017/02/19(日) 09:55:36.66 ID:2DCCXMeS0.net] strstreamでwstringを使う方法はありますか?
455 名前:デフォルトの名無しさん (ワッチョイ 8bc9-xmLK) mailto:sage [2017/02/19(日) 09:59:54.67 ID:sJkQ60Iy0.net] はい。有ります
456 名前:デフォルトの名無しさん (ワッチョイ 8bc9-xmLK) mailto:sage [2017/02/19(日) 10:17:39.90 ID:sJkQ60Iy0.net] ちなみにこんな感じだろうたぶん https://ideone.com/JpKEZ7
457 名前:デフォルトの名無しさん (ワッチョイ 0f5b-6x/Q) mailto:sage [2017/02/19(日) 11:16:43.37 ID:2DCCXMeS0.net] それは(w)stringstreamではないですか? strstreamのヘッダもいらない気がします。 strstreamでwstringを利用したいのですが 独習C++のサンプルでもchar配列しか扱って ません。
458 名前:デフォルトの名無しさん (ワッチョイ 0f7b-LjcY) mailto:sage [2017/02/19(日) 11:50:16.48 ID:kiv7S6GK0.net] strstreamってdeprecatedでは
459 名前:デフォルトの名無しさん (ワッチョイ 0f5b-6x/Q) mailto:sage [2017/02/19(日) 12:02:45.47 ID:2DCCXMeS0.net] >>449 visual studioのヘルプ見たらそんな気がしました。 おとなしくwstringstream使っとくべきですかね。
460 名前:デフォルトの名無しさん (ワッチョイ 6bdc-89sP) mailto:sage [2017/02/19(日) 21:37:05.31 ID:XrGtgUCH0.net] Singletonでのthread終了時にjoinで固まる suzukit14.hateblo.jp/entry/2015/06/24/111000 これとまったく同じ問題に突き当たりました。 最後に書かれているように、detach()で確かに無事終了できますが、 なんかマズかったりしますか?
461 名前:デフォルトの名無しさん (オッペケ Sr9f-xmLK) mailto:sage [2017/02/19(日) 22:04:43.50 ID:s/Z6tyYFr.net] 良く読んでないけと 破棄されたm_endを参照してなんかうれしいの?
462 名前:デフォルトの名無しさん (ワッチョイ eb9a-XQTV) [2017/02/19(日) 22:07:24.99 ID:qRKd/jmw0.net] スレッドの終了を待たずにプロセスが終了しても問題ないならOK
463 名前:デフォルトの名無しさん (ワッチョイ fb7b-Mjmn) [2017/02/19(日) 22:15:23.67 ID:Av0JmT9x0.net] >>451 そのインスタンスのメンバーを使用するコードがdetachしたスレッド内にある場合はデストラクタが呼ばれた後にそのメンバーを参照して未定義動作になる可能性がある
464 名前:451 (ワッチョイ 6bdc-89sP) mailto:sage [2017/02/19(日) 22:22:05.77 ID:XrGtgUCH0.net] 皆さん、ご回答、ありがとうございます。 >>454 まさにそれと思しきクラッシュが終了時にランダムで発生することに気付きました(汗) detach()もjoin()もせずに終わろうとしたときに百発百中で出るのと同じ「R6010 -abort() has been called」というエラーです。 Sleep()でも呼んで十分に待てば、実用上は問題ないんでしょうけど、 こういう曖昧なコードは嫌いなので、なんとかキレイにスパッと終わりたいです・・・。 Singletonが適したクラスではあるのですが、 この問題をうまく裁けないようであれば、諦めて通常のクラスにすることを検討します。
465 名前:デフォルトの名無しさん (ワッチョイ fb7b-Mjmn) [2017/02/19(日) 22:32:17.29 ID:Av0JmT9x0.net] >>455 コンパイラは?MSVC2015使っててそんな問題に当たったことないんだけど どうしても回避できないなら(MSVC2012には無かったかもしれないけど)std::quick_exit使う事も検討してみたら?
466 名前:デフォルトの名無しさん (ワッチョイ eb9a-XQTV) [2017/02/19(日) 22:45:35.14 ID:qRKd/jmw0.net] 俺なら、pthread なり直接使って クリーンアップハンドラ登録する
467 名前:451 (ワッチョイ 6bdc-89sP) mailto:sage [2017/02/19(日) 23:08:15.96 ID:XrGtgUCH0.net] >>456 Visual Studio Express 2013 for Windows Desktop Update5 です。 stackoverflow.com/questions/10915233/stdthreadjoin-hangs-if-called-after-main-exits-when-using-vs2012-rc ここを見てると、どうも2015では直ってそうですね。 quick_exitのこと教えてくださってありがとうございます。 知りませんでした。 でも、VS2015に移行するのが一番キレイに解決するので、そうします。 これまで、特にVS2015に移行する理由がなかったので2013のままでしたが、 おかげさまで理由ができました。 ありがとうございました。
468 名前:451 (ワッチョイ 6bdc-89sP) mailto:sage [2017/02/20(月) 01:50:05.39 ID:1uwDjjWZ0.net] ところで、>>451 のサイトのコードですが、 m_end変数の型がstd::atomic<bool>となっています。 わざわざatomicクラスを使わなくても、 m_end = true; は通常のboolでもアトミック操作だからかまわないですよね? 何か意図があるのでしょうか?
469 名前:デフォルトの名無しさん (ワッチョイ dfc0-fRM8) mailto:sage [2017/02/20(月) 02:43:42.07 ID:kFvPCPcM0.net] コンパイラが省略するかもしれないから
470 名前:デフォルトの名無しさん (ワッチョイ 5f17-P9CU) mailto:sage [2017/02/20(月) 03:08:55.41 ID:n+W7/EeT0.net] volatile ではダメなん?
471 名前:デフォルトの名無しさん (ワッチョイ fb7b-Mjmn) [2017/02/20(月) 04:17:03.74 ID:8FjaGYLq0.net] >>461 わざわざ保証されてないものを使用したあなら好きにしたらいいんじゃない? タイミングが重要なものに使用したらすぐ破綻するけど。
472 名前:デフォルトの名無しさん (ワッチョイ cbdc-92cl) mailto:sage [2017/02/20(月) 06:33:50.28 ID:8HBU9+MH0.net] 大きな整数だと読み書き操作のアトミック性が保証されないから std::atomic を使わなきゃならん。 必要ないかも知れないけど、同じ書き方でboolでもlong longでも 正しく動くようにテンプレートを使った標準的な書式にしておく、 ってのがC++流と言えるのかな。 あと、std::atomic<bool>と書いてもboolを直に代入しても 実行時には同じ速度で動く(ようにatomicを実装する)から損はない、 というのもね。
473 名前:451 (ワッチョイ 6bdc-89sP) mailto:sage [2017/02/20(月) 19:43:56.16 ID:1uwDjjWZ0.net] ご回答、ありがとうございます。 >>463 >大きな整数だと読み書き操作のアトミック性が保証されない そうだったんですか! それはatomicが要りますね。 >実行時には同じ速度で動く(ようにatomicを実装する)から損はない オーバーヘッドがないのは素晴らしいですね。 気を付けます。 ありがとうございました。
474 名前:デフォルトの名無しさん (ワッチョイ 0f2b-eq+O) mailto:sage [2017/02/21(火) 07:47:04.43 ID:t35fjyuz0.net] >459 >何か意図があるのでしょうか? サイト書いた人間死んでるの? それとも生きてるの? 生きてるならなんでわざわざ赤の他人に他人の意図を聞くんだろうこの人 本人に直接聞けば一番早いんじゃないの そいつの意図なんてのは書かない限りそいつしか知らないし分からないじゃん
475 名前:デフォルトの名無しさん (ドコグロ MM7f-My/j) mailto:sage [2017/02/21(火) 08:17:30.11 ID:y0kzTLQNM.net] 終わった話になに頓珍漢な言いがかりつけてるんだよ w
476 名前:デフォルトの名無しさん (ササクッテロラ Sp9f-Aztl) mailto:sage [2017/02/21(火) 09:41:12.86 ID:yRuALuONp.net] お受験の季節だし、国語の時間が辛かったんだと思います 許してあげてください
477 名前:デフォルトの名無しさん (ワッチョイ 6bdc-89sP) mailto:sage [2017/02/22(水) 19:13:31.66 ID:M+n+vM/b0.net] 以下のようなマルチスレッドプログラムを書いたのですが、もっとエレガントに書くことはできないでしょうか? std::atomic<T>を使ったら可能でしょうか? ■メンバ変数 std::mutex m_Mtx; std::string m_str; ■生産者スレッド while( true ) { lock_guard<std::mutex> Lock( m_Mtx ); m_str += "何らかの文字列"; } ■消費者スレッド std::string str; { lock_guard<std::mutex> Lock( m_Mtx ); str = m_str; m_str.clear(); }
478 名前:デフォルトの名無しさん (ササクッテロラ Sp9f-Aztl) mailto:sage [2017/02/22(水) 20:12:00.06 ID:OuXxGo6Bp.net] それで必要十分だと思うよ stdがついたり付いてなかったり、変数が大文字始まりだったり小文字始まりだったりするのが気持ち悪いけど
479 名前:デフォルトの名無しさん (ワッチョイ fb34-wIi3) [2017/02/22(水) 20:31:27.26 ID:3B67WX1e0.net] >>468 強いて言うなら str.swap(m_str); かな。
480 名前:デフォルトの名無しさん (ワントンキン MM7f-Mjmn) [2017/02/22(水) 20:40:10.22 ID:W153DobNM.net]
481 名前:そんな動作が必要なプログラムを書いたことがないし、どんなケースで必用になるのか想像もつかないけど、その動作が正なのであるばそれでいいんじゃない? m_ って付いてるってことはメンバー関数なんだろうけどデストラクタどうするんだろうとか、色々気になる所はあるけど。 [] [ここ壊れてます]
482 名前:デフォルトの名無しさん (ワッチョイ 5b02-Z7AI) mailto:sage [2017/02/22(水) 21:09:30.45 ID:TTVI91Rf0.net] バックグラウンドで通信するならおおよそこんな感じになるんじゃないの
483 名前:468 (ワッチョイ 6bdc-89sP) mailto:sage [2017/02/22(水) 21:38:29.81 ID:M+n+vM/b0.net] >>470 ご回答、ありがとうございます。 >>472 その通りでございます。 >>470 なるほど! ということは、atomic<T>を使って ■メンバ変数 std::atomic<std::string> m_str; ■生産者スレッド while( true ) m_str += "何らかの文字列"; ■消費者スレッド std::string str; str.swap( m_str ); と、超エレガントにできそうですが、この場合、swap()でのアトミック性ってどうなるんでしょう??
484 名前:デフォルトの名無しさん (ワッチョイ fb34-wIi3) [2017/02/22(水) 21:46:47.39 ID:3B67WX1e0.net] >>473 心配なら m_str.swap(str); でいいんじゃね?
485 名前:468 (ワッチョイ 6bdc-89sP) mailto:sage [2017/02/22(水) 23:00:07.25 ID:M+n+vM/b0.net] >>474 あ、そうですね! それならより安心ですね。 テストしてみて問題なかったら、それでいきます! ありがとうございました。
486 名前:デフォルトの名無しさん (ワッチョイ 8acc-CoTN) mailto:sage [2017/02/23(木) 00:46:03.89 ID:+OueSnEu0.net] ハンガリアンキンモー
487 名前:デフォルトの名無しさん (ワッチョイ de5b-moPN) mailto:sage [2017/02/24(金) 08:16:42.09 ID:DyzPRDD50.net] 見たことないのですがポインタ(の 入った変数)を参照することって可能 ですか? int* &みたいなことです。
488 名前:デフォルトの名無しさん (ブーイモ MMc7-Ccab) mailto:sage [2017/02/24(金) 09:58:19.90 ID:bBhQmgr7M.net] >>477 出来ます。テンプレートで使われるのが一番多いかな? func(T& dst)に対してint*を渡すみたいなパターン
489 名前:デフォルトの名無しさん (アウアウカー Saeb-uNyc) mailto:sage [2017/02/24(金) 10:28:09.00 ID:e/BP7pNwa.net] それは初心者用質問スレで訊くのが合っていますよ
490 名前:デフォルトの名無しさん (ワッチョイ 8a3c-/RgJ) mailto:sage [2017/02/24(金) 11:40:07.36 ID:9xRtAprE0.net] auto&&とint&&は機能的に別物と考えていいのかな。 int&&は右辺値参照を実現する記法で、auto&&は参照の参照を実現するための仕組みという認識なんだけど。
491 名前:デフォルトの名無しさん (ワッチョイ 8acc-CoTN) mailto:sage [2017/02/24(金) 12:43:18.76 ID:quEFnRbB0.net] 人に聞く前になぜ自分でやってみようとは思わないの?
492 名前:デフォルトの名無しさん (スップ Sd4a-36q6) [2017/02/24(金) 13:15:08.70 ID:u1ntmSSgd.net] 試してもその環境では動くということしか確かめられないから
493 名前:デフォルトの名無しさん (ワッチョイ 7fc9-2lVT) mailto:sage [2017/02/24(金) 22:09:09.79 ID:OddQnmIq0.net] 実現するのが目的ではないだろうけど auto &&のauto部分がX &に解決されるのはどうも気持ち悪い
494 名前: ◆QZaw55cn4c (ワッチョイ 4613-8lb6) mailto:sage [2017/02/24(金) 22:22:18.18 ID:4ewDjGBZ0.net] >>477 できる,二重ポインタより分かりやすい
495 名前:デフォルトの名無しさん (ワッチョイ 1f30-GZNV) mailto:sage [2017/02/25(土) 00:02:24.64 ID:5D288ePc0.net] >>480 テンプレートの型パラメータと普通の型の関係と同じようなもの 機能的に完全に別物というより一段上に追加機能のレイヤーがあるかないかの違い
496 名前:デフォルトの名無しさん (ワッチョイ 8acc-CoTN) mailto:sage [2017/02/25(土) 00:13:15.17 ID:Bto43eGs0.net] まあautoの部分はXにもX*にもX&にも解釈可能だからトーシローは錯覚する罠
497 名前:デフォルトの名無しさん (ワッチョイ 8a3c-/RgJ) mailto:sage [2017/02/25(土) 12:29:14.82 ID:xXEZYycv0.net] auto&&はreference collapsingっていう仕組みらしいけど江添氏はこの機能の解説してないんだよね。 だから右辺値参照の仕組みと透過性があるものなのだと思ってた。 右辺値参照の仕組みを理解すればおのずと理解できるもんだと思ってた。
498 名前:デフォルトの名無しさん (ワッチョイ 63a6-8lb6) mailto:sage [2017/02/25(土) 13:33:16.56 ID:THbYlaQi0.net] これとかじゃなく? https://cpplover.blogspot.jp/2014/09/c14-decltypeauto.html
499 名前:デフォルトの名無しさん (アウアウカー Saeb-uNyc) mailto:sage [2017/02/25(土) 18:59:53.13 ID:A0aZ5Z9Sa.net] 江添はそう言ってる?
500 名前:デフォルトの名無しさん (ワッチョイ 7fc9-2lVT) mailto:sage [2017/02/25(土) 21:48:53.39 ID:r3+UW6Ch0.net] 江添の説明はこれだな 『テンプレート実引数推定のルールで型推定が行われる』 『できるだけ普通のプログラマーの常識に合わせるために、とても複雑になっている』 以上
501 名前:デフォルトの名無しさん (ワッチョイ 0a7f-orIt) mailto:sage [2017/02/27(月) 14:18:25.09 ID:XaQXd7Ck0.net] libc++ の挙動にバグっぽいものを見付けたんで cfe-dev に投げたんですが ttp://lists.llvm.org/pipermail/cfe-dev/2017-February/052807.html 応答がありません…もっとふさわしい場所ってあるんですかね? っていうか std::is_abstract が純粋仮想関数入りのクラステンプレートに対して false 返すのって規格に照らしてどうなんでしょう?
502 名前:デフォルトの名無しさん (オッペケ Sr23-2lVT) mailto:sage [2017/02/27(月) 18:50:50.34 ID:mrZfm/tmr.net] テンプレートクラスならともかくクラステンプレートならコンパイルエラーにならないとおかしい ちなみにただのバグにしか見えない
503 名前:デフォルトの名無しさん (ワッチョイ 0a7f-orIt) mailto:sage [2017/02/27(月) 20:02:23.96 ID:XaQXd7Ck0.net] なるほど、テンプレートクラスと言えばいいんですね。 適切な言葉をちゃんと知りませんでした。
504 名前:デフォルトの名無しさん (ワッチョイ a37b-mxZJ) [2017/02/27(月) 20:55:00.96 ID:Of/Kbntx0.net] https://bugs.llvm.org// バグ報告はここじゃね?
505 名前:デフォルトの名無しさん (ワッチョイ 7fc9-2lVT) mailto:sage [2017/02/27(月) 21:11:47.21 ID:4UiY0/x/0.net] libc++ではなくてclangが腐ってるようにも見える melpon.org/wandbox/permlink/GCDP7CU2HzUOMMML
506 名前:デフォルトの名無しさん (ワッチョイ 0a7f-orIt) mailto:sage [2017/02/27(月) 21:22:12.75 ID:XaQXd7Ck0.net] >>494 New user self-registration is currently disabled らしいのでどうせメールするならメーリスでいいか、 というのと規格的にどうなのかよくわからなかったので…
507 名前:デフォルトの名無しさん (ワッチョイ 0a7f-orIt) mailto:sage [2017/02/27(月) 21:25:24.26 ID:XaQXd7Ck0.net] >>495 g++ で libc++ を使わせても同じ挙動だったのですが どうなってるんでしょうね?
508 名前:デフォルトの名無しさん (スプッッ Sd33-moPN) mailto:sage [2017/02/28(火) 09:18:02.99 ID:cUxO9p4sd.net] long→short 警告でない size_t→int 警告出る 警告出たり出なかったりの違いってなんなんだ? 上記二つとも出ると思っていたのだが
509 名前:デフォルトの名無しさん (スップ Sd4a-36q6) [2017/02/28(火) 09:25:14.27 ID:+UqvplX+d.net] unsignedでは
510 名前:デフォルトの名無しさん (ワッチョイ 8acc-CoTN) mailto:sage [2017/02/28(火) 09:41:23.40 ID:Mx4bsJ8G0.net] 警告を出すか出さないかはコンパイラのオプションで自由に選べる
511 名前:デフォルトの名無しさん (スプッッ Sd33-moPN) mailto:sage [2017/02/28(火) 11:50:09.20 ID:cUxO9p4sd.net] >>499 それだと思ったのだけどsize_tでも出ないところと出るところがある なんなんだこれ
512 名前:デフォルトの名無しさん (ワッチョイ 466c-fGBt) mailto:sage [2017/02/28(火) 13:37:18.52 ID:XuG6C30R0.net] template<typename T> T f(const T& x){return x;} template <int N> struct S{ int a[N];} template<>template<int N> S<N> f(const S<N>& x){S<N> r; r.a[0] = x.a[0]; return r;} こんな感じのコードで Extraneous template parameter list in template specialization って警告されるんですけど何が問題でどう書くのが正解なんですかね?
513 名前:デフォルトの名無しさん (ワッチョイ 8acc-CoTN) mailto:sage [2017/02/28(火) 13:40:56.38 ID:Mx4bsJ8G0.net] >>502 特化テンプレートを使う場合は型や値を明記しなけりゃならない この場合はNの数値を明記しなけりゃいけない
514 名前:デフォルトの名無しさん (ワッチョイ 466c-fGBt) mailto:sage [2017/02/28(火) 13:45:44.39 ID:XuG6C30R0.net] ああなるほど・・・ Nが多いからテンプレートしてるのに手間ですな・・・
515 名前:デフォルトの名無しさん (ワントンキン MMfa-cxDF) mailto:sage [2017/02/28(火) 14:36:02.06 ID:t3AtpORvM.net] 出先だから書いてないけどvaliadic templateと再帰で全部インスタンス化できそうだけど
516 名前:デフォルトの名無しさん (ワッチョイ 1f30-GZNV) mailto:sage [2017/02/28(火) 18:49:47.90 ID:jvds/XNw0.net] 最初のfの特化じゃなくて別のテンプレートのfでオーバーロードするだけ template<typename T> T f(const T& x){return x;} template<int N> struct S{ int a[N];}; template<int N> S<N> f(const S<N>& x) { S<N> r; r.a[0] = x.a[0]; return r; }
517 名前:デフォルトの名無しさん (オッペケ Sr23-2lVT) mailto:sage [2017/03/01(水) 12:26:23.09 ID:2EZ/mUsgr.net] >>501 もしかして定数の値が欠損していない場合では constexpr size_t v1 = 32767; int32_t v2 {v1}; //たぶん警告は出ない
518 名前:デフォルトの名無しさん (ワッチョイ 1f90-BJNc) mailto:sage [2017/03/02(木) 19:18:35.64 ID:x/1yO3Ie0.net] ++演算子で延々とループできるリングバッファみたいなコンテナってあると便利だと思うんですが STLに入っていないのはなんでですか?
519 名前:デフォルトの名無しさん (ワッチョイ 6b02-2BvX) mailto:sage [2017/03/02(木) 19:23:17.02 ID:6rzvDmku0.net] 提案されていたけどまだ入ってない
520 名前:デフォルトの名無しさん (ワッチョイ 6b02-2BvX) mailto:sage [2017/03/02(木) 20:02:04.86 ID:6rzvDmku0.net] ごめん違う奴だった勘違いしてた
521 名前:デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci) mailto:sage [2017/03/03(金) 00:07:16.62 ID:TsTyuoGu0.net] class Fooに対して演算子(例えば「|=」)のオーバーロードを使って Foo& operator|=(const Foo& rhs) { (*thisとrhsの演算結果を*thisに入れる) ; return *this; } とか定義する例を見る気がしますが、 こういうパターン(演算結果を返すと共に*thisの値が破壊される)なメソッドを演算子のオーバーロードでなく名前で実装するとしたら get〜とすべき?それともset〜が普通?
522 名前:デフォルトの名無しさん (ワッチョイ ef6c-HgeV) mailto:sage [2017/03/03(金) 00:10:55.24 ID:MwnP4WDg0.net] 普通setじゃない?
523 名前:デフォルトの名無しさん (ワッチョイ 9fed-OGW1) mailto:sage [2017/03/03(金) 00:15:24.61 ID:/S0wuqbS0.net] setの戻り値にsetされた値が返ってきても違和感ないけど、getで中身変わったらキレる 質問からはズレるけど、演算処理が入るならupdateとかその辺のどちらでもない名前にしとくのが良いと思うなあ
524 名前:デフォルトの名無しさん (ワッチョイ 1fcc-+LoG) mailto:sage [2017/03/03(金) 01:57:52.71 ID:gLymaIrQ0.net] 無いものは自分で作ればいいのよ パンがなければお菓子を食べればいいのよ
525 名前:デフォルトの名無しさん (ワッチョイ eb7b-2BvX) mailto:sage [2017/03/03(金) 02:12:38.68 ID:ApTpm6Xd0.net] 先輩 お金がないならATMに行けばいいじゃないですかぁ
526 名前:デフォルトの名無しさん (ワッチョイ 5fd4-CqFM) mailto:sage [2017/03/03(金) 05:32:35.45 ID:v1le7QT40.net] その|=の演算を意味する名前だろ。
527 名前:デフォルトの名無しさん (ワッチョイ 0f24-T7IB) [2017/03/03(金) 09:23:46.53 ID:EiwPmmlf0.net] ビットORでsetというと「ビットを立てる」という意味か? だとしたらビットANDでreset、ビットXORでflipか
528 名前:デフォルトの名無しさん (ササクッテロル Spef-OGW1) mailto:sage [2017/03/03(金) 09:35:11.95 ID:CN7XccVQp.net] ビット演算はただの例でしょ
529 名前:デフォルトの名無しさん (ワッチョイ 0f24-T7IB) [2017/03/03(金) 09:53:32.07 ID:EiwPmmlf0.net] 副作用のある演算子なら+=や--もあるわけだが それもひっくるめて一概にsetかgetかと問うのに例が|=なのか
530 名前:デフォルトの名無しさん (ワッチョイ abd9-8nUV) mailto:sage [2017/03/03(金) 11:08:49.61 ID:mnS2IoUK0.net] >>513 カウンタとかオートインクリメントする奴があるだろ もっとカルシウム取った方が良いぞ
531 名前:デフォルトの名無しさん (ワッチョイ 8b7b-ERAc) [2017/03/03(金) 11:52:47.71 ID:8SEA7Mtt0.net] カウンターのインクリメントにgetなんて名前付けないでしょ
532 名前:デフォルトの名無しさん (スプッッ Sdef-cA0b) [2017/03/03(金) 11:56:49.79 ID:LaI4btVTd.net] GetNextFrameなのに内部で動画のデコードが行われるミドルウェアがあった
533 名前:デフォルトの名無しさん (ドコグロ MM2f-Y1yA) mailto:sage [2017/03/03(金) 12:46:37.01 ID:hxiWJWmXM.net] >>520 それカウンタのインクリメントがメインじゃないだろ (メインの機能なら単なるバカ) 他にも取得したデータをキャッシュしとくとかでオブジェクトの状態を変える奴はある >>522 デコードしたフレームが取得できるとかじゃなくて?
534 名前:デフォルトの名無しさん (ワッチョイ 1f7f-RJLO) mailto:sage [2017/03/03(金) 13:00:47.12 ID:qCQIHM4i0.net] >>522 PopNextFrameにしろって文句つけたら
535 名前:デフォルトの名無しさん (スプッッ Sdef-cA0b) [2017/03/03(金) 13:15:03.93 ID:LaI4btVTd.net] >>523 フレーム番号を取得する機能とデコードの機能が一つになってる
536 名前:デフォルトの名無しさん (ワッチョイ 1f7d-M3Ci) [2017/03/03(金) 13:33:04.16 ID:UcAC+2mM0.net] >>514 マリー・アントワネットのこの言葉は、事実ではなくて、 『マリー・アントワネット』を書いたシュテファン・ツバイクの創作 だという説もあるね
537 名前:デフォルトの名無しさん (ワッチョイ cb3c-m4jB) [2017/03/03(金) 14:59:24.75 ID:BCfaURI80.net] ロベールのC++入門講座持っている人に質問 p.537一番下のテンポラリオブジェクトの寿命と p.543のテンポラリオブジェクトの寿命の違いがいまいちよくわからないんだけど もう少し詳しく解説してくれませんか?
538 名前:デフォルトの名無しさん (ドコグロ MM2f-Y1yA) mailto:sage [2017/03/03(金) 19:06:53.97 ID:hxiWJWmXM.net] >>525 そのまとめかたがいいかどうかは知らんけど名前は特に違和感ないけどな
539 名前:511 (ワッチョイ 5b8b-M3Ci) mailto:sage [2017/03/03(金) 20:51:41.34 ID:TsTyuoGu0.net] レスdクス >>512 なるほど言われてみればそんな気がする >>513 確かに言われてみればそうかもしれない >>516 ごもっとも言われてみればその通りに思える もとの「|=」は和集合を求める演算のつもりだったので setUnionという名前にした、
540 名前:デフォルトの名無しさん (ササクッテロル Spef-OGW1) mailto:sage [2017/03/03(金) 22:11:43.72 ID:CN7XccVQp.net] ちなみにJavaでよく使われるByteStreamのgetシリーズは値を読み出しつつ参照位置を進めるメソッドになっている 個人的にはreadあたりに改名しろやと思わなくもないけど、getでしれっと中身が変わるのは稀によくある つまりC++のconstメンバ関数は素晴らしい
541 名前:デフォルトの名無しさん (ササクッテロル Spef-OGW1) mailto:sage [2017/03/03(金) 22:13:19.97 ID:CN7XccVQp.net] ByteBufferだわ
542 名前:デフォルトの名無しさん (ワッチョイ 5b30-EN75) mailto:sage [2017/03/04(土) 00:38:16.02 ID:gb3ZxOZZ0.net] それは設計の視点・方向性の違い コンテナ/ホルダーとみるならgetで状態が変わらない方が自然だけど ジェネレータとみるならgetで値を返しつつ状態が変わる(次の値の用意をする)のも自然だ
543 名前:デフォルトの名無しさん (ワッチョイ 0f24-T7IB) [2017/03/04(土) 08:01:38.91 ID:NPMNhlmj0.net] 読み取り動作と進行動作は本来別な話だが I/Oを進行なしで読み取らせようとすると キャッシュせにゃあかんのでそこは副作用となる C++にはそのためにmutableがあるので問題にはならん ただしポートを叩くのとアクセス管理は別な問題なので 1つのクラスに一緒くたに突っ込む設計に俺は反対
544 名前:デフォルトの名無しさん (オッペケ Sref-n7ZK) mailto:sage [2017/03/04(土) 08:40:11.52 ID:sD1+OZIDr.net] 珍妙な持論だ だがiostreamの>>やstdioのfreadやソケットのrecvも 読み取り命令と進行命令を別にすべきという考えなら一貫性はある
545 名前:デフォルトの名無しさん (ワッチョイ 1f3c-Y1yA) mailto:sage [2017/03/04(土) 08:45:52.42 ID:IfQ9fk2A0.net] >>532 > コンテナ/ホルダーとみるならgetで状態が変わらない方が自然だけど そう言うのは Peek でいいかと
546 名前:デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci) mailto:sage [2017/03/04(土) 09:59:29.30 ID:JHoGQxOg0.net] I/Oに近い低水準レイヤ────で読み取りと進行が不可分なケースは 物理法則からくる制約と処理効率の兼ね合いからそうしているはずで 読み取り+進行、という操作に業界固有の用語が存在はずだから その用語を使えば良いんじゃないの いったんメモリに乗ってしまったデータは使われ方が1種類で決まりきっているとかいった 特殊なケースを除き、取得と変更わ分けるのが正義 この領域において不必要なオブジェクトの変更を放置するのは チューリングマシン
547 名前:の計算モデルで物事を初期化しないプログラマーレベル [] [ここ壊れてます]
548 名前:デフォルトの名無しさん (ワッチョイ 1f3c-Y1yA) mailto:sage [2017/03/04(土) 10:39:59.31 ID:IfQ9fk2A0.net] ちゅーりんぐましんしってるおれすげーくん w
549 名前:デフォルトの名無しさん (ワッチョイ ab98-T7IB) mailto:sage [2017/03/04(土) 11:12:56.99 ID:+pEijc2g0.net] 読みにくい日本語から漂うアスペ感
550 名前:デフォルトの名無しさん (ワッチョイ 3b0e-RhaL) mailto:sage [2017/03/04(土) 12:55:27.75 ID:r8uNi5/x0.net] getc
551 名前:デフォルトの名無しさん (ワッチョイ bb02-5QEK) mailto:sage [2017/03/04(土) 22:54:48.79 ID:zKraxpcF0.net] デフォルトコンストラクタを持たないメンバーの初期化をしたいのだけど、 初期化が複雑だから初期化リストに含めたくない場合ってみんなどうしてるの?unique_ptrに変更する?
552 名前:デフォルトの名無しさん (ワンミングク MM3f-QRNW) mailto:sage [2017/03/05(日) 00:17:33.91 ID:n48qZSY3M.net] >>540 builder patternを使う
553 名前:デフォルトの名無しさん (ワッチョイ 8b7b-ERAc) [2017/03/05(日) 00:27:52.82 ID:qOQ2PN1U0.net] >>540 複雑ってのがよくわからんのだけど、例えばどんな? 単に引数を求める形に変換する必要があるとかならヘルパ関数作るだけ
554 名前:デフォルトの名無しさん (ワッチョイ 9fc1-OGW1) mailto:sage [2017/03/05(日) 01:30:40.03 ID:gIuIuvFQ0.net] >>541 まぁこれ
555 名前:デフォルトの名無しさん (ワッチョイ bb02-5QEK) mailto:sage [2017/03/05(日) 09:53:23.05 ID:Ur8kOvvv0.net] 説明不足でした。すみません。 class Car { . Engine e; //<デフォルトコンストラクタをもたない }; みたいなクラスでeを初期化するのに . 適切なトルクの計算; . 適切な燃費の計算; . e = Engine(トルク, 燃費); とかしないといけなかったら、 Car : e(トルク, 燃費) {}みたいに初期化するのは難しいよね? みなはどうしてるの?
556 名前:デフォルトの名無しさん (ワッチョイ 3b0e-RhaL) mailto:sage [2017/03/05(日) 10:36:02.63 ID:2RIrBifF0.net] 適切なトルクの計算や、適切な燃費の計算なんて処理はそのクラスのコンストラクタ以外じゃ使わないような特殊なものなの? それはCarが計算すべきものなの? 別の関数でも用意して、Carのコンストラクタにエンジンの初期化情報を渡させるような作り方をするのが普通じゃね。
557 名前:デフォルトの名無しさん (ワッチョイ 1fcc-+LoG) mailto:sage [2017/03/05(日) 10:38:36.22 ID:X9OstEVD0.net] Engineクラスに別途Initialize()メソッドを持たせるだけ 無理にコンストラクタで全部やろうとする設計がバカっぽい
558 名前:デフォルトの名無しさん (オッペケ Sref-n7ZK) mailto:sage [2017/03/05(日) 10:58:54.48 ID:w6jz+T9vr.net] >>544 が説明不足なんじゃなくて ビルダーパターンと言う言葉を覚えて レスも良く読まずに単語レベルで反応したアホがいるだけ
559 名前:デフォルトの名無しさん (ワッチョイ 9fc1-OGW1) mailto:sage [2017/03/05(日) 11:13:35.88 ID:gIuIuvFQ0.net] Engineにコピーコンストラクタかムーブコンストラクタ作って、CarにEngineを受け取るコンストラクタを作る Initializeメソッド付けるのは「オブジェクトを作ったら必ずInitializeを呼ぶ」ってルールを守らなきゃ使えないクラスになるから好み分かれると思う
560 名前:デフォルトの名無しさん (オッペケ Sref-n7ZK) mailto:sage [2017/03/05(日) 11:45:46.07 ID:w6jz+T9vr.net] デフォルトコンストラクターを作ることがはばかられる質問者は ムーブコンストラクターを作ることができない可能性がある という発想には至らなかったようだ
561 名前:デフォルトの名無しさん (ワッチョイ 1f59-NqFr) [2017/03/05(日) 11:55:22.78 ID:69Hgyfek0.net] ラムダ式でやろう class Car{ t toruku{ 100 }; n nenpi{ 200 }; Engine e{ [](auto&& toruku, auto&& nenpi){ return { toruku * 2, nenpi * 3 }; }( this->toruku, this->nenpi ) }; };
562 名前:デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci) mailto:sage [2017/03/05(日) 11:55:25.99 ID:uSZUgTTE0.net] >>546 その設計はEngineの宣言(Engiine e;)からe.Initialize()呼び出しまでの間を持たせるために、 Engineに無理矢理デフォルトコンストラクタを付ける設計変更を要す、 仮にInitialize()をeではなくファクトリメソッドとするなら >>540 にてすでに >unique_ptrに変更する? としてすでに言及されているパターンと実質同じなのでは…
563 名前:デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci) mailto:sage [2017/03/05(日) 11:58:09.92 ID:uSZUgTTE0.net] >>548 横だがおk
564 名前:デフォルトの名無しさん (ワッチョイ 9fc1-OGW1) mailto:sage [2017/03/05(日) 12:18:26.47 ID:gIuIuvFQ0.net] >>549 デフォルトコンストラクタが作れないケースとムーブ
565 名前:(コピー)コンストラクタが作れないケースは全く違うと思うけど、どうしてそんな可能性があるって発想に至ったの? [] [ここ壊れてます]
566 名前:デフォルトの名無しさん (ワンミングク MM3f-QRNW) mailto:sage [2017/03/05(日) 12:23:52.28 ID:h33ckUPTM.net] 俺はいつもコンストラクタは デフォルトコンストラクタ(必要に応じて) コピコン、ムブコン メンバをすべて受け取るコンストラクタ しか作らんけどなぁ メンバを作るのが少しでもややこしければstaticなcreateみたいなの作ってそこでメンバ作る
567 名前:デフォルトの名無しさん (ワンミングク MM3f-QRNW) mailto:sage [2017/03/05(日) 12:26:06.75 ID:h33ckUPTM.net] あと、ポインタで持つのはポリモーフィズムを期待するときだけだわ C++でnullにしておきたいからポインタにするってなんかへんじゃね? 使うとき毎回nullチェックするポリシーも一緒に維持しないといけなさそう
568 名前:デフォルトの名無しさん (ワッチョイ 1f3c-Y1yA) mailto:sage [2017/03/05(日) 12:49:35.40 ID:f7+gl1ia0.net] >>553 違うから可能性がない とでも言うのか? そのクラスは触れないだろうな って考えるのが普通だと思うが
569 名前:デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci) mailto:sage [2017/03/05(日) 13:05:22.78 ID:uSZUgTTE0.net] >>544 の >eを初期化するのに >. 適切なトルクの計算; >. 適切な燃費の計算; >. e = Engine(トルク, 燃費); >とかしないといけなかった がデフォルトコンストラクタの追加が困難な理由を表してゐる、 次は>>566 がコピーコンストラクタやムーブコンストラクタの追加が困難な理由を説明する番なのでは…
570 名前:デフォルトの名無しさん (ワッチョイ 9fc1-OGW1) mailto:sage [2017/03/05(日) 13:18:33.58 ID:gIuIuvFQ0.net] どこの世界の普通だそれ… Engineが仕事上触れないなら諦めてポインタで持つしか無いんじゃね Carの初期化時点(コンストラクタ呼び出し時点)ではEngineは初期化するための情報が無いんだから、コンストラクタの中かInitialize関数かで後から初期化するしか無いでしょ >>550 のラムダ式が使えればそれでも出来そうに見えるけど、initializer_listってこんな使い方できたっけ?
571 名前:デフォルトの名無しさん (ワッチョイ 8b7b-ERAc) [2017/03/05(日) 13:39:08.47 ID:qOQ2PN1U0.net] class Car{ static double 燃費計算(); static double トルク計算(); Engine e; public: Car():e(トルク計算(),燃費計算()){} }; これだけの話じゃねえの?
572 名前:デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci) mailto:sage [2017/03/05(日) 13:41:57.26 ID:uSZUgTTE0.net] >>559 はCarクラスにエンジンの詳細(燃費計算()とかトルク計算())を含める設計に何の疑問も抱かないのか…
573 名前:デフォルトの名無しさん (ササクッテロリ Spef-OGW1) mailto:sage [2017/03/05(日) 13:44:52.75 ID:rDGU9DZ0p.net] >>559 Engineクラスを触らない前提ならこれでいいな
574 名前:デフォルトの名無しさん (ワッチョイ 8b7b-ERAc) [2017/03/05(日) 13:44:54.60 ID:qOQ2PN1U0.net] >>560 例えでしかないんだから細かいところにつっこみ入れてもしょうがないだろ?
575 名前:デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci) mailto:sage [2017/03/05(日) 13:47:42.42 ID:uSZUgTTE0.net] Carクラスにstaticメソッドでエンジンの詳細を持たせる結果、 >>561 が指摘するようにCarクラスのエンジン換装を不可能にしておいて 「細かいところ」とのたまう神経の図太さは そのうち大成するやつかもわからんね…
576 名前:デフォルトの名無しさん (スププ Sd3f-OGW1) [2017/03/05(日) 14:06:10.31 ID:HN9/KcX+d.net] CD-R
577 名前:デフォルトの名無しさん (ワッチョイ 1f3c-Y1yA) mailto:sage [2017/03/05(日) 14:16:16.25 ID:f7+gl1ia0.net] >>557 頭大丈夫? 初期値が与えられていない状態にするって言うディフォルトコンストラクタなんていくらでもあるぞ そんなのはディフォルトコンストラクタが作れない理由になんてなってない
578 名前:デフォルトの名無しさん (ササクッテロリ Spef-OGW1) mailto:sage [2017/03/05(日) 14:25:52.76 ID:rDGU9DZ0p.net] 設計上の理由とか仕事の分担上の理由とか工数的な理由とか、その時々で選択される結果は違うから色んな案が出るのは良いと思うんだけどさ 全く案出さないでひたすら回答にケチ付けてるだけの奴は何なのよ
579 名前:デフォルトの名無しさん (ワッチョイ ef1d-NqFr) mailto:sage [2017/03/05(日) 16:05:02.59 ID:35hcvBBa0.net] このスレッドでいいのかどうかわからないのですが、 皆さんのお知恵を拝借させてください。 当方自作PCにてWindows10 Pro 64bit環境を使用しておりますが、 PCゲームでWorld of Warshipsというゲームをやっています。 ところが、先月半ばからCPUに過度の負荷がかかるようになり、 原因をいろいろと調べていたところ、起動中のCPUプロセスを詳細に調べることになり、 Process Explorerというソフトでゲーム起動中のプロセスを詳しく見てみたんですが、 動作中に「MSVCR110.dll」というファイルへのアクセスが集中し、同じプロセスが5つ以上、 それも1つにつきCPU占有率5%以上使う状態なんです。 正常稼働時↓ www.dotup.org/uploda/www.dotup.org1176183.jpg 以上稼働時↓ www.dotup.org/uploda/www.dotup.org1176184.jpg www.dotup.org/uploda/www.dotup.org1176185.jpg 同じゲームをプレイしているWin7使用中の友人のPCには、 そもそもこの「MSVCR110.dll」というファイル自体が出てきませんでした。 これはOS標準搭載以外のMS製アプリが一つも入ってないからだと考えられ、 尚且つ、名前からしてVisual C++関連のファイルだと思われます。 なぜこれだけ負荷がかかるようになってしまうのか、 どなたかこの状況をご理解頂ける方いらっしゃるでしょうか? ご意見をお伺いできれば幸いです。 よろしくお願いします。
580 名前:デフォルトの名無しさん (ワッチョイ 9fc1-OGW1) mailto:sage [2017/03/05(日) 16:28:50.51 ID:gIuIuvFQ0.net] C++ってキーワードでここに来たんだと思うけど、残念ながらスレ違い、ゲームの本スレとかで聞くのが良いんじゃないか 一応エスパーで回答するなら、セキュリティソフトに邪魔されて負荷上がってるってのが考えられるから、一旦セキュリティソフトを止めるなり例外設定するなりして試してみては
581 名前:デフォルトの名無しさん (ワッチョイ ef1d-NqFr) mailto:sage [2017/03/05(日) 18:38:44.74 ID:35hcvBBa0.net] >>568 スンマセン、ゲーム本スレと質問スレで書き込んだら 「スレ違い。自作板のWindowsスレかC++スレ行け」と言われたとです(´・ω・`)
582 名前:デフォルトの名無しさん (ワッチョイ ab7b-8nUV) mailto:sage [2017/03/05(日) 19:42:29.47 ID:hQyyoOdR0.net] >>569 ローカルルールくらい読みなさい ここはプログラムを作る人のための板 プログラムを作る人になりたいのなら、まず本屋に行って入門書かって自習してから出直しなさい
583 名前:デフォルトの名無しさん (ワッチョイ bb22-jbjN) mailto:sage [2017/03/05(日) 20:40:15.08 ID:N295BQKw0.net] >>567 visual c++を動かすためのランタイムだからそれ自体が原因ではないと思う
584 名前:デフォルトの名無しさん (ワッチョイ 6bf2-Guy/) [2017/03/05(日) 21:59:02.84 ID:89WGHivw0.net] 署名んとこ見る限り自分ところでカスタマイズしたRuntimeDLL使ってるのか? 公式フォーラムで聞くか直接開発に問い合わせた方がいいんじゃね?普通に考えて
585 名前:デフォルトの名無しさん (ワッチョイ dbc9-n7ZK) mailto:sage [2017/03/05(日) 22:58:25.66 ID:9n7ykkeL0.net] >自分ところでカスタマイズしたRuntimeDLL 普通に考えるとACCSに通報ではないのか
586 名前:デフォルトの名無しさん (ワッチョイ 1f7f-RJLO) mailto:sage [2017/03/06(月) 02:22:12.19 ID:sc7bChPJ0.net] ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0352r1.pdf に "An implementation using Clang is being worked on." ってあるけど どこにおいてあるのん?使いたくて震える
587 名前:デフォルトの名無しさん (ワッチョイ 1f7f-RJLO) mailto:sage [2017/03/06(月) 02:42:26.15 ID:sc7bChPJ0.net] ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0352r0.pdf の方に書いてあったのね……スミマセソ
588 名前:デフォルトの名無しさん (スップ Sd3f-cA0b) [2017/03/06(月) 17:42:12.10 ID:/kAc8Ta7d.net] std::mt19937 r(?); std::uniform_int_distribution<> d(0, 100); for(int i=0;i<100;++i){ d(r); } としないと正しく分布しないですか? std::mt19937 r(?); for(int i=0;i<100;++i){ std::uniform_int_distribution<> d(0, 100); d(r); } これでは駄目ですか?
589 名前:デフォルトの名無しさん (ワッチョイ 5fd4-NqFr) mailto:sage [2017/03/06(月) 19:02:57.23 ID:qCc5lDaQ0.net] どっちでもいいんじゃね
590 名前:デフォルトの名無しさん (ブーイモ MMaf-5QEK) mailto:sage [2017/03/06(月) 20:41:36.90 ID:l2uOsbFVM.net] 仕様読んでないけど擬似乱数列じゃ毎回同じ値がかえるんじゃないの?
591 名前:デフォルトの名無しさん (ブーイモ MMaf-5QEK) mailto:sage [2017/03/06(月) 20:43:46.97 ID:l2uOsbFVM.net] おおっと、乱数生成器自体を渡してるのか。失礼しました
592 名前:デフォルトの名無しさん (ワッチョイ 0f24-T7IB) [2017/03/06(月) 21:06:44.06 ID:DwMqYVii0.net] あふぉ
593 名前:デフォルトの名無しさん (ワッチョイ 5b30-EN75) mailto:sage [2017/03/06(月) 22:21:57.67 ID:CDqSwP280.net] >>576 distribution自体も値を返すごとに変化する内部状態を持ち 同じパラメータで構築されたものは同じ内部状態から始まるという規格の意味を考えると 一般論としては下の方はダメだろう
594 名前:デフォルトの名無しさん (オッペケ Sref-n7ZK) mailto:sage [2017/03/06(月) 22:35:23.34 ID:AKQMS70er.net] >同じパラメータで構築されたものは同じ内部状態から始まる distributionがそんな仕様なら むしろ後者の方が望ましくね?
595 名前:デフォルトの名無しさん (ワッチョイ 8b7b-ERAc) [2017/03/06(月) 22:46:29.85 ID:k6KUwGnB0.net] コンストラクタで渡した範囲を使わず引数に渡した範囲を使うオーバーロードもあるし、distributionに使わなかったランダムビット値とかの値を残してたら引数で毎回random_engine渡す意義が薄れてきちゃう気がするよね
596 名前:デフォルトの名無しさん (ワッチョイ cb3c-m4jB) [2017/03/07(火) 15:47:09.58 ID:3Q65RUMW0.net] typedef int* intPtr; const intPtr hoge; としたとき const int* hogeではなくint* const hogeになるのがピンと来ません
597 名前:デフォルトの名無しさん (ワントンキン MM3f-QRNW) mailto:sage [2017/03/07(火) 16:11:26.13 ID:q3Kp0vdwM.net] >>584 int* int const* は別の型だから int* int* const は同じ型だけどconst性の違いがある
598 名前:デフォルトの名無しさん (ワッチョイ 0f24-T7IB) [2017/03/07(火) 18:02:33.74 ID:O/JMqbZP0.net] >>584 そのconstはintPtrを修飾するだけで、 intPtrの内容は変更できないからだ intPtrは「非constのintへのポインタ」となっていて 当たり前だがhogeは非constしか指せないポインタになる おまえさんが付けたconstは*hogeではなくhoge自身を修飾するということだ
599 名前:デフォルトの名無しさん (ワッチョイ cb3c-m4jB) [2017/03/07(火) 19:43:03.39 ID:3Q65RUMW0.net] >>585-586 マクロみたいにただキーワードを置き換えるんじゃなくて あくまでも型の定義ってことか なんとなくわかったようなわからないようなって感じだが 参考になったありがとう
600 名前:デフォルトの名無しさん (ワッチョイ 6bf2-Guy/) [2017/03/07(火) 20:00:54.12 ID:JY4xO0gD0.net] std::allocatorなんかでもconst_pointerの定義があるし、別途typedefしてくださいって感じなんだろうね
601 名前:デフォルトの名無しさん (アウアウカー Sa6f-tCEH) mailto:sage [2017/03/07(火) 21:59:10.88 ID:GF7WqcJ3a.net] >>587 構文上の結合の優先順位を理解すれば、複雑な型宣言の意味も理解できるようになるよ。
602 名前:デフォルトの名無しさん (オッペケ Sref-n7ZK) mailto:sage [2017/03/08(水) 00:23:57.60 ID:bj8U/UPWr.net] typedefがただのキーワード置換でないことに気づいた>>587 に対して >>589 は未だにただのキーワード置換と考えているように思えてならない
603 名前:デフォルトの名無しさん (ワッチョイ 0f24-T7IB) [2017/03/08(水) 09:15:55.94 ID:DNe+L
] [ここ壊れてます]
604 名前:f9O0.net mailto: 確かにw [] [ここ壊れてます]
605 名前:デフォルトの名無しさん (ブーイモ MMaf-x83U) mailto:sage [2017/03/08(水) 09:58:21.79 ID:pkIkDwj+M.net] あれ、const int*とconst intPtrって同じにならなかったっけ?
606 名前:デフォルトの名無しさん (ワッチョイ 0f24-T7IB) [2017/03/08(水) 10:24:26.87 ID:DNe+Lf9O0.net] おまえもしかして intPtr a, b; が int* a, b; になるとでも思ってる?
607 名前:デフォルトの名無しさん (ワッチョイ eb9b-x83U) mailto:sage [2017/03/08(水) 10:35:12.10 ID:qFksyWqq0.net] それとはまた別の話じゃ?
608 名前:デフォルトの名無しさん (ワッチョイ 1fcc-+LoG) mailto:sage [2017/03/08(水) 10:45:04.43 ID:EeDAfYl90.net] >>592 ポインタに対してのconstだからint const*
609 名前:デフォルトの名無しさん (ブーイモ MMaf-x83U) mailto:sage [2017/03/08(水) 11:04:02.79 ID:pkIkDwj+M.net] おっと勘違いして覚えてた これは恥ずかしい、間違えて使ってたかも でも間違えてたらコンパイルエラーが出そうなもんだけど なんで今まで気がつかなかったんだろう…
610 名前:デフォルトの名無しさん (ワッチョイ eb7b-2BvX) mailto:sage [2017/03/08(水) 11:14:36.06 ID:VyuA3yza0.net] なわけで int* a, b; じゃなくて int *a,b; だよなぁ とここ30年w
611 名前:デフォルトの名無しさん (ササクッテロロ Spef-prdN) mailto:sage [2017/03/08(水) 13:43:48.82 ID:SntjmOAop.net] constは後ろに付けるのが本来なんだよ。 自信が無いなら先頭につけるのをやめれば間違わない。 >>595 int *const じゃねーの?
612 名前:デフォルトの名無しさん (ワッチョイ 0f24-T7IB) [2017/03/08(水) 14:57:04.07 ID:DNe+Lf9O0.net] あのなあ。。。 ずっこけた状態からもっとずっこけるのは苦痛を伴うんだぞ
613 名前:デフォルトの名無しさん (ブーイモ MMaf-R7fB) mailto:sage [2017/03/08(水) 17:54:01.46 ID:xABa9dNGM.net] int const * constでおk
614 名前:デフォルトの名無しさん (ワッチョイ eb7b-2BvX) mailto:sage [2017/03/08(水) 18:00:06.17 ID:VyuA3yza0.net] * の前につけるか後につけるかですな
615 名前: ◆QZaw55cn4c (ワッチョイ ab85-GPt5) mailto:sage [2017/03/08(水) 18:08:42.38 ID:/EX97NIO0.net] int * const p int const *p int const * const p のどれかは使うが const int *p はやらない、これっていったい上の三つのうちのどれになるの?なんでそうなるの?
616 名前:デフォルトの名無しさん (ドコグロ MM2f-gAk7) mailto:sage [2017/03/08(水) 18:22:24.19 ID:dlE+7VUyM.net] StackOverflowにあった。 stackoverflow.com/questions/1143262/what-is-the-difference-between-const-int-const-int-const-and-int-const
617 名前:デフォルトの名無しさん (ブーイモ MMaf-5QEK) mailto:sage [2017/03/08(水) 18:43:43.95 ID:zA3nyedyM.net] >>603 これは分かり易いw
618 名前:デフォルトの名無しさん (ワッチョイ 3b0e-RhaL) mailto:sage [2017/03/08(水) 18:44:03.44 ID:vi7wbAYy0.net] >>602 3番目は使わんな 参照先変えないならもう参照でいいじゃない
619 名前:デフォルトの名無しさん (ワッチョイ 1fcc-+LoG) mailto:sage [2017/03/08(水) 21:11:05.22 ID:EeDAfYl90.net] >>598 うむ、少し間違えた
620 名前:デフォルトの名無しさん (ワッチョイ 1fa9-sdpt) mailto:sage [2017/03/08(水) 21:28:15.23 ID:LYwYML6D0.net] >>602 C の syntax を↓で済ませた結果、各 specifier, qualifier は順不同となった。 declaration: declaration-specifiers init-declarator-list(opt); declaration-specifiers: storage-class-specifier declaration-specifiers(opt) type-specifier declaration-specifiers(opt) type-qualifier declaration-specifiers(opt)
621 名前:デフォルトの名無しさん (ワッチョイ af3c-csvI) mailto:sage [2017/03/09(木) 08:16:39.62 ID:P4eVvEWq0.net] 「cv修飾は左を修飾し、一番左に書いたときだけ例外的に右を修飾する」 という認識で10年以上問題なかった、仕様書でどうなってるかは知らんけど
622 名前:デフォルトの名無しさん (オッペケ Sr57-Yz8R) mailto:sage [2017/03/09(木) 08:46:08.19 ID:nspN5S3gr.net] そんなはずもなし unsigned volatile const inline int static long *f();
623 名前:デフォルトの名無しさん (ワッチョイ 2353-pXJL) mailto:sage [2017/03/10(金) 02:51:41.08 ID:DVnkldFi0.net] >>602 >const int *p >はやらない、これっていったい上の三つのうちのどれになるの?なんでそうなるの? マジか const char * なんて毎日数え切れないほど使ってるわ
624 名前:デフォルトの名無しさん (ワッチョイ cff2-j8zu) [2017/03/10(金) 08:56:27.34 ID:B+GguKA+0.net] const v(^・^)v const
625 名前:デフォルトの名無しさん (ササクッテロル Sp57-f3f6) mailto:sage [2017/03/10(金) 17:04:19.46 ID:Pyfb9YNwp.net] 久々にC弄ったから何となく覗いてみたらconstの話しかしてなくて草
626 名前:デフォルトの名無しさん (ワッチョイ 362b-2hGO) mailto:sage [2017/03/10(金) 18:09:34.58 ID:wy5WfeUq0.net] const仙人のお出ましだぞ 彼がconstの全てを知ってるらしい
627 名前:デフォルトの名無しさん (オッペケ Sr57-Yz8R) mailto:sage [2017/03/10(金) 18:35:53.93 ID:9izzFXDGr.net] >>585 >同じ型だけどconst性の違いがある どこでそんなデタラメを覚えた?
628 名前:デフォルトの名無しさん (ワッチョイ 72cc-hLcU) mailto:sage [2017/03/10(金) 18:47:49.20 ID:OJfHMNpa0.net] 君達、物事はコンスタントに解決することが重要だよ?わかてる?
629 名前:デフォルトの名無しさん (オッペケ Sr57-Yz8R) mailto:sage [2017/03/10(金) 19:03:11.58 ID:9izzFXDGr.net] >>598 >constは後ろに付けるのが本来なんだよ ソースは?
630 名前:デフォルトの名無しさん (ワッチョイ f27f-uSLp) mailto:sage [2017/03/10(金) 19:23:12.52 ID:ZjsFj1+i0.net] >>614 後者では型が修飾されているんじゃなくて変数が const 修飾されている ということを言いたかったんじゃない?実際 int * a; int * const b = hoge(); a = b; はちゃんと通るし。 まあたしかに「同じ型」だと言っていいのかはよくわかんないけど。
631 名前:デフォルトの名無しさん (ドコグロ MMca-TLcY) mailto:sage [2017/03/10(金) 20:18:18.69 ID:HUvVedpnM.net] >>603 のClockwise/Spiral Ruleに異論のある人、居る?
632 名前:デフォルトの名無しさん (ブーイモ MM2b-4Oo7) mailto:sage [2017/03/10(金) 20:38:11.10 ID:K2NxcqGZM.net] >>618 1つ目の回答のほうが2つ目の回答(スパイラル)より12倍投票数が多いぞ
633 名前:デフォルトの名無しさん (オッペケ Sr57-Yz8R) mailto:sage [2017/03/10(金) 20:56:02.79 ID:9izzFXDGr.net] >>617 >型が修飾されているんじゃなくて変数が const 修飾されている などという空想がどこから湧いてきたのか疑問なのだが ideone.com/dWfpAT
634 名前:デフォルトの名無しさん (オッペケ Sr57-Yz8R) mailto:sage [2017/03/10(金) 20:59:13.64 ID:9izzFXDGr.net] >>618 まず「clockwise」と言うあたりでオツムが論理的思考に弱いことは明らか
635 名前:デフォルトの名無しさん (ワッチョイ 72c9-qJ3d) mailto:sage [2017/03/10(金) 21:00:42.90 ID:6ypCkPMo0.net] >>617 の理屈だと、 char c; int i; これらは同じ型で変数が修飾されてるだけだよ。 実際、 int i; char c = 3; i = c; はちゃんと通るし。 などとも言える。
636 名前:デフォルトの名無しさん (ワッチョイ 723c-ezmg) mailto:sage [2017/03/10(金) 22:22:44.73 ID:PT1UnLZa0.net] >>620 int const *p int * const p の違いもわからんアホは ROM っとけ
637 名前:デフォルトの名無しさん (ワッチョイ 52c0-/Xhi) mailto:sage [2017/03/11(土) 00:12:59.12 ID:XUJAp/M10.net] ROMはconst
638 名前:デフォルトの名無しさん (ワッチョイ 138b-ldtI) mailto:sage [2017/03/11(土) 06:32:47.43 ID:JvHBeRgs0.net] ちょっおまwwwwwwww C++のBNFにtype-qualifierというのはあっても variable-qualifierとかobject-qualifierとかは無いはず… >>622 のは単に変数のdeclaration (文脈によっては変数の定義にもなる
639 名前:デフォルトの名無しさん (ワッチョイ d2d1-qBYI) mailto:sage [2017/03/11(土) 06:50:46.51 ID:2/ZkR35y0.net] ちょっおま って久しぶりに聞いたわ
640 名前:デフォルトの名無しさん (ワッチョイ 7f4a-/Xhi) mailto:sage [2017/03/11(土) 09:06:46.34 ID:h5T3JHpB0.net] >>616 二度漬け禁止
641 名前:デフォルトの名無しさん (ワッチョイ f64a-JiRs) mailto:sage [2017/03/12(日) 07:41:49.43 ID:nkYFQTVc0.net] Visual studio express 2013において、if文以外(変数にデータを代入するとき)に==と書いた時にエラーを返すようにしたいのですが、出来ますか? (a == 1;と書いた時にコンパイルするとエラーを返すようにするといった感じです) if文の判定式をコピーした結果、この==を1つにし忘れたため、しばらく困ったのと 現状において、整数への代入で==を使うことが無いので、エラーを出すようにしたいのです
642 名前:デフォルトの名無しさん (ワッチョイ f64a-JiRs) mailto:sage [2017/03/12(日) 08:58:04.75 ID:nkYFQTVc0.net] すみません、スレ違いでした
643 名前:デフォルトの名無しさん (ワッチョイ 723c-4mgA) mailto:sage [2017/03/12(日) 09:50:45.60 ID:6iMHIBm50.net] >>628 プロジェクトのプロパティ >構成プロパティ >C/C++ >詳細設定 特定の警告をエラーとして扱う に 4553 を設定すればいい (もしくは、コンパイルオプションの /we"4553" を指定) そうすると warning C4553: '==': 演算子にプログラム上の作用がありません。'=' を意図しましたか? のエラーになる。
644 名前:デフォルトの名無しさん (ワッチョイ 138b-ldtI) mailto:sage [2017/03/12(日) 12:13:57.19 ID:OaInj5Km0.net] 「警告レベル」を「Level4 (/W4)」、「警告をエラーとして扱う」を「はい (/WX)」にしたらもっと広範にやってくれてスゲー便利
645 名前:デフォルトの名無しさん (ワッチョイ f64a-JiRs) mailto:sage [2017/03/12(日) 17:42:24.65 ID:nkYFQTVc0.net] >>630 ,631 本当に有難う御座いました!! c++に明るくなく、これに気づかなかったせいで丸三日潰れて困り果てていたのですが、c++系の専門用語が分か
646 名前:轤ネいのと 「c++ ==」といったワードで検索しても記号系のワードが省かれるからか、ヒットせずとても困っていました [] [ここ壊れてます]
647 名前:デフォルトの名無しさん (スプッッ Sdb2-K8Mp) mailto:sage [2017/03/13(月) 07:13:56.93 ID:Butu4pJYd.net] MultiByteToWideCharの1つ目の引数のコード表と二つ目の引数のフラグセットの意味を教えてくれませんか コード表の意味はなんとなくわかるんだけどそれが使用してたコード表についてなのか、それとも変換先なのかがわからない...
648 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd92-SsNB) mailto:sage [2017/03/13(月) 13:07:11.48 ID:VNPYsRzKd.net] >>633 WindowsのUnicodeには、UTF-16が使われている。コードページは、UTF-16以外のマルチバイト文字列の符号化の種類を表している。第2引数についてはUnicodeの基本を勉強してから用語を確認せよ(英語のMSDNページを参照)。
649 名前:デフォルトの名無しさん (ワッチョイ f3c9-Yz8R) mailto:sage [2017/03/13(月) 16:29:57.33 ID:Kr7xjXLG0.net] Unicode 9.0のCore Specification D63ではprecomposedとcompositeが同義と読めるがMSDNは異なる使い方をしているな combining(結合)と間違えたように思える これでは>>633 は理解不能
650 名前:デフォルトの名無しさん (ワッチョイ f3c9-Yz8R) mailto:sage [2017/03/13(月) 21:12:59.84 ID:Kr7xjXLG0.net] >>633 WindowsのMultiByteToWideCharは「何らかの文字コード」をwchar_t(UTF-16)文字列に変換するもの 変換元の文字コードが何であるかを指定するのが第一引数 例えば932(シフトJIS)、65001(UTF-8) 変換の動作を指定するのが第二引数 例えばMB_ERR_INVALID_CHARSは少しでも不正なバイトシーケンスがあれば全体をエラーとする
651 名前:デフォルトの名無しさん (ワッチョイ f27f-6H1t) mailto:sage [2017/03/15(水) 02:37:25.64 ID:8rrA/zgU0.net] >>620 ってどういう意図のレスだったの?理解がまったくできないんだけど
652 名前:デフォルトの名無しさん (スプッッ Sdb2-K8Mp) mailto:sage [2017/03/15(水) 17:59:26.07 ID:wfaQCMr9d.net] >>634-636 たすかりもうした おかげでコード上手くかけたので助かりました
653 名前:デフォルトの名無しさん (ワッチョイ 133c-v8EU) [2017/03/16(木) 18:08:57.23 ID:KOsUwnSu0.net] テンプレートの特殊化を勉強しているんだけど https://ideone.com/Z7enCI これがなんでエラーになるのか教えてください
654 名前:デフォルトの名無しさん (ワッチョイ ef6c-i8cA) mailto:sage [2017/03/16(木) 18:18:50.30 ID:ZMIdRLMQ0.net] >>639 intのHogeのFoo関数のtemplate<>が余計 Hoge<int>が特殊化されていることはクラス側でわかっているため
655 名前:デフォルトの名無しさん (ワッチョイ 133c-v8EU) [2017/03/16(木) 19:00:18.20 ID:KOsUwnSu0.net] >>640 なるほど、サンクス
656 名前:デフォルトの名無しさん (ワッチョイ 133c-v8EU) mailto:sage [2017/03/17(金) 09:32:55.95 ID:OqtFMBfF0.net] 関数のアドレスを取得するときに クラスのメンバじゃない普通の関数は&をつける必要がないのに メンバ関数は&をつけないといけなくなる理由を教えて
657 名前:デフォルトの名無しさん (ワッチョイ 5319-v8EU) mailto:sage [2017/03/17(金) 09:40:10.52 ID:Wd4E8hAa0.net] ideoneで書いてると急に初期化されて初めの状態のコードに戻ってしまうのですが わたくしだけでしょうか?
658 名前:デフォルトの名無しさん (スップ Sddf-8YZg) mailto:sage [2017/03/17(金) 11:36:52.60 ID:c9xwv7oqd.net] >>642 言ってる意味がよくわからん
659 名前:デフォルトの名無しさん (ワッチョイ 3fdf-8FG5) [2017/03/17(金) 13:16:36.04 ID:AO+9LJwo0.net] >>642 ドライに言うと、規格でそう決まっているから なんでそう決まっているかというと、 メンバポインタ(関数に限らない)取得は特殊な行為で、 インスタンス内のメンバの絶対アドレスを取得するが一般的な行為*1なので、 特殊な行為は明示的*2に書こうということになっている struct asshole { void sonofabitch(int) { } void dipshit() { auto jerk = sonofabitch; } }; ↑は現実にはコンパイルエラーだが、もし通すとしたら おまえ的にはjerkには何が入るべきだと思う? ちなみに俺はbind(&asshole::sonofabitch, this, _1)に見えちまう *1 俺じゃなく禿がそう思っている *2 アドレス演算子とスコープ演算子が必須
660 名前:デフォルトの名無しさん (ワッチョイ bf27-tpgq) mailto:sage [2017/03/17(金) 13:48:45.02 ID:l8NCqXAU0.net] どこをどうひねるとそういう煌びやかな単語が出てくるのかが謎
661 名前:デフォルトの名無しさん (ワッチョイ 5319-v8EU) mailto:sage [2017/03/17(金) 16:09:10.13 ID:Wd4E8hAa0.net] ダブルヂスパッチってwikipediaだと2つのオブジェによってヂスパッチ する意味ってかいてあるけれどwikipedia以外のホムペには2回ヂスパッチすること って書いてあるばあいもありますね。
662 名前:デフォルトの名無しさん (ドコグロ MMb7-3fK7) mailto:sage [2017/03/17(金) 18:32:57.86 ID:dpI1G6OFM.net] >>645 日本語がまともに書けるようになってからレスしなよ
663 名前:デフォルトの名無しさん (ワッチョイ bfda-8FG5) [2017/03/17(金) 19:46:28.78 ID:sgxnbWig0.net] >>648 おまえは批判がまともに書けるようになるまでROMってろ
664 名前:片山博文MZ ◆T6xkBnTXz7B0 (スププ Sddf-W8JT) mailto:sage [2017/03/17(金) 19:54:05.38 ID:+s8GChIVd.net] 批判
665 名前:デフォルトの名無しさん (ワッチョイ bf3c-5NuA) mailto:sage [2017/03/17(金) 19:59:12.76 ID:KNcySIzq0.net] >>648 俺は普通に理解できたんだが、逆になにが悪いのか教えて欲しい。
666 名前:デフォルトの名無しさん (ブーイモ MM37-nFTW) mailto:sage [2017/03/17(金) 21:49:19.82 ID:YstDK/amM.net] メンバー関数のアドレス取得も絶対アドレスだと思うんだけど
667 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/17(金) 22:10:36.61 ID:Kkd83n1s0.net] >>646 ○○がマイブームな年頃 うんち:3さい カンチョー:6さい サノバビッチ:14歳←英語使ってる俺カッコイイ とかじゃね? ところで脱線するが、>>645 でbindがC++にあることを初めて知ったのだが、 thisをバインド出来ているがこれって意味あるのか? JavaScriptみたいな動的ダックタイピングなら継承関係なくbind出来るので意味があるのだが、 C++なら継承してないとbind出来ないよな? だったら最初からインスタンスのポインタを管理して普通にメンバ呼んだ方が楽だと思うが。 (継承してないとbind出来ないのなら管理対象のポインタが 関数ポインタになるかインスタンスになるかだけ。 実質的なプログラミングコストは変わらない)
668 名前:デフォルトの名無しさん (ワッチョイ 133c-v8EU) [2017/03/17(金) 22:24:44.25 ID:OqtFMBfF0.net] >>645 ごめん、bind関数の理解があいまいなんだが 要するにインスタンス先のsonofabitchメンバ関数になるように見えるって言いたいんだよね 俺は(も?)そう思った でも規格で決まってるって一言で言ってもらえてなんとなく割り切れた ひとつだけ 「インスタンス内のメンバの絶対アドレスを取得する」のが特殊な行為って部分をkwsk 他のポインタは相対アドレスなの?
669 名前:デフォルトの名無しさん (ワッチョイ 3398-jYbd) mailto:sage [2017/03/17(金) 22:41:33.75 ID:pMlN+j4d0.net] いやでも、原文には >インスタンス内のメンバの絶対アドレスを取得するが「一般的」な行為 って書いてあるし
670 名前:デフォルトの名無しさん (オッペケ Sr97-w0Gz) mailto:sage [2017/03/17(金) 23:23:01.06 ID:p3X8pgmur.net] >auto jerk = sonofabitch; ここは話の流れでは auto jerk = asshole::sonofabitch; とすべき所を、勝手に「asshole::」を取って話をすり替えるとは
671 名前:デフォルトの名無しさん (ワッチョイ a342-W3uL) mailto:sage [2017/03/17(金) 23:23:58.39 ID:lHYxcE7d0.net] >>653 transformみたいなアルゴリズム系の関数に渡すときにバインドするしかないだろ
672 名前:デフォルトの名無しさん (ワッチョイ 3fd1-h49x) mailto:sage [2017/03/17(金) 23:46:36.67 ID:KqZX+Igl0.net] 継承してなくてもbindできるでしょ
673 名前:デフォルトの名無しさん (ワッチョイ 537b-gO1F) [2017/03/17(金) 23:48:26.71 ID:RKn5d9hw0.net] 継承とbindがどう関係すんのか解らんわ
674 名前:デフォルトの名無しさん (オッペケ Sr97-w0Gz) mailto:sage [2017/03/18(土) 09:12:06.02 ID:QtoorQPlr.net] >>653 >C++なら継承してないとbind出来ないよな? 継承の意味もわからないレベルはすっこんでた方がいい ideone.com/Wl7A59
675 名前:デフォルトの名無しさん (ワッチョイ f3e7-ajdi) mailto:sage [2017/03/18(土) 09:44:46.57 ID:g4V8rpJk0.net] ふえーん。VC++でW系のこーどがわからないよ〜。
676 名前:デフォルトの名無しさん (ワッチョイ f3e7-ajdi) mailto:sage [2017/03/18(土) 09:54:09.70 ID:g4V8rpJk0.net] C++のバグかと思ったら、いじってるHTMLのバグだった。悲しい。
677 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 11:02:56.09 ID:waR+gchT0.net] >>657 std::transformならbindいらんだろ。イテレータを渡してる。 > https://cpprefjp.github.io/reference/algorithm/transform.html そしてこの場合、(someClass->*someMethod) と書けるしそれで十分だろ。 >>660 ここでbindも継承もないソースを上げてくることにびっくりだわ >>658-659 関数内でのthis.someFieldへのアクセスは継承してないと無理でしょ。 静的型ではポインタを生成出来ない。(動的ダックタイピングなら可能) www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03057.html www.ibm.com/support/knowledgecenter/ja/SSGH3R_12.1.0/com.ibm.xlcpp121.aix.doc/language_ref/cplr034.html 継承してない物をbindして、その関数内からthis.someFieldにアクセス出来る例があるか? あればよろしく。
678 名前:デフォルトの名無しさん (ワッチョイ 838b-UnlH) mailto:sage [2017/03/18(土) 11:43:31.57 ID:YXP7lJmh0.net] ていうか仮想関数(による多態性)とテンプレート(によるfunctor)がどっちも使える状況で どうしてもメンバ関数のアドレスをとる必要があるというシチューエーションとは一体、 ちなメンバ関数のアドレスをとる構文は覚えていない 主記憶にございません
679 名前:デフォルトの名無しさん (ワッチョイ 838b-UnlH) mailto:sage [2017/03/18(土) 11:45:58.26 ID:YXP7lJmh0.net] 誤:テンプレート(によるfunctor) 正:テンプレート(へのfunctorとかクロージャ渡し)
680 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/18(土) 12:01:44.38 ID:TmvAgLdoM.net] >>663 もういいから死ね https://ideone.com/jZNd95
681 名前:デフォルトの名無しさん (ワッチョイ 838b-UnlH) mailto:sage [2017/03/18(土) 12:41:56.92 ID:YXP7lJmh0.net] f.calc(x, 2)をfunc(x)として呼びたいためだけにstd::bind()を使うのはメリット感に欠ける…
682 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/18(土) 12:43:09.53 ID:TmvAgLdoM.net] >>667 できるできないの議論だから
683 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 12:48:15.84 ID:waR+gchT0.net] >>666 > std::vector<int> invoke(const std::vector<int>& v, const F& f) const > std::bind(&F::calc, f, _1, 2)); bindしている対象は F& f つまり自分自身のクラスだろ。 それは継承してるのと意味は同じだよ。(今回の問いにおいては) 俺はそこに全く無関係のクラス class G{} を突っ込めるのかと問うている。 C++では出来ないだろ。(JavaScriptでは出来る) 自分自身、または継承関係のあるクラスなら、 > std::bind(&F::calc, f, _1, 2)); のところを代わりに f->*calc と書けるんだよ。それでいいだろ、という話。 今回は引数が複数個で、第2引数を確定させたいみたいだから、 C++にその文法が無く、部分適用関数をあらかじめ用意するしかないようだけど、 それは文法が足りてないから。(ただしそこまで使わないのでbindでもいいが) ただそもそもカリー化して一個ずつ食えって話だろ、本来は。 その場合なら第2引数を確定させた関数を作る為に、 class H: F{ int k; int calc(const int x); } だろ。それで h->*calcで良いんだよ。(継承関係が有ればbind無しで書ける) というか内部的には同じ事をやっていると思っているんだが。
684 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 12:48:34.92 ID:waR+gchT0.net] それで話を戻すと、 「継承関係無しで、自分自身でもないクラス G をbind出来るか?」 というのが俺の問いね。 お前は日本語にもこだわるタイプのようだから、「自分自身でもない」と明記しておく。 (これは普通に分かると思いたかったが) 要するに俺は、 「静的型であるC++に於いてthisのバインドって意味あるのか?」 と問うている。 動的型ならバインド後にメンバ追加して実行時に揃っていればダックタイピング可能だから意味がある。 静的型はバインドする時点でメンバが揃っていることを確定出来ないといけない。 それって要するに継承関係がないと無理だよね?という話。
685 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 12:51:40.31 ID:waR+gchT0.net] × 静的型はバインドする時点で ○ 静的型はバインドが使われているソースをコンパイルする時点で 一応訂正しとくわ。分かる範囲だとは思うが。
686 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/18(土) 13:01:24.39 ID:TmvAgLdoM.net] 何が言いたいのか全然わからん とりあえず、そのJavaScriptでできると主張しているコードを晒せ 第一引数にthisをバインドする意味って、内部的にはメンバメソッドはオーバーロード(+マングリング)で解決されるんだから、バインドしとかないと動かねーだろがよ
687 名前:デフォルトの名無しさん (ワッチョイ 2322-ghbJ) mailto:sage [2017/03/18(土) 13:17:03.94 ID:WJ1Bgcsq0.net] std::list<std::function<void<void>>> funcs; A a; B b; callbacks.push_back(std::bind(&A::func, &a)); callbacks.push_back(std::bind(&B::f, &b)); for(auto func : ...) func(); こういう使い方のbindの場合継承は関係ないと思う
688 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 13:31:02.22 ID:waR+gchT0.net] >>672 > バインドしとかないと動かねーだろがよ その通りだ。 多分君はC++しか知らないから、それ前提で話をしているからそう思えるのだと思う。 これ自体は不思議ではない。 JavaScriptなら以下みたいなことが出来る。 var a = { a: 1, k: 2, calc: function(x){return this.k*x+this.a;} }; var b = {}; // bはaと継承関係なし var b_calc = a.calc.bind(b); // aのcalcにbをバインド ---(A) b_calc(3); // 実行可能、結果は NaN ---(B) b.a = 4; b.k = 5; b_calc(6); // 実行可能、結果は 34 ---(C)
689 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 13:31:20.02 ID:waR+gchT0.net] C++から見ればデタラメだが、JavaScriptはこれでも動く。 C++は(A)の時点でバインド対象(今回はb)がcalcを動かしても問題ないことが必要で、 コンパイル時に確定させる為には通常は継承関係がないと無理だろ。 JavaScriptはそういうの関係無しにとりあえずbind出来る。 ただし中身が揃っていない時に実行したらNaNが返ってくる。(B) そして中身を揃えたあとには正しく実行される。(C) だからJavaScriptみたいな言語ならthisをバインドする意味があるのだが、 C++のように継承関係がないとメンバ関数を呼べないのなら、 常に f->*calc の形で記述することが可能であり、bind時にthisを確定させる意味がない。 (やってもいいのだが、冗長=糖衣構文) JavaScriptでは(B)の時点で b はメンバを何も持っておらず、 (C)の時点でもメンバは a, k のみで、calcはメンバではないことに注意。 (当たり前だが a を継承していれば calc もメンバになる)
690 名前:デフォルトの名無しさん (ワッチョイ 537b-gO1F) [2017/03/18(土) 13:32:09.09 ID:ux+WuUO90.net] >>670 thisに限らずbindするメリットは呼び出し側が(bindで引数を合わせることにより)実際に呼び出される物がどんな関数のか気にせずに呼び出せることっていうのは解るよね? それで、thisのbindだけ疑問視する理由は?
691 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 13:38:41.49 ID:waR+gchT0.net] >>673 > callbacks.push_back(std::bind(&A::func, &a)); これを、this側が関係ない奴、例えばBにして、 callbacks.push_back(std::bind(&A::func, &b)); // (D) だとコンパイル通らないだろ?(俺の予想だが) だったら、常にその場合は、 callbacks.push_back(a->*func)); と書けるよね?という話。 (もちろん糖衣構文ならそれでいいんだが) JavaScriptは(D)でも
692 名前:Rンパイル通るんだよ。(まあコンパイル自体がないんだが) そして実行も出来る。(ただし実行時にメンバが揃ってない時にはお察しで) [] [ここ壊れてます]
693 名前:デフォルトの名無しさん (ワッチョイ 537b-gO1F) [2017/03/18(土) 13:48:07.93 ID:ux+WuUO90.net] >>677 つまり >callbacks.push_back(a->*func)) と書けるようにしたらbindでthis使う必要ないって話? そうなのであれば callbacks.push_back([&]{a.func();}); と書けるから別に要らない
694 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 13:53:42.63 ID:waR+gchT0.net] >>676 見やすさの為に、というのはいい。 > thisのbindだけ疑問視する理由は? プログラミングコストが減ってないから。 auto a_func = std::bind(&A::func, &a) なら、 a を管理するか a_func を管理するかで、何も隠蔽出来てないし減ってない。 ただ>>673 みたいな使い方だと、 型を揃えた結果、同じ記述で実行出来るから、この点は確かにメリットはある。 これを言いたかったのか?
695 名前:デフォルトの名無しさん (ワッチョイ 537b-gO1F) [2017/03/18(土) 13:59:12.74 ID:ux+WuUO90.net] >>679 bindを使う利点なんてそれしか無いと思うんだけど…
696 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/18(土) 14:02:09.89 ID:TmvAgLdoM.net] >>674 C++では、お前があとからやってるインスタンス構築を先にやっとけよってだけの話
697 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/18(土) 14:03:34.16 ID:TmvAgLdoM.net] >>679 type_erasureの話がしたかっただけ? C++のこと知らねーなら議論の余地がなさすぎ JavaScriptスレいけよ
698 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 14:04:04.03 ID:waR+gchT0.net] >>678 ちょっと輻輳してて申し訳ないが、 > >callbacks.push_back(a->*func)) > と書けるようにしたらbindでthis使う必要ないって話? そう。というか継承関係ある状態でしかメンバ関数使えないのなら、 thisをbindする意味がないと思った。 (引数はbindしていいが、これもbindなしで継承でも書ける>>669 ) ただし、>>673 みたいに、「戻り値と引数が同じなら同じ関数型」として扱えるのなら、 継承関係なしのA::funcとB::funcを同じに扱えるからやっぱbindしてないと駄目だな。 ところで、ここでクロージャを使うことに意味はあるのか? > callbacks.push_back([&]{a.func();}); もちろん使ってもいいが、a.funcがクロージャ内の変数を捕捉しているはずもないし、直接 > callbacks.push_back(a->*func)); で全く問題なくね?
699 名前:デフォルトの名無しさん (ワッチョイ 2322-ghbJ) mailto:sage [2017/03/18(土) 14:06:49.68 ID:WJ1Bgcsq0.net] 正直 std::function<...> f[] = a.func; で書けるなら書きたい 書けないからbind使ってる
700 名前:デフォルトの名無しさん (ワッチョイ 2322-ghbJ) mailto:sage [2017/03/18(土) 14:07:07.58 ID:WJ1Bgcsq0.net] []いらない
701 名前:デフォルトの名無しさん (ワッチョイ a30e-BL3h) mailto:sage [2017/03/18(土) 14:10:17.22 ID:JpaAP8SC0.net] 今時bind使わずlambdaで済ますよね
702 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/18(土) 14:10:36.75 ID:TmvAgLdoM.net] >>683 aをキャプチャする必要が有るだろうが まじでclassとインスタンスの違いをもう少し学んでくれ
703 名前:デフォルトの名無しさん (オッペケ Sr97-w0Gz) mailto:sage [2017/03/18(土) 14:11:31.23 ID:2lr6MuOgr.net] なんだ、継承の意味を知らないんじゃなくて std::bindを見てECMAScriptのbindingと同じものだと勘違いしていただけか。 これでは話が噛み合うはずがない
704 名前:デフォルトの名無しさん (ワッチョイ 537b-gO1F) [2017/03/18(土) 14:14:40.36 ID:ux+WuUO90.net] >>687 新しい文法追加してa-> *func って書いたらaを参照キャプチャしてfuncを呼び出す関数オブジェクトを返すようにしてほしいらしいよ。
705 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/18(土) 14:17:30.12 ID:TmvAgLdoM.net] >>689 関数を一級オブジェクトにしろという主張?? 別の言語でやれとしかいいようがないな…
706 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 14:20:22.86 ID:waR+gchT0.net] >>681-682 > インスタンス構築 それはインスタンス構築ではなく、使う物だけとりあえず入れてるんだよ。 a を構築しているのではなく、 a.func の数式 k*x+a を使いたいから、 とりあえず a と k に値を入れて使っているだけ。 数式を間借りしているだけなんだ。 もっと a が複雑で、100個くらいメンバを持っているベクトル値だったとして、 calcも calc_0 〜 'calc_100 とかあったとして、そのうち1個だけ丁度いい数式があったら、それを借りる感じ。 このデタラメっぷりはC++にいると理解不能だが、JavaScriptに慣れるとC++が色々面倒で仕方ない。 そもそもテンプレートも型消去も最初からvarだとやらなくていいんだよ。 (その分デバッグが辛いが)
707 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 14:24:47.73 ID:waR+gchT0.net] >>689 いやその文法はすでにC++0xにあるとの理解だが、これが間違いか? 既に>>663 にURL上げたが。 > メンバーを指すポインター演算子 .* および ->* は、特定のクラス・オブジェクトのメンバーを指すポインターをバインドする際に用いられます。
708 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/18(土) 14:26:29.15 ID:TmvAgLdoM.net] >>691 > それはインスタンス構築ではなく、使う物だけとりあえず入れてるんだよ。 >とりあえず a と k に値を入れて使っているだけ。 >数式を間借りしているだけなんだ。 それをインスタンス構築っていうんだよ、覚えとけばか >もっと a が複雑で、100個くらいメンバを持っているベクトル値だったとして、 >calcも calc_0 〜 'calc_100 とかあったとして、そのうち1個だけ丁度いい数式があったら、それを借りる感じ。 そういう場合はお前の言うとりあえずだけを入れられるコンストラクタ作るんだよ まぁ普通の感性ならその部分はサブクラスとして切り出すけどね >このデタラメっぷりはC++にいると理解不能だが、JavaScriptに慣れるとC++が色々面倒で仕方ない。 >そもそもテンプレートも型消去も最初からvarだとやらなくていいんだよ。 面倒ならjsで書いとけばいいんじゃないですかね
709 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/18(土) 14:27:43.20 ID:TmvAgLdoM.net] >>692 間違い
710 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 14:43:08.69 ID:waR+gchT0.net] >>684 ちなみに何でそれ書けないんだ? std::function<...> f_bound = a.func; // (E) バインド済み std::function<...> f_not_bound = A::func; // (F) 未バインド、第1引数はthis で文法的に問題ないし、普通にこうだと思っていた。 ただし俺はC++でメンバポインタを使ったことはないから、 現在駄目なのなら何か理由があるのだろうけど、 逆にそうだと信じ切っており、 JavaScriptはこれができない=常にbindが必要なのでウザくて仕方なかった。例えば、 var func = someInstance.someMethod.bind(someInstance); と常に2回 someInstance と書く必要があり、これがウザイ。 ただC++も同じく糞なのか?
711 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/18(土) 14:55:00.20 ID:TmvAgLdoM.net] >>695 classとインスタンスの違いがわかってないうちはマジで理解できないだろうからもう諦めろ JavaScriptのbind一通り調べたよ jsは関数型に依っててインスタンスって考え方がないんだな
712 名前:デフォルトの名無しさん (ワッチョイ a30e-BL3h) mailto:sage [2017/03/18(土) 15:03:41.03 ID:JpaAP8SC0.net] 最悪一部menberの参照だけ取られる表記と同じで、それがメンバ関数だとインスタンス全部が人質になるとか怖すぎ。
713 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 15:44:12.23 ID:waR+gchT0.net] >>696 インスタンスとクラスの違いが分かってないのはお前だろ。 >>695 をJavaScriptで再記すると、 var a = new A(); var func_0 = a.func; // bindされない ← 直感的にはbind済みであって欲しい var func_1 = A.prototype.func; // bindされない ← これはOK で、JavaScriptは両方ともbindされないんだよ。 だから他言語から来た連中はbindを忘れてここでバグると言われている。 その「他言語」ってのは俺はてっきりC++だと思っていたから、695の理解になる。 ところがC++も同様に糞ならまあそれでよし。 改めて見ると、代入出来ないってことか?つまり、以下が出来ない。 std::function<...> f = a->*func; // bind済み std::function<...> f = a.*func; // bind済み なるほどC++も糞だな。ただ、実装自体は>>669 で出来るのだから、 何故これを出来ないようにしたのかは謎だが。
714 名前:デフォルトの名無しさん (ワッチョイ 838b-UnlH) mailto:sage [2017/03/18(土) 15:49:31.59 ID:YXP7lJmh0.net] JavaScript… あれはインスタンスしかないみたいな似非^2オブジェクト指向じゃん? あまりの酷さに批判が高まったのか、エッセンス6とかでprototypeキーワードが導入されたが それぐらいのもん ちなC++の話として、クロージャはあんま継承関係無い f.calc(x, 2)をfunc(x)の如く扱いたければfの所有でおk
715 名前:デフォルトの名無しさん (ワッチョイ 838b-UnlH) mailto:sage [2017/03/18(土) 15:55:28.34 ID:YXP7lJmh0.net] 個人的にはstd::bind(&F::calc, f, _1, 2)ですらF::calcの直接callに最適化されずに、 間接メモリアドレッシング後のcall止まりになるんではないかと危惧してゐる テンプレートを使える環境にありながら 関数へのポインタなど使うのは教育上によろしくない
716 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 16:02:10.31 ID:waR+gchT0.net] なおC#ではあっさり書けることが判明した。 > class DelegateTest > { > static void Main() > { > Person p1 = new Person("鬼丸美輝"); > Person p2 = new Person("神無月めぐみ"); > > ShowMessage show = new ShowMessage(p1.ShowName); > show += new ShowMessage(p2.ShowName); > show += new ShowMessage(A); > show += new ShowMessage(B); > > show(); > } > > // 結果 > // 名前: 鬼丸美輝 > // 名前: 神無月めぐみ > // A が呼ばれました。 > // B が呼ばれました。 > ufcpp.net/study/csharp/sp_delegate.html
717 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 16:02:29.43 ID:waR+gchT0.net] そしてC++でも出来そうなんだが、、、 > Human alice; > printf("Alice"); > (alice.*pf5)(); > > // おまけ > int Human::*x = &Human::age; > alice.age++; > printf("age = %d (%d)", alice.*x, &(alice.*x)); > qiita.com/Ted-HM/items/282785fcdcd06fb59642
718 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 16:27:36.88 ID:waR+gchT0.net] >>699 > 似非^2オブジェクト指向じゃん? あれはクラスベースではなくプロトタイプベースだから。 それを無理矢理クラスベースとして使おうとするからおかしな事になる。 最初からプロトタイプベースとして使えば何も問題なく、 実際に表現出来る範囲もクラスベースよりも広いので、なかなか面白い。 > ちなC++の話として、クロージャはあんま継承関係無い JavaScriptでも継承とクロージャは全く関係ない。 > f.calc(x, 2)をfunc(x)の如く扱いたければfの所有でおk これはそうだと思う。 fがf_boundに変わっても手間は同じで、意味ねーというのが最初の主張。 >>700 > 個人的にはstd::bind(&F::calc, f, _1, 2)ですらF::calcの直接callに最適化されずに、 というかこれを期待するのがC++なのか? それはさすがに厳しいとは思うが、確かに無理ではないが。 > テンプレートを使える環境にありながら > 関数へのポインタなど使うのは教育上によろしくない これはどういう意味?さすがに今回の上記 > std::bind(&F::calc, f, _1, 2) をテンプレートで常に直接callするようには出来ないだろ。 というかテンプレートと関数ポインタの使う範囲は被らないと思うが。(代替出来ない)
719 名前:デフォルトの名無しさん (ワッチョイ 838b-UnlH) mailto:sage [2017/03/18(土) 16:35:15.55 ID:YXP7lJmh0.net] >> 個人的にはstd::bind(&F::calc, f, _1, 2)ですらF::calcの直接callに最適化されずに、 >というかこれを期待するのがC++なのか? >それはさすがに厳しいとは思うが、確かに無理ではないが。 できる F:calc()は仮想関数では無いし、 表記の例では&F:calc自体が(F::calc()と同じシグネチャを持つ別名の関数とかに)差し替えられはしないので 本質的には直接callとなるべきもの
720 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 16:38:53.29 ID:waR+gchT0.net] ああ分かった。 >>702 はこちらの解釈間違い、これは出来ているわけではないね。 .* と ->* はあくまでその場で呼んでいるだけであって、 bind済みの関数を返してくれるわけではないのね。
721 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/18(土) 16:42:00.60 ID:TmvAgLdoM.net] もういいよ jsスレでやれよ
722 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 17:00:49.05 ID:waR+gchT0.net] >>704 > 本質的には直接callとなるべきもの それを言いだしたら全部だろ。そうなってないから色々問題なわけで。 ただこれに関してはスタックイメージを揃えればいいだけだから、やる気だけだね。 最初からスタックイメージを揃える呼び出しを用意してもいいし、 一旦>>669 の形式で2段階呼び出しにして、インラインにしてもいい。 (ただしインライン展開対象は外側関数なので従来最適化ルーチンは使えない) いずれにしても難しくはないよ。やる気だけの問題だね。
723 名前:デフォルトの名無しさん (ワッチョイ c353-PkJR) mailto:sage [2017/03/18(土) 17:01:39.49 ID:U4KC6daQ0.net] 知識がないのに何故語ろうとする
724 名前:デフォルトの名無しさん (ワッチョイ 838b-UnlH) mailto:sage [2017/03/18(土) 17:59:03.48 ID:YXP7lJmh0.net] >それを言いだしたら全部だろ。そうなってないから色々問題なわけで。 std::bind(&F::calc, f, _1, 2)という記述を見たコンパイラはポインタが関係するのでF::calc()を直接呼出しして良いものか迷うかもしれないが、 std::bind(<F::calcを表す関数オブジェクト>, f, _1, 2)なら std::bind()自体の書き方や関数オブジェクトの書き方がよほどアレでない限りはF::calc()直接呼出し相当のコードになる 全部一緒というなら一緒なんだろう藻前の中では(ry
725 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 20:18:06.83 ID:waR+gchT0.net] >>709 いや結局何が言いたいんだ? 君:700「std::bind(&F::calc, f, _1, 2)は最適化されないかも…」 俺:703「それを期待するのは厳しいだろ」 君:704「いやできるし、そうなるべきだ」 俺:707「そりゃそうだが」 人間が見れば簡単に分かることが出来ないなんて!なんてのは全部だよ。 一般的にはポインタになった時点で最適化が難しくなる。 f->calc(x,k); // 直接呼び出し std::bind(&F::calc, f, _1, 2)(x); // 直接呼び出し std::function<...> f; // (G) f = std::bind(&F::calc, f, _1, 2); // (H) f(x); // 2段呼び出し // (I) f = std::bind(&F::calc, f, 2, _1); // (J) f(k); // 2段呼び出し // (K) C++では「戻り値と引数」が合ってたら良いんだろ? だったら(G)はいけるよな? この場合、fには(H),(J)とも可能なんだよ。 バインドされているのは第1引数でも第2引数でもいい。 ところがこれを実行する際、直接呼び出しに展開する為には、 (I)と(K)で呼び出し方法を変えなければならない。 スタック上の引数の位置が異なるからね。 そして一般的には(H)(J)はどこか遠いところで代入されており、 通常はその関数外から与えられる。 だから最適化は難しいんだよ。
726 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 20:18:41.61 ID:waR+gchT0.net] ローカル関数内でfが分かりやすく代入されている場合は完全に最適化出来る。 同様の方法で外部から与えられた場合でも常に最適化する為には、 fに代入される可能性のあるポインタを全て精査する事が必要だが、一般的にこれは無理。 (書いた本人には何が入る可能性があるか簡単に列挙出来るが、 ソースコードから抽出するのはかなり無理) したがって、次案としては、 f自体に「第○引数を第△引数に入れ替え、第●引き数は▲で固定」という情報を持たせ、 対応することになる。(なおこの操作を別関数として行うのが「2段呼び出し」になる。) もっとも、C++のメンバポインタはintサイズでなくてもいいみたいなので、 この方法でも出来なくもないが、VC++ではやってないね。 > VC++で試したところ、普通は4、多重継承していれば8、仮想継承していれば12となりましたが、 > www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03058.html これをやっていれば通常でも4では済まない。 多重で増えているのはポインタのずれを補正する分だね。 > https://www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/feature/jangrayhood/
727 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 20:19:09.95 ID:waR+gchT0.net] 分かるか? 完全に「直接呼び出し」にするには動的データとして「メンバ関数オブジェクト」みたいな物を作り、 それの展開ルーチンをインラインで埋め込まないといけないんだよ。 (サブルーチンで呼び出すと結局2段呼び出しになるだけ無駄) だったらそのままその「展開ルーチン」→「ターゲットメンバ関数」の2段呼び出しでもいいや、ってことになるだろ。 それがVC++でこの部分の直接呼び出し最適化をしていない理由だと思うよ。 多分さほど効果がないんだよ。(やる事自体は難しくない) 表面的な原因は、「第1引数がbindされた関数ポインタ」「第2引数がbindされた関数ポインタ」が 同じ型になってしまうことだよ。だからといって、これらが別型なのは言語として糞だろ。 明示的に分かりやすくその場で代入されている場合は、 これらを別扱いすればいいだけだから比較的楽に対応出来る。 だけど一旦ポインタとして受けられた場合、どれになるかは分からなくなるので無理になる。 それで、ポインタ自体にその情報を与えて動的モドキで対応するよりも、 単純に2段呼び出ししたほうがマシ、という判断が為された、ということだよ。VCでは。 ただ、2段呼び出しは「継承したクラス」を自分で書いた場合で、 std::bindってevalするわけではなくて、静的なライブラリ(=データしか作成出来ない)だよな? だったら内部的に上記「メンバ関数オブジェクト」方式になっている可能性が高く、 2段呼び出しで汎用ルーチンで展開=一番遅いパターンだと思うけどね。 まあここら辺はそっちの方が詳しい気がするが。 で、改めて聞くが、何が言いたいんだ? 俺はCコンパイラを作っているわけではないし、俺に文句言われても知らんがな。 結論としては、 > std::bind()自体の書き方や関数オブジェクトの書き方がよほどアレでない限りはF::calc()直接呼出し相当のコードになる は間違いだね。理由は上記、完全精査はかなり難しいからだ。 (もし出来てるのならスゲーとは思うけど)
728 名前:デフォルトの名無しさん (ワッチョイ 3fe5-eT6H) mailto:sage [2017/03/18(土) 20:25:58.81 ID:vEAnzxNk0.net] std::hashのconstexpr版って標準に入る予定とかないの?
729 名前:デフォルトの名無しさん (ワッチョイ 738b-UnlH) mailto:sage [2017/03/19(日) 00:13:07.69 ID:F98WB86R0.net] >>710-712 長文乙だがstd::bind()が(テンプレート関数なので)インライン展開されるということが何を含意し、 関数オブジェクトと組み合わせたときどういう効果があるかあんまお分かりではなさげ std::bind()内の第1引数への操作がインライン展開されるならば(そのようにstd::bind()自体が書かれているならば 第1引数の操作に関して >人間が見れば簡単に分かること は、 >コンパイラが見れば簡単に分かること と一致する(>>709 の「std::bind()自体の書き方(中略)がよほどアレでない限りは」がソレを指してゐる で、第1引数が関数オブジェクトでありかつF::calc()が仮想関数で無い限りは、F::calc()というシンボルのアドレスが コンパイル時に決まるから、直接呼出しのコードにできる 第1引数がポインタの場合はそうとは限らず、std::bind()の呼び出しの外もみてポインタが指すシンボルが一意であることまで 確認しないとコンパイラはF::calc(this, x, 2)というcallで済むところを(*p)(this, x, 2)的なコードにしかできない
730 名前:デフォルトの名無しさん (スプッッ Sddf-8YZg) mailto:sage [2017/03/19(日) 00:17:51.96 ID:UQylyHTkd.net] お前らのおすすめのデザインパターんおしてて
731 名前:デフォルトの名無しさん (ワッチョイ 738b-UnlH) mailto:sage [2017/03/19(日) 00:18:40.25 ID:F98WB86R0.net] 訂正 誤: F::calc()というシンボルのアドレスがコンパイル時に決まるから、直接呼出しのコードにできる 正: F::calc()というシンボルの呼び出しであることがコンパイル時に確定するから、直接呼出しのコードにできる
732 名前:デフォルトの名無しさん (オッペケ Sr97-w0Gz) mailto:sage [2017/03/19(日) 00:38:21.66 ID:rBaNXWYpr.net] >>715 とりあえずRAIIは使っとけ ナマポをnewする奴は殺害されても犯人に情状酌量の余地が残る
733 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/19(日) 00:38:32.17 ID:Sogj9z7eM.net] >>715 expression template
734 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 01:10:03.99 ID:7dJ8iAqk0.net] >>714 日本語で説明しようとしたのはまずかった。C++で書き直すと、以下。 ただしC++文法には詳しくないので、syntaxErrorは適宜脳内修正よろしく。 意味だけ見てくれ。ソースは>>666 から流用してる。 class F { int _a; public: F(const int a):_a(a) {} int calc(const int x, const int k) const { return k * x + _a; } }; int main() { const F f0(1); const F f1(2); std::function<...> f0_1 = std::bind(&F::calc, f0, _1, 3); // 第2引数を固定 std::function<...> f0_2 = std::bind(&F::calc, f1, 4, _1); // 第1引数を固定 std::function<...> f1_1 = std::bind(&F::calc, f1, _1, 5); // 第2引数を固定 call_sub(F0, f0_1, f0_2); call_sub(F1, f1_1, f0_1); } void call_sub(F& f, std::function<...> f1, std::function<...> f2){ f->func(1,2); // (L) 直接呼び出し f1(3); // (M) コンパイラによっては直接呼び出し、一般的には2段階呼び出し f2(4); // (N) 2段階呼び出し }
735 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 01:10:33.50 ID:7dJ8iAqk0.net] (L)は必ず直接呼び出しになる。アセンブラなら push, push, push, call (M)はソース上を精査すれば同型呼び出ししかないことが分かるので 技術的には(L)と同程度まで最適化可能ではあるが、一般的には無理だと思う。 2段階呼び出し時は push, push, push, call, mov, jmp (N)は異なる形の呼び出しが与えられているので、 技術的に(L)と同じコスト(アセンブラ4命令程度)の直接呼び出しは不可能。 無理にcmpとかやるより普通に2段階呼び出しの方がいいと思う。 だからVCもそうしていると見ている。 それで、std::bindについては詳しい奴が以下見れば実装の見当が付くはずだが、 俺はC++用語に詳しくないので分からん。 ja.cppreference.com/w/cpp/utility/functional/bind 俺が実装するなら、ありがちなのをテンプレートで実装するが、 その場合はポインタサイズはsizeof(int)*2になる。 (メンバ関数へのポインタと、bind済みの値をstructで持つ=内部的な匿名クラスにするから) VCがなぜ4に出来るのかは分からん、というか計測間違いじゃないかと思う。 (バインド済みの値の分を入れてない)
736 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 01:11:05.58 ID:7dJ8iAqk0.net] 俺が言いたかったのは、上記(L),(M),(N)ということ。 君の主張は、すべてbind時で確定して、上記(M)(N)も(L)と同じコストで呼べるという主張だと読める。 それは無理。 確かにアドレス自体は確定はするが、 引数をbindしているのだからスタックをその形にしてやらないといけない。 上記(N)の呼び出し、アセンブラ4命令ではどうやっても書けないだろ。 cmp使って書くくらいなら2段階呼び出しで6命令(2分岐)の方がマシ。 cmp使って無理に直接呼びにしたら、 そこに来る可能性のある呼び出し型を全部そこに書かなければならなくなる。 そしてx86はプレディケートを持ってないので、cmpで分岐しないといけない。(ARMは持っている) それって完全に本末転倒だろ。 それで、std::bindと関数オブジェクトをどう組み合わせたら、 (L),(M),(N)について上記通りアセンブラ4命令程度で呼び出せるのかよろしく。
737 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 01:17:42.85 ID:7dJ8iAqk0.net] すまん、重要なところを間違えていたので訂正。 >>719 > std::function<...> f0_1 = std::bind(&F::calc, f0, _1, 3); // 第2引数を固定 > std::function<...> f0_2 = std::bind(&F::calc, f1, 4, _1); // 第1引数を固定 > std::function<...> f1_1 = std::bind(&F::calc, f1, _1, 5); // 第2引数を固定 の2つ目、インスタンスは f0 ね。 std::function<...> f0_2 = std::bind(&F::calc, f0, 4, _1); // 第1引数を固定, f0 ただ結局、変な引っかけみたいになっているだけで意味は同じかな? まあ訂正しとくけど。
738 名前:デフォルトの名無しさん (ワッチョイ bfcc-UNkP) mailto:sage [2017/03/19(日) 01:31:51.96 ID:i6MRGbY60.net] まだJAVAガイジ張り付いているのか…
739 名前:デフォルトの名無しさん (ワッチョイ 8330-PVeP) mailto:sage [2017/03/19(日) 01:41:06.04 ID:I9SbzQA70.net] あんだけ無能な醜態をさらしておいて ボクはレベルが高いけどちょっと知らなかっただけちょっと間違えただけで済んで まだ自分のいうことに説得力がある聞いてくれる人がいると思ってるところがもうね…
740 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 01:44:23.31 ID:7dJ8iAqk0.net] bindの説明読む限り、やっぱこれかなり汎用に作っていて遅いと思うぞ。 ただ一般的にはそこが見えるほど使うことはないと思うが。 アセンブラ的には、 f->func(): 4命令程度(分岐1回) std::bind経由での呼び出し: 10-50命令程度か?(分岐2回以上) 内部オブジェクト作成方式: 6命令程度(分岐2回) じゃないかな。
741 名前:デフォルトの名無しさん (ワッチョイ 537b-gO1F) [2017/03/19(日) 01:49:16.54 ID:jcDR9uoj0.net] まぁ、別にスレ違いというわけでもないからいてもいいんじゃない?付き合いたい人が付き合えば。 俺はレスしないけど。
742 名前:デフォルトの名無しさん (ワッチョイ 537b-v8EU) mailto:sage [2017/03/19(日) 01:59:32.09 ID:jcDR9uoj0.net] と、言ったものの、我慢しきれないので撤回します。 >>725 https://godbolt.org/g/SFtHQt こうなる意味を考えて。 もう一つヒントあげるとstd::function<int()>で受けるとどうなるか見てみたらいいよ。
743 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 02:14:29.60 ID:7dJ8iAqk0.net] 誰かと思えば>>678 か。 じゃあついでに言っておくと、以下だね。 callbacks.push_back([&]{a.func();}); // (O) クロージャ作成が無駄 callbacks.push_back(a->func)); // (P) この書き方は現在出来ないが、こっちの方がいい JavaScriptでは(O)は無駄だとされる。クロージャが余分にメモリを食うから。 クロージャ無しで書けるならその方がいい。コード領域も無駄だし。 これはC++も同じだし、C++の方が厳しいはずだが。 とはいえstd::bindの仕様が重すぎるのでこちらもイマイチだ。 C++ならどっちが重いかは微妙だね。 なおJavaScriptのbindは「前から順に固定される」だけの仕様なので、 固定した引数分のデータ領域しか各bindインスタンスには必要ない。 というかC++のbindが妙にリッチな仕様なのが謎だが。C++っぽくない。
744 名前:デフォルトの名無しさん (ワッチョイ 537b-gO1F) [2017/03/19(日) 02:17:00.87 ID:jcDR9uoj0.net] >>728 C++なら無駄ではない 終了
745 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 02:19:33.17 ID:7dJ8iAqk0.net] >>727 俺には計算済みとしか見えないが、何か操作必要? -O3外せとかか? > fn(int): > lea eax, [rdi+rdi] > ret > bind(): > mov eax, 4 > ret > direct(): > mov eax, 4 > ret
746 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 02:28:44.92 ID:7dJ8iAqk0.net] >>727 というかな、根本的に間違ってると思うぞ。 一般的に関数ポインタを使う場合、それは外部から与えられるんだよ。 自分の内部で作って使うって事はない。 (ここでは単純なソースで議論するからそうなるだけで、一般的にはそうではない。 つか、それじゃ関数ポインタの意味がないし) 典型的にはcallbackだよ。外部から与えないと全く意味無いだろ。 で、その場合は当然この手の事前計算とかでの最適化は出来ないんだよ。
747 名前:デフォルトの名無しさん (ワッチョイ 537b-v8EU) mailto:sage [2017/03/19(日) 02:33:33.53 ID:jcDR9uoj0.net] >>731 一時一句同じじゃないと理解できない人だったか。 https://godbolt.org/g/o73pz4 これで理解できますか?
748 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 02:51:38.54 ID:7dJ8iAqk0.net] >>732 あーお前がアホだということはよく分かったわ。 まともに議論する気なら、お互いが見ているものが同一であることを確認しないといけない。 >>727 を見たらアホかと思うのは道理だろ。 そして>>732 もアホかと思うよ。関数内部で何を作ってもそれは最適化されるよ。 それは一時変数を除去すればいいだけなのだから。 そうではなくて、例えば以下にしないといけない。 int main(){ auto f = std::bind(&something::func,ptr); bind(f); } int bind(std::function<...> f){ return f(); // bind済みのfを呼ぶコストをここで計測する } 再度言うが、関数ポインタは外部から与えないと意味無いんだよ。
749 名前: てかお前ら実は全く関数ポインタ使ってないだろ。 だから使い方自体を知らないんだよ。 これで、bind/関数オブジェクト/クロージャで呼び出しコストを比べてみなよ。 当たり前だが上記だとbind呼んで終わりになるけど、 もちろんその先のターゲット(something::func)が呼ばれるまで見るんだよ。 つまりstd::bind内部のコードもね。それが呼び出しコストなんだから。 それで、あらかじめ計算済みとかいうアホなオチはマジで止めてくれ。 一般的にポインタを与えた場合、それが無理なことくらい分かるだろ。 [] [ここ壊れてます]
750 名前:デフォルトの名無しさん (ワッチョイ 537b-v8EU) [2017/03/19(日) 03:14:07.27 ID:jcDR9uoj0.net] >>733 注文の多いやつだなぁ。 https://godbolt.org/g/R1ljMl 関数ポインタを外から渡すようにかえてやったぞ。 自分で言ってることをC++で書く能力ぐらいあるよね? 次から自分で書けよ。 std::bindに余分なコストなんてない。std::functionの方にある。 ヒントあげたのに全く考えようとしなかったのかな?
751 名前:デフォルトの名無しさん (ワッチョイ 537b-v8EU) mailto:sage [2017/03/19(日) 03:24:22.16 ID:jcDR9uoj0.net] >>733 なぜか一時変数だから最適化できると信じてるみたいだけど、そう思うなら int std_function(something* ptr,fn_ptr_type fptr){ std::function<int()> f = std::bind(fptr,ptr); return f(); } と書いてみればいい。 >そして>>732 もアホかと思うよ。関数内部で何を作ってもそれは最適化されるよ。 >それは一時変数を除去すればいいだけなのだから。 がバカな発言だったと理解できると思うから。
752 名前:デフォルトの名無しさん (ワッチョイ 0f59-Rjy3) mailto:sage [2017/03/19(日) 03:38:13.98 ID:xwQyhAst0.net] ああ、Javaだと〜とか言ってた人か
753 名前:デフォルトの名無しさん (ワッチョイ cf6b-8YZg) mailto:sage [2017/03/19(日) 08:10:18.88 ID:oCYtEhVi0.net] >>717 調べても出てこない.... コンストラクタとデストラクタでNewとかするやつだっけ?? >>718 数式を渡して分かりやすくするってのはなんとなくわかったんだけど 逆にごちゃごちゃしすぎてる気がするって印象を受けた
754 名前:デフォルトの名無しさん (ワッチョイ ef6c-i8cA) mailto:sage [2017/03/19(日) 08:15:20.51 ID:gWCLtiPs0.net] >>737 デストラクタでdeleteやで expression templateは効果がどうなの?って思い始めてる 普通にコンパイラの最適化に任せた場合とそんなに変わるんかな
755 名前:デフォルトの名無しさん (ワッチョイ cf6b-8YZg) mailto:sage [2017/03/19(日) 08:18:02.91 ID:oCYtEhVi0.net] >>738 すまん とかにまとめた scope抜けたときに必ず処理させるってやつよね 確かに必要なやつだな コード見やすくってやって逆に色々と設定があると逆に見にくくなるんじゃないか?って疑問が残った 今はあとシングルトンパターンぐらいしかわかんないや
756 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 08:46:03.88 ID:7dJ8iAqk0.net] 訂正ね。 >>733 × std::bind内部のコードもね。 ○ std::functionのoperater()の内部のコードもね。 処理系の実行コードも、という意味で書いたが、 std::bindはstd::functionを返すので今回についてはoperator()のコードになるのだよな? まあ間違っていたら適宜訂正してくれ。分かる範囲だと思う。 >>734 > std::bindに余分なコストなんてない。std::functionの方にある。 これが上記について言っているのならその通り。 ただそれは揚げ足取りだと分かるだろ。それがやりたかったのならどうぞ、おめでとう。 それが分からないのなら君にはこの話は無理だね。 というわけでいずれにしてもこの話は終わりでいい。
757 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 08:47:04.27 ID:7dJ8iAqk0.net] 一応中身は確認した。 >>734 については呼び出し側は全部同じコードが出るという事ね。ここまではいい。 問題はその先だ。それは君も分かってるんだろ?だったら何故それをしない? >>735 > なぜか一時変数だから最適化できると信じてるみたいだけど、そう思うなら これについては相変わらずそちらが間違いだね。 事前計算済みのコードをドヤ顔で出してきたのはそちらだろ。 それはコンパイル時に「事前計算が出来る」ということがコンパイラにも分かったから。 とはいえ、君みたいな奴も沢山いるのも事実だよ。 > と書いてみればいい。 書いてみたらstd::functionのコードが出た。 中身は今の俺にぱっと分かるようなものではないね。 が、まあ、100命令弱増えているからその分遅いと言える。 だから結論は、直接=ファンクタ<<<<bindになるのかな? ファンクタは正直ピンとこない。 あとは>>729 で無駄がないとドヤ顔のラムダがどこまで速いかだね。 まあ頑張って。 いずれにしても、この話は終わりでいい。 俺が確認したい範囲はもう分かった。
758 名前:デフォルトの名無しさん (ワッチョイ 537b-gO1F) [2017/03/19(日) 08:51:40.65 ID:jcDR9uoj0.net] >std::bindはstd::functionを返すので今回についてはoperator()のコードになるのだよな? ここまで書いても理解出来ないのかよ…
759 名前:デフォルトの名無しさん (ワッチョイ 537b-gO1F) [2017/03/19(日) 09:00:02.50 ID:jcDR9uoj0.net] >>741 俺はただ知識がないやつをバカとは思わないが、お前みたいな自分が理解出来ないのを相手のせいにしてアホなんて言う奴は本当にバカだと思うよ。 書いておかないと理解しなさそう(=出来なさそう)だから一応書いておいてあげるよ。 std::bindの返りの型はstd::functionでは”ない”
760 名前:デフォルトの名無しさん (オッペケ Sr97-w0Gz) mailto:sage [2017/03/19(日) 09:08:50.00 ID:EshC/yEQr.net] >ID:7dJ8iAqk0 コストは 直接=ラムダ=bind <<< std::function bindとstd::functionは関係無い functionにbindを重ねればfunctionのコストがそのまま残る
761 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 09:17:50.63 ID:7dJ8iAqk0.net] >>743 だから俺はそこら辺までは詳しくないのさ。 繰り返しているとおり、std::bindの説明を読んでも全てを今すぐ理解する知識はないんだよ。 俺はC+JavaScriptだからね。C++はbetterCとして使ってきてるが、 VC++(=CLI)だからSTLを使ったことはなく、.NETだし。 C++特有のテンプレートとか型消去については 「動的型なら何も考える必要ないのに」で飛ばしてきたし、 RAII+スマポについても「そこまで言うならGC言語使えよ」としか思ってない。 だから今、型消去とかも読んでるけど、これを理解するには時間がかかるし、 上記の通りSTLについてもほぼ知らないから、これまたインストールに時間がかかるんだよ。 > std::bindの返りの型はstd::functionでは”ない” まあそれはさておき、std::bindは何が返るんだこれは? 型消去で無理矢理格納出来るだけなのか? ただ、実行時はstd::functionのoperator()が呼ばれると思うが、これも違うのか?
762 名前:デフォルトの名無しさん (ワッチョイ 537b-gO1F) [2017/03/19(日) 09:26:27.21 ID:jcDR9uoj0.net] >>745 知らないなら想像で実行時コストとか決めつけるなよ auto f=std::bind(func); f(); と std::function<int()> f=std::bind(func); f(); で出力されるコードが違うんだから違うと
763 名前:解るもんだとおもってstd::function版を書かせたんだけど、何が解らなかったのかな? [] [ここ壊れてます]
764 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 09:41:13.37 ID:7dJ8iAqk0.net] >>744 あー何となく分かってきた。以下ページ、 ja.cppreference.com/w/cpp/utility/functional/bind の「メンバ関数 operator()」ってとこが呼ばれるのか。つか英語版見るべきだったかも。 じゃあ当初の「std::bind内部のコードもね」でも十分通じる気もするが、まあこれはいい。 いずれにしても俺はこの通り、cppreferenceの見方もよく分かってない。 だから君らに追いつくのは時間がかかる。 > コストは 直接=ラムダ=bind <<< std::function ラムダは最高に最適化された状態でbindと同じ。 bindもoperator()の内部でプレースホルダ引数の配置をするのなら、 同様に最高に最適化された状態で直接と同じ。 結果、直接=<bind=<ラムダ じゃないか? まあこれについてはそちらの方が詳しいだろうし、こちらも引き続き詳細確認中だが。
765 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/19(日) 09:49:17.20 ID:7dJ8iAqk0.net] ちなみに誰かと確認してみたが、 > std::bindを見てECMAScriptのbindingと同じものだと勘違いしていただけか。(>>688 ) なるほど、その通りだ。俺が思っていたbindとはだいぶ違う。
766 名前:デフォルトの名無しさん (ワッチョイ 5319-v8EU) mailto:sage [2017/03/19(日) 09:52:16.04 ID:/fHKNSq50.net] 直接<間接=関数ポインター<λ<バインド なぜならバインドは内部で関数ポインターを使うしかないから ラムダは言語で実装されてるから。
767 名前:デフォルトの名無しさん (ササクッテロル Sp97-q0jq) mailto:sage [2017/03/19(日) 17:47:12.05 ID:SFAOW7ATp.net] 関数呼び出しのコストでここまで議論できるって凄いな 普段C++で何作ってんだろ
768 名前:デフォルトの名無しさん (ワッチョイ 537b-gO1F) [2017/03/19(日) 18:17:17.48 ID:jcDR9uoj0.net] >>750 議論ではなく出来の悪い生徒の補習してただけだから。
769 名前:デフォルトの名無しさん (ワッチョイ f37b-12+v) mailto:sage [2017/03/19(日) 18:21:02.30 ID:V1EWIlT/0.net] ギリギリ迫るのも楽しいものです
770 名前:デフォルトの名無しさん (ワッチョイ 2302-nFTW) mailto:sage [2017/03/19(日) 18:49:00.48 ID:6JgBGVv40.net] >>750 え、Hello worldだよ?
771 名前:デフォルトの名無しさん (ワッチョイ 7302-12+v) mailto:sage [2017/03/19(日) 20:26:30.60 ID:fEuC6OUR0.net] ある時系列データにフィルタを通した任意の範囲のデータを扱うクラスを作るんだが 今だとイテレータよりRangeの方が良いのか?
772 名前:デフォルトの名無しさん (ワッチョイ f37b-12+v) mailto:sage [2017/03/19(日) 22:20:21.59 ID:V1EWIlT/0.net] もう少し具体的に と思います
773 名前:デフォルトの名無しさん (ワッチョイ 8330-PVeP) mailto:sage [2017/03/20(月) 00:26:19.05 ID:V0m6X4Gc0.net] 基本的にレンジはイテレータのペアのラッパでしかなく イテレータが無くなるわけでもないからとりあえずはイテレータを前提に作っておけばよかろ
774 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/20(月) 12:05:47.42 ID:OlwkB3mR0.net] >>737 expression templateは遅延評価による高速化のために使うんやで 速度が必要無いなら要らんのやで >>738 実測してみた? 二項演算子(または結果を戻り値で返す関数)を多用する場合、 x, y, zを持つベクトルなんかだと明らかに効果ある 組み込み型だと全く効果ない
775 名前:デフォルトの名無しさん (ワッチョイ ef6c-i8cA) mailto:sage [2017/03/20(月) 13:05:30.60 ID:ZNh1GxS+0.net] >>757 いつか実装して確かめてみようとは思うんだけど ・数学的に簡略化が可能な場合は当然事前にできるだけ簡略化する ・計算途中の値もよく使うので=が出てきて評価が頻繁 な場合、あんまり効果なさそうだなあというところで二の足
776 名前:デフォルトの名無しさん (ワッチョイ 5319-v8EU) mailto:sage [2017/03/20(月) 13:17:35.04 ID:hOjZeIpo0.net] expression templateってコンビネーターのことじゃね?
777 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/20(月) 13:29:36.59 ID:o1Hy6TV3M.net] >>758 計算途中の値もよく使うって、それ途中と違うがな 函数という考え方について、もう少し勉強した方がいい
778 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/20(月) 14:06:32.00 ID:OlwkB3mR0.net] >>758 あーまだ実装してないのね 自分の実用するコード(4次元までのベクトル、4x4
779 名前:ワでの行列)だと5〜30%くらいの向上なんで、実装する労力考えると最後のダメ押しでもよかったなとは思うけど >・計算途中の値もよく使うので=が出てきて評価が頻繁 一応、a = b + c;程度の式でも効果あるにはある 多分インライン展開されても、レジスタの使用効率がちょっと良くなるんだと思う a = b + c; みたいな式で for (int i = 0; i < 3; i++) a.f[i] = b.f[i] + c.f[i]; という計算に展開された方が、レジスタを使い切らないからじゃないかなと (ちなみにループはアンロールされる前提だけど、ヒープに確保するような長いベクトルでもETの方が効率良いはず あとこの例だと、SSEとかのSIMDのイントリンシック使うと4次元まで組み込み型になるので、全くETの意味が無くなるw) 複数の組み込み型を含む演算で、SIMDとか他の高速化を使った上でさらに速くしたいなら、ETはおすすめしたい ただし計算過程でxがy, zに干渉するような計算(内積、外積とか)にはET使えないので注意 [] [ここ壊れてます]
780 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/20(月) 14:14:14.02 ID:OlwkB3mR0.net] 訂正 Xxがy, zに干渉するような計算 ○各要素を複数回評価するような計算 a = cross(b, c); なら大丈夫だけど a = cross(b, c) * d; とかやると乗算の回数が増えるし計算結果が狂ったりする
781 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/20(月) 14:25:46.95 ID:o1Hy6TV3M.net] >>762 横から補足 ublasなんかは複数回評価を前提としてて、そのまま使うと遅い なので、noaliasというものが用意されてる
782 名前:デフォルトの名無しさん (ワッチョイ cf6b-8YZg) mailto:sage [2017/03/20(月) 16:40:52.42 ID:d0t0+ba+0.net] なるほど よくわからん
783 名前:デフォルトの名無しさん (ワッチョイ bf0b-8YZg) mailto:sage [2017/03/20(月) 17:28:44.64 ID:lZKrgjvb0.net] 結論 expression templateは科学系数値計算にしか効果はない そういうのは既にライブラリーが存在する よって自分でexpression templateを実装する必要に駆られる場面はほぼない
784 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/20(月) 18:08:39.79 ID:OlwkB3mR0.net] >>765 >科学系数値計算にしか効果はない ではなくて、「速度が必要な場面でも、実装する優先度は低い」ならわかる 自分が以前調べた限りでは、ETとSIMDを同時に使ってるものは無かった はっきり言って、速度が重要な局面かつSIMDが使えるマシンなのにまずSIMDを使わないというのは有り得ない けなすわけではないが、SIMD命令がある一般的なマシンにおける数値計算には、今あるETのライブラリはまともに使えんのじゃないか ていうか科学計算ならETより、SIMDやGPGPUを使う方が先 自分の場合はゲームでの計算なんで、CPUかつヒープじゃなくスタックを使う必要があるので その時点でuBlasやBlitzは選択肢から外れるんだわ
785 名前:デフォルトの名無しさん (ワッチョイ 7302-12+v) mailto:sage [2017/03/20(月) 18:31:45.48 ID:E6+3UOyx0.net] あらゆる面で最適化したオープンソースな数値計算ライブラリを作るような人なんて世界でもほぼ居ないだろ 数学と物理や化学とC++での数値計算に関する造詣が深くて、処理系やユースケースを想定して形にできなければいけない 金にならないし趣味にするには地味すぎる 論文が書ければいいけどライブラリ開発自体をメインにすることはできるのかどうかよくわからんし
786 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/20(月) 19:35:01.25 ID:OlwkB3mR0.net] そういうライブラリはかなり難しいだろうね・・・ だから結局自分で作る必要があるんだわ(ETは労力やバグ回避がアレだけど、効果が無いわけではない)
787 名前:デフォルトの名無しさん (ワッチョイ cf6b-8YZg) mailto:sage [2017/03/20(月) 19:39:51.74 ID:d0t0+ba+0.net] お前らの作成したライブラリを配布したらさいつよじゃね?
788 名前:デフォルトの名無しさん (ワッチョイ 537b-gO1F) [2017/03/20(月) 19:44:06.12 ID:+YHRRlIg0.net] Eigenがexpression templateもSIMDも実装してたと思うけど
789 名前:デフォルトの名無しさん (ワッチョイ cf6b-8YZg) mailto:sage [2017/03/20(月) 19:47:48.92 ID:d0t0+ba+0.net] お前らってコード書くとき明示的にスコープ使う??
790 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/20(月) 20:52:21.66 ID:OlwkB3mR0.net] >>770 あーー、そういえばあった・・・・w すまん大嘘こいてた https://ja.wikipedia.org/wiki/C%2B%2B_AMP ちなみにマイナーながらこんなんもある >>771 stdならstd::つけて、それ以外ならusing宣言でよく使うやつだけ取り込むかなぁ
791 名前:デフォルトの名無しさん (ワッチョイ ef8c-h49x) [2017/03/21(火) 00:17:02.18 ID:ooaEszBV0.net] Expression templateって右辺値参照ある今でも必要なの?
792 名前:デフォルトの名無しさん (ワッチョイ a38a-GEdz) mailto:sage [2017/03/21(火) 00:34:26.33 ID:WRmS2jUL0.net] 式テンプレートって遅延評価やそれを利用した最適化が主な目的だとおもうのだけど、それがなんで右辺値参照があるからいらなくなるの?
793 名前:デフォルトの名無しさん (ワッチョイ ef8c-h49x) [2017/03/21(火) 00:42:40.72 ID:ooaEszBV0.net] a = b + c + d の形式の時のコピー数減らすのが式テンプレートの主な功績だとしたら右辺値参照で同じように減らせると思ったんだけど、実際それ以上の最適化ってされてるの?
794 名前:デフォルトの名無しさん (ワッチョイ 7302-12+v) mailto:sage [2017/03/21(火) 00:59:40.31 ID:/NjqKBkb0.net] アセンブラで書くのが一番速い
795 名前:デフォルトの名無しさん (ワッチョイ f3e7-ajdi) mailto:sage [2017/03/21(火) 01:12:11.02 ID:3hTmI8gX0.net] KoDaIJiN
796 名前:デフォルトの名無しさん (ワッチョイ bf3a-lir9) mailto:sage [2017/03/21(火) 01:44:12.85 ID:2crVP7Yr0.net] 石を焼いてしまうのが、一番早い気がする
797 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/21(火) 02:23:03.72 ID:wE8b83TD0.net] >>775 ヒープに確保するようなクラスの演算なら、コピーのコストはそうだね(推測だけど ただし>>761 に書いたようなレジスタ効率(a.f[0]の代入が終わったらストアして以降f[0]を無視できる)もある
798 名前:デフォルトの名無しさん (ワッチョイ 33e6-8FG5) [2017/03/21(火) 03:29:49.89 ID:+DL1LwCN0.net] >>778 それ速いけど早くない
799 名前:デフォルトの名無しさん (ササクッテロレ Sp97-GEdz) mailto:sage [2017/03/21(火) 11:41:46.69 ID:Ub2NtCH4p.net] >>775 たとえばeigenなんかは必要な要素だけ計算されるような工夫があるようだけど
800 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/21(火) 12:20:28.06 ID:ovrpZx5v0.net] 全く理解してないし、今日初めて知ったんだけど 遅延評価といっても所詮静的なものだから こんなものはコンパイラが最適化を超がんばれ、って思う たぶん事の本質は演算の順番を変えることで (縦に計算するか、横に計算するか、みたいな?) 最適化がかかりやすくなったり速く動いたりできるかもね って事なんじゃないかと俺は勝手に思った ただ愚直に演算の順番を変えると記述性に問題が出てくるから それを防ぐテクニックなのかなーと よくわからないけど
801 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/21(火) 12:35:09.71 ID:bH1u/9cj0.net] Expression templateの一時変数問題は ムーブコンストラクターで解決された問題だよね。
802 名前:デフォルトの名無しさん (ワッチョイ 737a-12+v) mailto:sage [2017/03/21(火) 12:36:27.24 ID:/NjqKBkb0.net] プログラムが扱いやすいように初期値を設定してやるのは人間の仕事
803 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/21(火) 12:54:01.22 ID:ovrpZx5v0.net] 全く理解していない俺が言うのもなんだけど ムーブコンストラクタは関係ないと思う 演算順序を変えないことには何処かに一時的に計算結果を保存しておかないと ダメなことには変わりないのでは? tmp[0] = a[0] + b[0]; tmp[1] = a[1] + b[1]; r[0] = tmp[0] + c[0]; r[1] = tmp[1] + c[1]; と r[0] = a[0] + b[0] + c[0]; r[1] = a[1] + b[1] + c[1]; の違いじゃないかなー これで配列のサイズが1000とかだったらかなり差が出るんだろう ただ、普通にforループ書けば?って気もするが そこを演算子のオーバーロードでどうしても記述したいってのが 例の技術なのかと 俺には必要ないかなー 要素数の少ないベクトルはSIMD使うし、要素数の多い配列はループ回すし
804 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/21(火) 13:04:15.57 ID:bH1u/9cj0.net] a[0] += b[0]; a[0] += b[1]; c[0] += a[0]; c[1] += a[1]; r[0]=c[0] r[1]=c[1] ムーブコンストラクターを使うとこうなる
805 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/21(火) 13:13:33.00 ID:ovrpZx5v0.net] やだー それ、aとcが破壊されているじゃないですかーー r=a+b+c; と同等のコードになりませんよ? あなたのは a+=b; c+=a; r=c;ですが そもそも「+=」で破壊していく方針なら、何にも新しくコンストラクトしないんだから これまたムーブコンストラクタ関係ないじゃないですかーー どこからムーブコンストラクタが出てくるんですか? もっとC++勉強してくださいよー
806 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/21(火) 13:23:51.34 ID:ovrpZx5v0.net] r = a + b + c を計算しようと思うと、これはr = (a + b) + c に分解されるだろうから 根本的に(a + b)の結果を保存しておく一時変数がいる レジスタに配置されるかもしれないとかそういうことはおいておいて とりあえず一時変数がいる で、a,b,c,rがベクトルだった場合、一時変数もベクトルになる これはあまり美味しくない場合がある、ということで 各要素にばらして要素ごとにr = (a + b) + cを実行する そうすると一時変数はスカラーになる しかし記述性に難が出るので、それを何とかしようとした ↑これが基本的な要点かと
807 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/21(火) 13:29:00.21 ID:bH1u/9cj0.net] 間違えた tmp[0]=a[0] + b[0]; tmp[0]=a[1] + b[1]; tep[0]+=c[0]; tep[1]+=c[1]; r[0]=temp[0] r[1]=temp[1] 一時変数が一個で良いってことだな aかbが右辺値なら1個だ
808 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/21(火) 13:30:57.12 ID:bH1u/9cj0.net] また間違えた、aかbが右辺値なら0個だ
809 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/21(火) 13:32:10.85 ID:wE8b83TD0.net] >全く理解していない俺が言うのもなんだけど どこが全く理解していないのかと小一時間w ただムーブ代入演算子やコンストラクタがあれば、”ヒープに要素を確保するクラス”限定で ヒープ確保や代入命令のコストがポインタのすげ替えだけで済むのはある(>>779 ) でもスタックに確保するような固定長のベクトルとかだと、>>785 の通り代入命令の回数が バカにならないので結構差が出てくる 「C++の演算子オーバーロードは遅い」なんて言われることがあるけど、その理由がこれだと思う 演算子オーバーロードが遅いんではなく、計算結果を戻り値で返す関数が遅い (これは計算結果を保証するためなのかどうしようもないんだろうけど) なのでそれを回避するために算術代入使おう、という論もある ただし遅いと言ってもFortranとC/C++の差のレベルなんでアレだけど・・・・ 多分愚直な演算子で書いても、全てインライン展開されれば最適化でベストなコードになると思うんだけど・・・(誰か知ってる人頼む
810 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/21(火) 13:32:18.98 ID:bH1u/9cj0.net] もう一個訂正tmp =temp,tem,tmp
811 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/21(火) 13:37:29.55 ID:wE8b83TD0.net] >>789 右辺値についてだいぶ誤解してないか? ムーブコンストラクタ/代入演算子は引数が右辺値である場合の実装を分けられるだけやで
812 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/21(火) 13:41:08.81 ID:bH1u/9cj0.net] 実際に tmp[0]=a[0] + b[0]; tmp[0]=a[1] + b[1]; tep[0]+=c[0]; tep[1]+=c[1]; r[0]=temp[0] r[1]=temp[1] 上のと同等の演算が r[0] = a[0] + b[0] + c[0]; r[1] = a[1] + b[1] + c[1]; で出来るというわけで実際に 3回に計算するわけじゃないよ
813 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/21(火) 13:41:36.76 ID:wE8b83TD0.net] 訂正 Xヒープ確保や代入命令のコストがポインタのすげ替えだけで済む ○最後の代入演算子で発生するヒープ確保や代入命令のコストがポインタのすげ替えだけで済む a, b, cの演算結果は依然としてコストあるね
814 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/21(火) 15:17:50.73 ID:ovrpZx5v0.net] そーゆーことでしょうな むしろ内部でstd::vectorとか使ってベクトル表現している方が 要素ごとにバラして計算するメリットが出るだろうね 計算途中の一時変数がstd::vectorになるのとスカラになるのとでは 全然違うというか話にならないからね あと > ○最後の代入演算子で発生するヒープ確保や代入命令のコストがポインタのすげ替えだけで済む だけど、たぶんだけどstruct vec{ int x,y,z; };みたいなやつだと 最後の代入はコンパイラの最適化で消えてなくなるだろうから気にしなくてもよいはず C++にmoveホゲホゲが出来る以前からあった古来からの基本的な最適化だったはず まぁoperator=を定義して余計なことしてたらその限りじゃないかもしれんが
815 名前:デフォルトの名無しさん (スプッッ Sddf-8YZg) mailto:sage [2017/03/21(火) 16:21:56.57 ID:rDA5FTfNd.net] umdhの結果でleak検索して出てこなかったらメモリリークしていないって判断して問題ない??
816 名前:デフォルトの名無しさん (ワッチョイ f33c-u6wT) mailto:sage [2017/03/21(火) 18:56:32.83 ID:wE8b83TD0.net] >>796 RVOのことかな?そういえば完全に忘れてた・・・ 確かoperator =を定義していようが副作用があろうが、コンパイラは勝手に コンストラクタや代入演算子の呼び出しを減らしていい、って感じだったと思うんだけど もしかして同じ機能のコンストラクタがあるならoperator =は無駄??
817 名前:デフォルトの名無しさん (ワッチョイ bf90-tpgq) mailto:sage [2017/03/21(火) 22:33:32.67 ID:QxtkUNUp0.net] map<T,U> map; とか for (auto pair : map) というのをつい手癖でやってしまうのですが こういう名前の付け方はやめたほうがいいですか?
818 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/21(火) 22:47:54.58 ID:ovrpZx5v0.net] 大前提としてチームで開発しているならチームのリーダーに質問してください 自分一人で書いてるなら変数名なんかなんでもよいよ 自分で書いたコードでも一年たったら他人が書いたコードのように読めない っていう人もいるけど、実際には普通に読めるから変数名は思い付きのテキトーでよい 型名をもじってそのまま変数名にするってのは俺もよくやる 実際変数名は本当に何でもよくて なぜならスコープが狭かったり、クラスのプライベートメンバだったりして ごちゃごちゃになったりしないから 問題はクラス名と関数名で、こちらはいつも悩む
819 名前:デフォルトの名無しさん (ワッチョイ bfcc-UNkP) mailto:sage [2017/03/21(火) 22:53:34.07 ID:BqDV4BtF0.net] やめたほうがいい あとあと混乱するから
820 名前:デフォルトの名無しさん (スップ Sddf-Ma5U) mailto:sage [2017/03/21(火) 22:53:51.11 ID:chOyeLILd.net] あとはインタフェースの一部としての引数名かな。 総じて.cppファイルにだけ書かれる名前はテキトー
821 名前:デフォルトの名無しさん (ワンミングク MM5f-W3uL) mailto:sage [2017/03/21(火) 23:38:01.75 ID:XhVovTkQM.net] >>799 mapはデータ構造だろ 変数名はそれが何を格納してるかを表してなきゃダメだと思うけど
822 名前:デフォルトの名無しさん (ワッチョイ 03b4-w0Gz) mailto:sage [2017/03/21(火) 23:45:02.12 ID:5oluTi0x0.net] >>803 は健常者
823 名前:デフォルトの名無しさん (ワッチョイ bf90-tpgq) mailto:sage [2017/03/21(火) 23:57:16.03 ID:QxtkUNUp0.net] >>800-804 ありがとうございます。くだらぬ質問でしたね、すみません とりあえず狭いスコープの一時変数用途では map<T,U> m; for (auto p : m) みたいにしておきます
824 名前:デフォルトの名無しさん (ワッチョイ 3fd1-q0jq) mailto:sage [2017/03/21(火) 23:59:23.77 ID:eniBTwk40.net] やめた方がいいですか?なんて聞いてる時点で本人の中でも既に答えは出ているのでは
825 名前:デフォルトの名無しさん (ワッチョイ 737a-12+v) mailto:sage [2017/03/22(水) 00:10:41.47 ID:kq8u5G9J0.net] 使い捨てならアンダーバー付けろ
826 名前:デフォルトの名無しさん (ドコグロ MM57-3fK7) mailto:sage [2017/03/22(水) 06:47:53.98 ID:svIchgSfM.net] >>799 どちらもスコープが狭ければいいと思う 特に pair の方は for 文でよく使われる i みたいなもんだから俺もよくやる map の方はたいていスコープも広いし中身を表す名前にした方が分かりやすいと思う 型名と同じ名前はどうよ? って話なら俺個人的には問題ないでしょって思うけどそう思わない人の方が多いような気がする
827 名前:デフォルトの名無しさん (ワッチョイ f384-ajdi) mailto:sage [2017/03/22(水) 07:01:10.32 ID:2VeNeFOl0.net] for(auto&o : c)て感じでやってるなぁ。 oはobjectのo。
828 名前:デフォルトの名無しさん (スップ Sddf-rwfr) [2017/03/22(水) 07:36:14.20 ID:BzP+Rc7Ad.net] 変数名に型情報をのせるなマイクロソフトじゃあるまいし
829 名前:デフォルトの名無しさん (オッペケ Sr97-w0Gz) mailto:sage [2017/03/22(水) 07:43:37.16 ID:l4RQ+gMQr.net] 別にのせてもいいけど、型でしかその概念
830 名前:捉えられない人にマトモな設計は難しい int intTypeVar=-1; [] [ここ壊れてます]
831 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/22(水) 08:29:35.78 ID:IQHE94uk0.net] 変数名に型を載せないほうがカッコいいと思ってるの? それって逆にカッコ悪いと思う。
832 名前:デフォルトの名無しさん (スプッッ Sddf-8YZg) mailto:sage [2017/03/22(水) 08:42:36.10 ID:rgAwiSmKd.net] 変数名に型情報いるか?って話だな そんな情報載せようとするぐらいなら変数名や関数名に拘れ
833 名前:デフォルトの名無しさん (スプッッ Sddf-rwfr) [2017/03/22(水) 08:52:48.82 ID:gPjbW80sd.net] メンバのm_ と同じくらい無意味というか害悪
834 名前:デフォルトの名無しさん (ワッチョイ 53bf-tW1y) [2017/03/22(水) 08:59:06.14 ID:iUoKjy2X0.net] >>814 m_ は好きだけどな。 手で握られてる感じが。
835 名前:デフォルトの名無しさん (ワッチョイ 534f-v8EU) mailto:sage [2017/03/22(水) 09:01:02.66 ID:IQHE94uk0.net] 違いの分かる男 (スプッッ Sddf-rwfr)
836 名前:デフォルトの名無しさん (スプッッ Sddf-8YZg) mailto:sage [2017/03/22(水) 12:11:09.58 ID:rgAwiSmKd.net] フルページヒープしようとしてるがうまくつかえんぞなんだこれ gflag設定して対象ファイル実行するだけでなんとかなるんちゃうのか
837 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 18:09:01.13 ID:dqBQr4XV0.net] メモリ管理ってどうやってしてる? テスト設計で必要なのだが調べても情報が少なくて使い方もあやふやで困ってる 自分のコードならまだしも人のコードだから品質保証するために必要なので困ってる助けて
838 名前:デフォルトの名無しさん (ドコグロ MM1f-vDuW) mailto:sage [2017/03/22(水) 19:28:52.80 ID:6SOT+CpTM.net] c++の場合、設計段階できっちりメモリ管理しないと死ぬ。 テスト段階だとどうだろ?どんなツールがおすすめかね?
839 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 19:40:51.16 ID:dqBQr4XV0.net] >>819 昔からのコードだから俺にはなんとも言えないんだなぁ... タスクマネージャー開いて無限ループさせてたら地味にメモリ増えていくからたぶんリークなりメモリ破壊なりなんかしてそうなんだ
840 名前:デフォルトの名無しさん (ワッチョイ f3c8-tpgq) mailto:sage [2017/03/22(水) 19:50:51.39 ID:E1Td5RgZ0.net] >>820 どこでリークが発生していて、どこでfreeするべきかをツールで発見したいって事? そりゃ無理だろ。 それが出来ないからGC言語に逃げているわけだし、 それが出来ればRAIIすらゴミになるでしょ。
841 名前:デフォルトの名無しさん (ワッチョイ cf1f-9jmm) [2017/03/22(水) 19:54:38.25 ID:0C1B3gPp0.net] メモリ管理はPHPとかのほうがムズい。 設計時でもコード書くときでも実動時でもメモリ消費を制御するのはムズい。正常動作でも想定外が起こる。 消費量が判ったところで実働時に減らすことはムズい。 "php メモリ 画面 真っ白 メモリ"とか定番ネタ
842 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 20:09:07.97 ID:dqBQr4XV0.net] >>821 いやそこまでは出来なくても良い ただ品質として確保したいだけ リークがあるかないかを判断できればおけおけ
843 名前:デフォルトの名無しさん (ドコグロ MM57-3fK7) mailto:sage [2017/03/22(水) 20:13:28.89 ID:svIchgSfM.net] >>818 環境がわからんからアドバイスのしょうがないんだが ソースがあってビルドできるならとりあえず valgrind とかで調べたら? valgrind.org/
844 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/22(水) 20:15:04.43 ID:i8R0t7KQ0.net] それならプログラム終了時にすべてのメモリが解放されたかチェックすればOK
845 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 20:15:57.49 ID:dqBQr4XV0.net] >>824 ふぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉまた英語か... 環境と言えるのはなんだろ visualstudio2008 Windows7 テストしたいのはdll
846 名前:デフォルトの名無しさん (ワッチョイ bf67-lir9) mailto:sage [2017/03/22(水) 20:25:44.20 ID:rzLKjPpj0.net] >>826 昔だったら、ぴゅりふぁい っていうツールがあったけど。
847 名前:デフォルトの名無しさん (ワッチョイ 737a-12+v) mailto:sage [2017/03/22(水) 20:26:09.25 ID:kq8u5G9J0.net] まともな開発環境なら名前以外から変数のスコープと型情報くらい分かるはずだよね
848 名前:デフォルトの名無しさん (ワッチョイ f3c8-tpgq) mailto:sage [2017/03/22(水) 20:26:35.66 ID:E1Td5RgZ0.net] >>826 > テストしたいのはdll それって単にdllの呼び方間違えているだけじゃね? dll
849 名前:呼んだ直後で片っ端からfreeしてみたら直るんじゃね? なおVS2008にはプロファイラが付いてないが、最新VSには付いていたはず。 (俺は使ったこと無いけど) だからとりあえず最新VSでコンパイル通るか試して、そっちでデバッグするのも手だよ。 [] [ここ壊れてます]
850 名前:デフォルトの名無しさん (ワッチョイ cf1f-9jmm) [2017/03/22(水) 20:31:15.79 ID:0C1B3gPp0.net] メモリ確保をすべて乗っ取って動作させてログ吐き出すやつでいいのでは?
851 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sabe [2017/03/22(水) 20:35:57.13 ID:i8R0t7KQ0.net] お前ら意地悪だな VisualStudioならプログラム終了時にすべてのメモリが解放されたか チェックしてくれるDebug版お便利mallocがあるだろ _CrtSetDbgFlag で検索してみるとよい あと、ヒープ破壊を心配しているようだが Debug版mallocにはヒープ破壊検出機能もついてる もしオーバーランしていたりしたらfree時に怒られる
852 名前:デフォルトの名無しさん (ワッチョイ cf1f-9jmm) [2017/03/22(水) 20:36:51.91 ID:0C1B3gPp0.net] これとか LinuxC | GC メモリ周りの基本的操作とテクニック Boehm GC 問題のあるプログラム #include <stdio.h> #include <stdlib.h> void memory_test(void){ char *p; p = malloc(1024); } int main(void){ memory_test(); return 0; } 実行するとエラーも出ず問題なく実行できます。 これは当然で、プログラム終了時にはOSがすべての資源(メモリやファイルディスクリプタ等)はすべて回収してくれるからです。 しかしこれは問題です。 Boehm GCの基本的な使い方 ではこのプログラムでBoehm GCを使います。 Boehm GCはmalloc(3)、realloc(3)の代わりにGC_malloc(),GC_malloc_atomic(),GC_realloc()を使います。 malloc(3)、reallc(3)、free(3)をそれぞれ置き換える作業だけです。 linuxc.info/memory/gc/
853 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 20:37:32.91 ID:dqBQr4XV0.net] >>827 可愛らしいな聞いたことない >>829 dllの呼び方間違えてるとは? 呼び出すドライバについては片っ端からのfreeはちゃんとしてあるぜ 新しい環境については会社での統一環境だから移行できんな...
854 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 20:41:03.02 ID:dqBQr4XV0.net] >>831 ちょっと調べてみる 一応確認だけどもdll呼び出すドライバの最後にちょろっとやればええんかな >>832 なんぞこれ
855 名前:デフォルトの名無しさん (ワッチョイ bf67-lir9) mailto:sage [2017/03/22(水) 20:41:15.04 ID:rzLKjPpj0.net] dllのソースもってるのかな?
856 名前:デフォルトの名無しさん (ワッチョイ 336e-8FG5) mailto:sage [2017/03/22(水) 20:45:10.10 ID:i8R0t7KQ0.net] ああ、dllのソースがないとだめだよ dllのソースがないのにメモリリークが有るか無いかしらべるのは さすがにムリゲーだよ
857 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 20:45:12.77 ID:dqBQr4XV0.net] >>835 持ってる むしろそのdllを今書き換えてるところかな んでテストする段階で悩んでるところです
858 名前:デフォルトの名無しさん (ワッチョイ f3c8-tpgq) mailto:sage [2017/03/22(水) 21:00:54.62 ID:E1Td5RgZ0.net] >>837 とりあえず仮定を確認しよう。 1. dll以外の部分では今のところリークしていない 2. dllと組み合わせるとリークする んだよな? そして書き換えているのは本体ではなく、dllなのか? (これは俺の想定と逆だった) だったらお前がバグ入れただけじゃん。
859 名前:デフォルトの名無しさん (ワッチョイ 3392-8YZg) mailto:sage [2017/03/22(水) 21:06:53.51 ID:dqBQr4XV0.net] >>838 1 2 両方とも正しい んでもって俺が加えたのは型を修正しただけだからたぶん関係ない と言うか関係ない おそらく以前からある現象で以前のdllを利用しても同じ感じになる 2については組み合わせるとと言うよりテストのための実行ファイルを適当に作っただけかな 今回触れてない部分が大半なんだけどバージョンアップするから メモリ破壊なりも調べる観点が必用で umdhやらcrtデバッグやらページヒープやら調べてるんだけど...ってところ
860 名前:デフォルトの名無しさん (ワッチョイ cf1f-9jmm) [2017/03/22(水) 21:34:34.94 ID:0C1B3gPp0.net] Boehm GCはオールCのはずでwindowsでもその他でも動作するし昔から定番だったはず。 だれもこれだしてないが・・
861 名前:デフォルトの名無しさん (ワッチョイ 5375-gO1F) [2017/03/22(水) 21:38:38.83 ID:sj71GTBZ0.net] Linux上でWine+valgrindやろ やったこと無いけど。
862 名前:デフォルトの名無しさん (ワッチョイ f3c8-tpgq) mailto:sage [2017/03/22(水) 22:27:39.33 ID:E1Td5RgZ0.net] >>839 それは業務でやってるんだろ? だったらまず、「以前の本体と以前のdllの組み合わせで、今のテスト」を行って、 リークしているようなら上司にどうするか聞いた方がいい。 このリークを直せというのは確実に手こずる。 そして逆に言えば、今それで出荷出来ているんならそれでも使い物になるんだよ。 だからリークがある状態で新機能付けて出荷も出来るはず。 ちなみに64bitアプリか?だったらリークはとりあえず無視する手もあるぞ。
863 名前:デフォルトの名無しさん (ワッチョイ bf67-lir9) mailto:sage [2017/03/22(水) 23:03:40.64 ID:rzLKjPpj0.net] 期末のこの時期に、メモリリーク。。こわい。。 UMDH調べてるなら、方向はいいとおもうけど。 上に、あげといた方がいいだろな。 時間食うかもしれん。 メモリ壊してると、動作不定になるからな。
864 名前:デフォルトの名無しさん (ワッチョイ 63b7-rEFK) mailto:sage [2017/03/23(木) 00:17:11.61 ID:oAoB0YCS0.net] ttps://vld.codeplex.com なんかで調べてたときはこれ使ってたな。 めちゃくちゃ遅くなるけど。
865 名前:デフォルトの名無しさん (ブーイモ MM4a-TrMc) mailto:sage [2017/03/23(木) 03:06:19.64 ID:52JJY4k+M.net] >>839 バグ修正は「おそらく」「たぶん」とかいう自信のない根拠を持たずに チマチマ地道に調べて積み重ねると早く解決するよ
866 名前:デフォルトの名無しさん (ワッチョイ 9375-iMo4) [2017/03/23(木) 03:37:19.31 ID:mYb1ScGd0.net] Linuxでも動かせるならvalgrindが最も簡単かつ実効速度以外最強なんだけどね。 Windowsのメモリエラー検出ツールはコレっていうのがない。
867 名前:デフォルトの名無しさん (ドコグロ MMe2-hXJm) mailto:sage [2017/03/23(木) 06:43:06.01 ID:HovpjxiMM.net] valgrind なんてオープンソースだから誰かが Windows にポーティングしてるかと思ったら Windows is not under consideration because porting to it would require so many changes it would almost be a separate project. (However, Valgrind + Wine can be made to work with some effort.) ということなのね、残念
868 名前:デフォルトの名無しさん (スプッッ Sde3-2Cpe) mailto:sage [2017/03/23(木) 07:14:51.92 ID:ne+fmuh4d.net] >>842 後だしばかりですまんが32→64bitアプリへの移行中 64bitにしたさいにメモリ破壊なりがないかを確認するためにumdhやらを使おうってなってる あくまでリークしてるかも?ってのは俺がタスクマネージャー見ただけでの予測である
869 名前:デフォルトの名無しさん (スプッッ Sde3-2Cpe) mailto:sage [2017/03/23(木) 07:19:49.58 ID:ne+fmuh4d.net] おお...途中で送ってしまった >>845 それはわかってるんだけどどうにしろ 移行した影響があるかないかも含めて確認するために必要なこととしてツールで保証したいってのがある んで調査中でオススメのないかな?←今ここ ページヒープってのを見付けたんだがあからさまにメモリ破壊してるやつでも検出できないしこれ使ってる人居たら何に対応できるか教えてくれんか....
870 名前:デフォルトの名無しさん (ワッチョイ fe1f-sIi0) [2017/03/23(木) 08:52:11.56 ID:UkDqG0iw0.net] ソースコードがあるなら汎用的なBoehm GCでいいだろうと
871 名前:デフォルトの名無しさん (ワッチョイ 9375-iMo4) [2017/03/23(木) 09:19:11.19 ID:mYb1ScGd0.net] 俺はつかったことないけど dynamorio.org とか 金出せるなら Insure++ってやつとか >>850 メモリリークしか検出出来ないでしょ
872 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/23(木) 09:23:00.74 ID:63eMbsST0.net] >>849 ツールで保証したい っていうなら、>>850 が正しいかと。。
873 名前:e-72yv) mailto:sage [2017/03/23(木) 13:57:08.14 ID:FwJwtm3q0.net] ツールでメモリリークがないことを保証したいってだけなら VC++のランタイム付属のやつで十分だろ メモリ破壊が有ったかどうかも調べてくれるし こういったものが標準でついていて みんな空気のように標準的に使っているから 実際問題メモリリークはめったに起きないんだよ もしあったらプログラム終了時に教えてくれるからね だからメモリリークに対してはそんなに騒がれない 付属のやつで十分な品質を保証できるから たまーにしか通らないパスでメモリリークが発生していた場合など メモリリークの発見が遅れることはあるけど まぁ通ってないパスがある時点でテストが十分でないということだし 一か月に一回ほどの頻度でメモリリークするぐらいは別に問題ないという考え方もある ・・・っていうのもあって、まぁ付属の検出ツールで大体の品質は出る それよりはハンドルやGDIなどのOSリソースのリークが怖くて こちらは如何なるツールを使っても検出不可能で タスクマネージャなどで変にハンドルが増えてないかなど 地道に調べるしか方法がない だからハンドルなどは生で使わずにクラスにラップして使うのが通常だが 題意のDLLがどういう風になっているかは俺は知らん もしリークが発生してしまったらメモリリークより深刻な事態になる メモリよりもOSのリソースの方が貴重で制限が厳しいから むしろこっちのほうを気にすればよいのにと思ってしまう メモリリーク対策などVC++付属のやつに任せてしまってさ
874 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 14:02:35.67 ID:xx3Et9SY0.net] ツールに依存しきって分岐網羅とかやらなくなってるとしたら それはツールによって腐ったとしか言いようがない
875 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 14:11:13.36 ID:FwJwtm3q0.net] ちなみにリソースリークが発生していて 結果としてメモリ使用量がどんどん増えていくってのは有りうるよ タスクマネージャで調べたら使用メモリが増えていってる感じだったってことだけど それだけだと何が原因か、はたまた問題ないのか、難しいよ メモリ使用量を見るだけじゃダメで、ハンドル使用量etcも確認しないとね これはマナーとしてWindowsソフト開発者は絶対するよ リソースリークなんかしてたらむちゃくちゃ恥ずかしいし迷惑だから あと、リソースリークはメモリリーク検出ツールでは検出できないからね それから、もしリソースリークが発生していることが分かっても どこで発生しているか突き止めるのはメモリリーク以上に難しい、とは言っておく
876 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 14:26:25.40 ID:FwJwtm3q0.net] テストを走らせるときにVC++のメモリリーク検出機能をONにしておくと テスト終了時にメモリリークが発生したかどうか知らせてくれるというだけで メモリリーク検出ツールを使うことと テストの網羅が不十分なこととは関連性がないよ メモリリーク検出ツールを使ったから、何か油断して テストの網羅が不十分になるっていう理論の展開は 一般的におこらないというか、無理がある むしろテストを網羅しないとメモリリークを検出できないわけで
877 名前:デフォルトの名無しさん (ワッチョイ 9375-iMo4) [2017/03/23(木) 14:28:17.35 ID:mYb1ScGd0.net] valgrindではunixシステムの主要リソースであるfile descriptorのリークも検出出来るけどな
878 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 14:29:11.39 ID:xx3Et9SY0.net] おまえさっき、こう言ってたじゃん > たまーにしか通らないパスでメモリリークが発生していた場合など > メモリリークの発見が遅れることはあるけど
879 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 14:43:08.69 ID:FwJwtm3q0.net] それはテストが不十分ゆえに発生した問題であって メモリリーク検出ツールを使った事とは全く関係がない >まぁ通ってないパスがある時点でテストが十分でないということだし と書いておいただろ
880 名前:デフォルトの名無しさん (スプッッ Sdea-QN42) mailto:sage [2017/03/23(木) 15:03:37.80 ID:ixe949V5d.net] 無いことを保証するってのは、こわい文言だね。 dll内で、メモリ確保、解放してるところを、共通の関数に置き換えて、その上で、gcにおきかえかなぁ。
881 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 15:45:13.38 ID:xx3Et9SY0.net] >>859 関係大ありだよ 通ってないパスのバグが検出できないツールを使っているのに たまーにしか通らないパスをテストしないのは ツールを過信してる証拠だろうが
882 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 16:33:59.49 ID:FwJwtm3q0.net] いや、意味不明なんだが 通ってないパスのメモリリークが検出できないのは当たり前で そんな変な勘違いする人はいないし テストの網羅度が下がる理由はもっと別要因の別問題の別観点であり メモリリーク検出ツールを過信したからとか意味不明 「俺はメモリリーク検出ツールを使っているからテストの網羅度が低くてもOKだぜ」 ってシナリオがもうありえないっつーか、前提がおかしいだろ メモリリークしかテストしないかのような前提はおかしい メモリリークさえなければ出力が間違っててもOK、とはならないだろ となれば当然テストするだろ、リーク検出ツールの有無に関係なく むしろ、リークの有る無しより、出力のほうが大事だろ、そっち優先 そのためのテストであり、パスの網羅度が高ければ結果的にリーク検出度も高いというだけ どのぐらい完璧なテストをするか、すべてのパスを網羅できるか、は メモリリーク検出ツールを使うかどうかとは関係ない、また別の現実問題
883 名前:デフォルトの名無しさん (スプッッ Sdea-QN42) mailto:sage [2017/03/23(木) 16:44:15.11 ID:ixe949V5d.net] お、おまいら、そうおこるなよ。 >849 から、つづきもないし、上手く行っていることを祈ろう。
884 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 17:00:53.12 ID:xx3Et9SY0.net] > 通ってないパスのメモリリークが検出できないのは当たり前で だったらツールでは防げないバグの話にツールを持ち出すこと自体が大間違いだな
885 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 17:33:17.98 ID:FwJwtm3q0.net] ツールで防げないバグってのは 一度も通ったことのないパスのメモリリークの事を指しているんだろうけど それをどうにかしてほしいって話は無かったはずだが、どっから出てきたんだ? そんな話してたか? リーク検出ツールを使ってもテストの網羅度が完璧じゃなくて漏れてしまうこともある「が」 それでも一定の効果はあるので有用である という話はしたが テストのパスの網羅度が不十分で漏れてしまうメモリリークバグを ツールでどうにかする、とは俺は言ってないんだが、初めからな
886 名前:デフォルトの名無しさん (ササクッテロル Spd3-yqOs) mailto:sage [2017/03/23(木) 17:35:51.53 ID:argEiYvxp.net] >>853 読んでそんなトンチンカンな理解をする方が大間違いだろう メモリリークが大して騒がれない、ってことに対するオマケの補足情報にどんだけ突っかかるんだ
887 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 18:00:16.89 ID:xx3Et9SY0.net] おまえ853で開口一番こう言ったぞ > ツールでメモリリークがないことを保証したいってだけなら > VC++のランタイム付属のやつで十分だろ どっから出てきたって、おまえの口からだよ
888 名前:デフォルトの名無しさん (スッップ Sd4a-ejJz) [2017/03/23(木) 18:26:51.25 ID:pJ6fwoOxd.net] また言った言わないの揚げ足取り合戦かよくだらねえ
889 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 18:34:26.25 ID:xx3Et9SY0.net] 話の本題を無視して言葉尻にだけ突っかかる誰かさんのようなのを揚げ足取りというんだよ
890 名前:デフォルトの名無しさん (スプッッ Sde3-2Cpe) mailto:sage [2017/03/23(木) 18:54:08.36 ID:ne+fmuh4d.net] >>863 ありがとう とりあえずでboehmでメモリリーク監視することになった 思いきりリークしてるみたいだからどうしようかと悩むが... 別件なのだけどvc6環境のC++とvc9環境のC++で差分の出る演算ってあるかな? for文のスコープの範囲が変わるぐらいしかわからんくて 大きな演算の違いはないのだろうけどもそれぞれの環境でのモジュールで 本当に微々たる差が出ているみたいで... 基本的には結果に差分がなく、特定のパラメータファイルの時だけ差分が出てしまう。その差も30mb中の0.1%も満たないぐらい やってることとしてはvc6→vc9環境へプロジェクトファイルの移行
891 名前:デフォルトの名無しさん (スプッッ Sde3-2Cpe) mailto:sage [2017/03/23(木) 19:11:57.84 ID:ne+fmuh4d.net] パラメータファイルって書くと設定値みたいに見えるね 特徴抽出したやつに演算かけてます
892 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/23(木) 19:20:15.49 ID:Ei+8urX30.net] >>848 32→64bit移行の安全性を実行時ツールで検出、というのはかなり無理じゃないか? だからみんなソースコードをチェックしているわけだし。 sgry.jp/pgarticles/64.html yukinarit.blog11.fc2.com/blog-entry-27.html qiita.com/izmktr/items/59085ca70a6c11b0b352 >>870 > 思いきりリークしてるみたいだからどうしようかと悩むが... 32→64bit移行ではリーク自体は発生しないぞ。 それは結果的に症状がリークなだけで、根本的に駄目なところがあるんだよ。 まずは32bitの旧バイナリと新テストパターンで足場を固めないと駄目だと思うぞ。 数値演算結果の誤差ならSSEとx87の精度の違いかもしれん。 ただしVC9(VS2008)は演算にはSSEを出せなかったはずだから関係ないとは思うが。
893 名前:デフォルトの名無しさん (スプッッ Sde3-2Cpe) mailto:sage [2017/03/23(木) 19:36:37.57 ID:ne+fmuh4d.net] >>872 長々とサンクス 思いきりリークしてるから..ってのは元々からリークしていただろうから 対処をどうしようか悩むなぁって意味でした SSEとx87についてちょっと調べてくる
894 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/23(木) 19:50:33.67 ID:CpsZOT5F0.net] 浮動小数点の丸めモードが違うとかあるか?
895 名前:デフォルトの名無しさん (ドコグロ MMe2-7Y/j) mailto:sage [2017/03/23(木) 20:04:25.70 ID:8W2HqVqhM.net] >>870 vc6って標準準拠してたっけ? c++のような何かだったような気がするけど。
896 名前: ◆QZaw55cn4c (ワッチョイ a6ff-nbIt) mailto:sage [2017/03/23(木) 20:26:53.12 ID:qM4EW3hi0.net] >>870 ベームGCか,なかなか息がながいライブラリだね
897 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/23(木) 20:32:55.87 ID:CpsZOT5F0.net] >>875 当時は標準規格というもの自体が無かった
898 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/23(木) 20:37:31.58 ID:Ei+8urX30.net] >>873 あと、FMACの最適化がどこかであったはず。 (ただしググッても出てこないので、俺がGPUの話と混同して勘違いしているだけかも) 内容は、FMACの中間結果を精度が高い状態で保持しておき、FADDに突っ込むというもの。 これに該当した場合は、結果がハードウェア依存になる。 (旧ハードと新ハードでFMACの結果が微妙に異なる) だから同一ハードでの新旧バイナリでの結果をdiffしているのなら、これは該当しない。 環境移行が面倒等で、旧マシンで結果だけ作って新マシンと比べている場合、当たるかもしれない。 ただし再度言うが、GPUの話だったかもしれんのでよろしく。
899 名前:デフォルトの名無しさん (ドコグロ MMe2-hXJm) mailto:sage [2017/03/23(木) 20:40:17.12 ID:HovpjxiMM.net] >>870 > 別件なのだけどvc6環境のC++とvc9環境のC++で差分の出る演算ってあるかな? 正しいプログラムだとそんなに変更はないと思うけど、例えば引数の評価順に依存しているプログラムの動きが変わるって言うのはC言語あるあるだから 要するにバグの顕在化って奴ね なのでコンパイラ替えたら一通りテストした方がいい
900 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/23(木) 21:06:58.74 ID:63eMbsST0.net] 幸いなことに、再現性のあるバグだ。 メモリ関連にしては、ましな方。 画像データなんだよな? 当時だと、特徴抽出前にグレースケールにしてたもんだが。。 そのデータだけ、サイズが縦横違うとかないかな。 どっかで、メモリの取り方(x方向、y方向のピクセル値)間違えてるとか。 あるいは、メモリを取り直してたりしてないかな。 reallocとか。 実務的なとこでは、仕事の落とし所も考えといた方がいいかも。今回は、調査だけなのか、移植までなのか。。
901 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 21:15:40.12 ID:FwJwtm3q0.net] >>867 もうあんまり話したくないけど、最後に言っておくと 実用上問題ないレベルで保証できればそれでよいだろってこと 100%バグがないことを保証するのはどうやっても何やってもどんなツール使っても 無理なのは当たり前の常識だろ VC++付属の検出ツールでも実用上問題ないレベルでのメモリリークの検査はできるし コードに2,3行追加するだけで、壮大にメモリリークしているかどうかぐらいは 直ぐにでもチェックできるから、とりあえず試してみろって話をしたんだよ というか、普通はONにした状態で開発しているものなんだよ あえてOFFにしとく理由は何もないからな、邪魔になるわけでもなし 質問者が何であえてOFFにした状態で開発していたのかは定かではないが 知らなかったってことなら今日からONにしとけばよいだけだろ で、実用上云々の説明がそのあとに続く「稀に漏れることがある」って話で >たまーにしか通らないパスでメモリリークが発生していた場合など >メモリリークの発見が遅れることはあるけど >まぁ通ってないパスがある時点でテストが十分でないということだし >一か月に一回ほどの頻度でメモリリークするぐらいは別に問題ないという考え方もある と書いたんだよ そのどうでも良いところにかみついて揚げ足取りしたのはお前だろ
902 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/23(木) 21:24:27.07 ID:CpsZOT5F0.net] >>880 計算部分だけブレークポイント使って一行ずつ実行しながら見比べてみろよ
903 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/23(木) 21:33:57.23 ID:63eMbsST0.net] >>882 そだな。データが特定されてるんだもんな。
904 名前:デフォルトの名無しさん (ワッチョイ 2b6e-72yv) mailto:sage [2017/03/23(木) 21:38:04.51 ID:FwJwtm3q0.net] boehmは詳しくないが、普通メモリリーク検出ツールは どこで確保したメモリがリークしたのかわかるようになっている物が多いはずだぞ その周辺を漁ればメモリリークの箇所を特定することはそう難しくないハズ VC++付属のツールの場合は ttp://yukinarit.blog11.fc2.com/blog-entry-38.html ↑のようにしておくとリークしたメモリを確保した箇所の 「ソース名」「行数」「ダンプ」がわかる あとはちょっとソースコード追いかければリーク箇所を特定できるはず
905 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/23(木) 21:47:32.04 ID:63eMbsST0.net] memcpyとかも、解放、抜けたりしがち。
906 名前:デフォルトの名無しさん (ワッチョイ be6b-72yv) [2017/03/23(木) 22:20:42.38 ID:xx3Et9SY0.net] > 実用上問題ないレベルで保証できればそれでよいだろってこと 実用上問題あるかどうか、おまえ勝手に決めてるのか?
907 名前:デフォルトの名無しさん (ワッチョイ 2b92-2Cpe) mailto:sage [2017/03/23(木) 22:36:32.61 ID:ViT7/D1o0.net] すまん めっちゃレスもらってるから全部に逐一は答えられんわ まず答えてくれてる人ありがとう助かる >>879 俺もそうは思うんだけどもVC6時代のテスト項目とか残っていない さらに言えば仕様書や設計書すらなく困り果ててる >>880 サイズ自体が異なっていたから何かしらの処理で変な取り方をしているのだろうとは考えてる 実務のことだからほぼほぼ影響を与えないのであればコストと相談してスルーってのもありだけど...そこは要相談なんだろうな >>882 俺もそうはしたいんだがVC6環境がないから対比で比べられないんだわ
908 名前:デフォルトの名無しさん (ワッチョイ 2fb4-QntA) mailto:sage [2017/03/23(木) 23:14:34.92 ID:v1/Wdv6U0.net] valgrind自体はともかくvalgrindという単語を見て 以前このスレに現れたキティガイを思い出した
909 名前:デフォルトの名無しさん (ワッチョイ fe75-i4+Q) mailto:sage [2017/03/24(金) 00:06:32.21 ID:8SSjzg+S0.net] 漏れも、仕様書や設計書がない、DLLからエラーが返ってくるから、 そのDLLをデバッグしてくれとか、 1月150万円で、上場企業から請け負ったこともあるけど、 こういうのは直しても、切りがない。 違うタイプのデータが来ると、またエラーになる 無理だと断っても、また見てくれって言う。 そのDLLが何をやっているのか分からないし、仕様書もないから、 新規に作り直すことは無理だから C/C++で解析できる人なんて、まず見つからないから
910 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/24(金) 00:16:13.17 ID:DhGI6SB10.net] ハッカーに1000万払おう
911 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/24(金) 00:17:14.57 ID:RtKD05ZR0.net] >>889 マジカヨ?ちょっとその仕事試しに受けてみたいかも。 それってどれくらいの規模だった?
912 名前:デフォルトの名無しさん (ワッチョイ 63b7-rEFK) mailto:sage [2017/03/24(金) 00:18:51.24 ID:9w5lj4S/0.net] >>887 めっちゃスルーされてるけど >>844 は結構良かったよ。リーク箇所のスタックトレースまで出力される。 あとVC++標準のは誤検知する場合がある。 googleのv8でリークが誤検知されてた。
913 名前:デフォルトの名無しさん (ワッチョイ 9375-iMo4) [2017/03/24(金) 01:09:06.67 ID:DlmXd06I0.net] >>892 VC標準の貶すと顔
914 名前:真っ赤にして怒り出すやつ居るから気を付けろ [] [ここ壊れてます]
915 名前:デフォルトの名無しさん (ワッチョイ 9375-iMo4) [2017/03/24(金) 01:23:02.12 ID:DlmXd06I0.net] 彼にとってはリーク箇所のスタックトレースなんか要らないし、誤検出は使い方が悪いし、リークするコードなんて書かないから高機能は必要ないらしい。 挙げ句の果てに(自分の書いたコードに対して使うとも言ってないのに)そもそもリークするコード書いてる低脳と煽ってくる。
916 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/24(金) 01:25:52.24 ID:RtKD05ZR0.net] >>887 ついでにこんなんが出てきたので貼っておく。 > サイン、コサインをインテルの CPU で計算すると少しバグっているらしい > tomeapp.jp/archives/1282 要するに、x87のアセンブラ命令 FSIN, FCOS 等には誤差が出る場合があって、 これを嫌うコンパイラの場合は自前で計算しているらしい。 だからコンパイラを変更した場合、sin,cosの値が微妙にずれる事があり得る。 VC6->VC9でどうなのかは知らん。
917 名前:デフォルトの名無しさん (ワッチョイ 1b84-rs+5) mailto:sage [2017/03/24(金) 01:39:49.34 ID:uwgr9JVd0.net] FPUのPIの値がちょっと誤差持ってるって話じゃなかったっけ?
918 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/24(金) 01:58:41.18 ID:RtKD05ZR0.net] 俺はこれは初耳だったからよくは知らない。 > In a single Intel publication, the problem is partially acknowledged. The 1999 edition of Intel Architecture Software Developer’s Manual Volume 1: Basic Architecture (download) states: > > The trigonometric instructions may use a 66-bit approximation to the true value of pi to reduce the magnitude of the input argument. In this case, the final computed result can vary considerably from the true mathematically precise result. > > This statement, which never again appears in a public Intel document, acknowledges the argument reduction problem. However, the entirely separate problem of large errors near argument multiples of pi/2 is not addressed. > notabs.org/fpuaccuracy/index.htm 主張としては、sinXのXが無駄にでかい時は仕方ないとして、 pi/2の倍数のところに誤差があるのは駄目だろ、ということらしい。 つっても仮数部が10bit多いし、doubleに丸めるなら見えなくなると思うが。 正直なところ、浮動小数点の演算結果比較はこの手の落とし穴が大量にあるから、 完全一致は諦めて、4bit位の誤差までは見逃すようにしないと現実的に無理だと思う。
919 名前:889 (ワッチョイ fe75-i4+Q) mailto:sage [2017/03/24(金) 02:13:33.84 ID:8SSjzg+S0.net] >>891 20年前の話 プログラマー・SEは、1人月100〜150万円だけど、 会社が取ってくる仕事だから、社員なら1/3、派遣なら7割もらえる。 ただし、派遣では生活保障がない どこの大企業でも、プログラムの仕事は、ちょいちょいあるだろ >>895 JavaScriptでも誤差があるよ function calcNumberOfDigits(x) { return Math.floor(Math.log2(x)) + 1; } calcNumberOfDigits(Math.pow(2, 53) - 1); floorで切り捨てているから、52+1=53 になるはずなのに、54になる! Math.log2(x) = Math.log(x) / Math.LN2 これは、除数・被除数ともに誤差があるから、時々おかしくなる
920 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/24(金) 02:49:48.36 ID:RtKD05ZR0.net] >>8
921 名前:98 いやその話じゃない。FSIN,FCOSの誤差の話は、 Intelは 1.0ulp 誤差だと言っているのにそうなってない、という話。 (とは言え仮数部が10bit多いのだが) 君が言っているのは数学的なものとだろ? それは浮動小数点では誤差があるのが仕様。 > floorで切り捨てているから、52+1=53 になるはずなのに、54になる! これは間違い。以下。 Math.floor(Math.log2(Math.pow(2,53)-1))+1 // 54で正しい。 Math.log2(Math.pow(2,53)-1) は、52よりも53に限りなく近いから、53になる。 > これは、除数・被除数ともに誤差があるから、時々おかしくなる これも上記の通り、認識間違い。 Math.LN2はそもそも「浮動小数点的には」誤差がない。 というより計算済みの値が使われる(はず) Math.log2(x)等の関数は一般的に割り算での実装はされないはず。 理由は以下。 ・割り算は誤差が出やすい(多分テーラー展開式等が使われる) ・割り算は遅い ・そもそも固定値割り算は逆数の掛け算に変更される (とはいえ、現実的にはこの方法は割り算よりも誤差が出たりするが) だから、 > Math.log2(x) = Math.log(x) / Math.LN2 が成立しない時も、それは浮動小数点計算による誤差であり、仕様。 [] [ここ壊れてます]
922 名前:デフォルトの名無しさん (ワッチョイ aa67-QN42) mailto:sage [2017/03/24(金) 03:00:17.44 ID:GqbwU5RX0.net] >>887 ソフトウェアとして、ライフサイクル切れてるのではないか。。 仕様がないのでは、検査できないではないか。 来期別案件で、再構築も提案していいかもな。只、お客さんから見ると機能がふえるわけではないから、なかなか首を縦に降ってもらえないのだが。
923 名前:デフォルトの名無しさん (スプッッ Sdea-2Cpe) mailto:sage [2017/03/24(金) 07:12:58.02 ID:pzB5kBTUd.net] >>892 すまん スルーしてるつもりはない 全レスすると全レスやつ〜って煽られたことあるから数多いときは一部にしてた... >>895 これの可能性ある気がする VC6時代のは別コンパイラでもコンパイルしてた〜みたいな話聞いてたから 今リリースされているのが別環境で用意ができるのであれば探してみるよありがとう >>900 だよね 設計者や仕様書が如何に大事かがわかったよ
924 名前:デフォルトの名無しさん (ワッチョイ aa1e-t8fU) mailto:sage [2017/03/25(土) 03:58:44.57 ID:D917NA3h0.net] 設計者: 私が辞めても代わりはいるもの
925 名前:デフォルトの名無しさん (ワッチョイ be8c-72yv) [2017/03/25(土) 18:13:50.51 ID:2Y4XLGXL0.net] プロとしての規律を大事にお仕事してるんですね
926 名前:デフォルトの名無しさん (ワッチョイ aa90-VHv+) mailto:sage [2017/03/26(日) 15:26:40.92 ID:pwPfsDuW0.net] >>895 こんなのあるんだ・・・誤差という言い方は語弊があるような 立派なバグじゃないですかインテルさん というかハードウェアって直せないの?
927 名前:デフォルトの名無しさん (ワッチョイ 1b84-rs+5) mailto:sage [2017/03/26(日) 15:50:44.38 ID:rQp0RVJN0.net] ソフトウエア資産的に修正ると多大な影響がある。
928 名前:デフォルトの名無しさん (ワッチョイ 7b7a-7HKf) mailto:sage [2017/03/26(日) 15:52:58.04 ID:r1GdkURH0.net] 特定のプロセッサが生産時期で結果が変わるとか地獄しかない
929 名前:デフォルトの名無しさん (ワッチョイ 1bc8-VHv+) mailto:sage [2017/03/26(日) 16:15:08.70 ID:Uwt+/Suh0.net] >>904 多分原因は>>896 からみのPI等の桁落ち(桁不足)だろうから、 修正自体は簡単で、増やせばいいだけ。 ただし、既存ソフトへの影響が大きすぎるのと、 そもそもx87の仮数部は10bit多くて、doubleに格納した場合は丸められるわけだから、 顕在化する確率はかなり低い。 この問題もx87(1980年)からなら30年以上経って発見されたわけだし。 また現在の科学技術計算ではdoubleが主流でx87は使われなくなりつつあるし。 だから、当面は無視するのが常策だよ。
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 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています