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; // <- ゼロ この挙動の違いは規格のどの部分で定義されてるんじゃろ?