板検索:
C++相談室 part129 (204)
まとめビュー
このスレはC++相談室 スレの最新スレです。
 ▼もっと見る
表示中 C++相談室 part129 (204)
過去ログ C++相談室 part128 (1000) 2016/11/27 00:03〜
過去ログ C++相談室 part127 (500) 2016/09/23 22:11〜
1
デフォルトの名無しさん(ワッチョイ dfcf-HvS5)[sage]   投稿日:2017/01/09 14:49:27  ID:p96WJVyd0.n
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part128

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
コメント3件


2
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK3f-6Slv)[sage]   投稿日:2017/01/09 16:53:24  ID:FJMj93WYK.n(2)
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

---- テンプレ ここまで ----
コメント1件

3
デフォルトの名無しさん (ワッチョイ 0f42-twlg)[sage]   投稿日:2017/01/09 16:56:41  ID:jVBRIf3C0.n
これは>1乙じゃなくてシフト演算子なんだからね

4
デフォルトの名無しさん (ワッチョイ dfc1-f52P)[sage]   投稿日:2017/01/09 17:39:43  ID:MgtRKFl00.n
ご苦労!

5
デフォルトの名無しさん (ワッチョイ 6f13-HvS5)[sage]   投稿日:2017/01/09 17:40:19  ID:s0WlKSpH0.n
これは>1じゃなくてストリームへの入力なんだからね

6
デフォルトの名無しさん (ワッチョイ df98-S/j3)[]   投稿日:2017/01/09 20:32:19  ID:IZbe/h670.n
catch(>1& err)
{
err << "うむ、ご苦労";
}

7
デフォルトの名無しさん (オッペケ Sr3f-KLRm)[sage]   投稿日:2017/01/09 20:48:55  ID:NzCLpVsYr.n
>2
ゴミを貼るなボケ

8
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK3f-6Slv)[sage]   投稿日:2017/01/09 20:57:29  ID:FJMj93WYK.n(2)
へへへっ

9
デフォルトの名無しさん (ワッチョイ fb04-nASw)[]   投稿日:2017/01/09 22:45:37  ID:cNtoCjW40.n
グローバルなstatic変数は(コンパイル単位が違うと)初期化タイミングが不定だから使うな
みたいな話がありますが、これはクラスメンバのstatic変数でも同じでしょうか。

やはり定番のローカルなstatic変数の参照を返すのがベストでしょうか?
コメント1件

10
デフォルトの名無しさん (ワッチョイ df8e-KLRm)[sage]   投稿日:2017/01/09 23:42:53  ID:YmMsaSRh0.n
static int a = f();
 ↓
static int &get_unko() {
 static int a = f();
 return a;
}

問題解決になるとは到底思えない
ちなみにクラスの静的メンバーでも同じ

11
デフォルトの名無しさん (ワッチョイ 1b7b-p/5D)[]   投稿日:2017/01/10 00:09:01  ID:qNfJPVUt0.n(2)
>9
ベストは静的な寿命をもつ変数が別の静的な寿命を持つ変数を参照するような設計にしないこと
やむを得ずそうなる場合はローカルなstatic変数の参照を返す方法がベター
しかしそれも構築は初めて呼ばれた時になるが、破棄の順が不定なのは変わらずだから注意
コメント1件

12
デフォルトの名無しさん (ワッチョイ dfcf-IbiL)[sage]   投稿日:2017/01/10 00:34:11  ID:kCG+Vhkl0.n(2)
>11
破棄準は構築と逆順になるよ。 [basic.start.term]
コメント1件

13
デフォルトの名無しさん (ワッチョイ 1b7b-p/5D)[]   投稿日:2017/01/10 01:22:55  ID:qNfJPVUt0.n(2)
>12
ホンマやね
メモリ上の配置と関係なしに構築した順番覚えてるのな。

14
デフォルトの名無しさん (ワッチョイ 0f33-Flmg)[]   投稿日:2017/01/10 02:41:10  ID:YALu2HFR0.n(3)
しかし、関数内で定義したstatic変数ってどうやって「一度のみ初期化」を実現してるんだろう?
規格上の明記は無いよね?

もし、コード上に初期化フラグ的なものを保持して毎回判定してるのだとしたら、単純なグローバル変数よりアクセス遅くなるのかな?
コメント4件


15
デフォルトの名無しさん (ワッチョイ dfcf-IbiL)[sage]   投稿日:2017/01/10 03:28:04  ID:kCG+Vhkl0.n(2)
>14
気になるならアセンブリ出力を見ればいい。 https://godbolt.org/g/Rp3mVk
効率は実測でどうぞ。

16
デフォルトの名無しさん[sage]   投稿日:2017/01/10 03:42:52  ID:N3Ngq+Oq0.n
江添は何て言ってる?
コメント1件

17
デフォルトの名無しさん (ワッチョイ 0f7b-/uDL)[sage]   投稿日:2017/01/10 04:16:44  ID:UGgokZQL0.n
規格オタクの江添に実装のことを聞いてどうするのか
コメント1件

18
デフォルトの名無しさん (ワッチョイ 5f36-GcKO)[sage]   投稿日:2017/01/10 07:19:19  ID:xRFVWFBm0.n
>17
規格上明記は無いのではという>14の疑問に対して>16のレスだろうから、実装は関係ないでしょ。
コメント1件

19
デフォルトの名無しさん (ドコグロ MMff-JQu6)[sage]   投稿日:2017/01/10 08:35:32  ID:WWXPDPHuM.n
>14
スコープが違うだけだろ
フラグとか意味わからん
コメント1件

20
デフォルトの名無しさん (ワッチョイ 0f33-Flmg)[]   投稿日:2017/01/10 09:01:12  ID:YALu2HFR0.n(3)
>18
主要な実装がどうなっているのか気になりますねー。

21
デフォルトの名無しさん (ワッチョイ 0f33-Flmg)[]   投稿日:2017/01/10 09:03:05  ID:YALu2HFR0.n(3)
>19
関数内の場合は初期化タイミングが明確にされている部分が違うよね?

22
デフォルトの名無しさん (スプッッ Sdff-5duh)[]   投稿日:2017/01/10 09:17:26  ID:Kh8Jpf0Qd.n
静的ローカル変数のデストラクタはどうやって呼び出してるんですか
コンパイル時には順番決まらないですよね
コメント1件

23
デフォルトの名無しさん (ワンミングク MMff-kB5U)[sage]   投稿日:2017/01/10 10:17:49  ID:KPiaZgHCM.n
>22
生成された順にデストラクタスタックに積んどきゃええだけやろ

24
デフォルトの名無しさん (ワッチョイ bb7b-XpjH)[sage]   投稿日:2017/01/10 21:06:37  ID:aZrJHKL80.n
>14
マルチスレッド下でも1度だけ初期化しなけりゃならないのでややこしいことをやってる
コメント1件

25
デフォルトの名無しさん (ワッチョイ 6fa6-HvS5)[sage]   投稿日:2017/01/10 21:27:26  ID:A8TeocJX0.n
スレッドセーフな点がありがたいと思っているんだが

26
デフォルトの名無しさん (ワッチョイ ab26-S/j3)[sage]   投稿日:2017/01/11 09:57:17  ID:kJf5mE6d0.n(5)
その意味で、どのスレッドが最初に呼び出して初期化するか
分からないっていう怖さは有るがな
スレッドに紐づくようなものを初期化するのはNGだ
(COMであるとかウィンドウであるとか)
もしくはプログラムの最初で明示的にメインスレッドから呼び出して初期化しておくか
スレッド間でシェアする必要がなければTLSにしておくか
コメント3件

27
デフォルトの名無しさん (ワッチョイ df98-S/j3)[]   投稿日:2017/01/11 11:52:08  ID:z2RHK6s+0.n(4)
最初からいきなりマルチスレッドなわけじゃなし
mutexやatomicでどうにでもできるでしょ
コメント1件

28
デフォルトの名無しさん (ワッチョイ ab26-S/j3)[sage]   投稿日:2017/01/11 12:30:02  ID:kJf5mE6d0.n(5)
関数内で定義したstatic変数を初期化するスレッドをメインスレッドなどに制限するのを
>mutexやatomic
でどうやって解決するのか熱く語ってもらおうか
コメント1件

29
デフォルトの名無しさん (ワッチョイ df98-S/j3)[]   投稿日:2017/01/11 12:37:09  ID:z2RHK6s+0.n(4)
質問の意味がわからんぞ
コメント1件

30
デフォルトの名無しさん (オッペケ Sr3f-KLRm)[sage]   投稿日:2017/01/11 12:37:52  ID:ZhOyh3uTr.n(3)
>26
>スレッドに紐づくようなものを初期化するのはNGだ

いきなりお題改変乙
グローバルに置くんだからスレッド間で共有したい場合の話に決まってるのに
コメント1件

31
デフォルトの名無しさん (ワッチョイ ab26-S/j3)[sage]   投稿日:2017/01/11 12:53:45  ID:kJf5mE6d0.n(5)
>29
お前が
>mutexやatomic
って言ったんだろ
いっとくが排他制御の話など誰もしてないぞ
世の中には生成されたスレッドに紐づいてしまうオブジェクトというものがあって
Windowsのウィンドウであれば、生成されたスレッドのメッセージキューで
メッセージポンプを回すことになるし
COMは生成されたスレッドのアパートメントで一生を過ごす
どのスレッドで初期化されたかが重要になるオブジェクトもあるってこった
そして関数内static変数は最初に呼び出したスレッドで初期化処理が走る
この問題をお前は >mutexやatomic で解決するんだろ?
さあ、熱く語れ

>30
スレッドに紐づくようなもの(WindowsのCOMやウィンドウ)を
関数内で定義したstatic変数で初期化するのはNG
→スレッドに紐づかないものであればOK、スレッド間で共有もできる

何がお題変更なの?
グローバル変数やシングルトンに関数内static変数は便利だけど
相性が悪いものもあるって話なのに
コメント1件

32
デフォルトの名無しさん (ワッチョイ df17-pn3f)[]   投稿日:2017/01/11 14:03:34  ID:9AYGk8zp0.n(2)
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%...

33
デフォルトの名無しさん (オッペケ Sr3f-KLRm)[sage]   投稿日:2017/01/11 15:00:37  ID:ZhOyh3uTr.n(3)
>31
>何がお題変更なの?
相性が悪いものの話なんかしてねーし
スレッド間で共有したい変数の話の最中に
「スレッド間でシェアする必要がなければTLS」とか力説し始めて
アホなの?

34
デフォルトの名無しさん (ワッチョイ df98-S/j3)[]   投稿日:2017/01/11 15:51:10  ID:z2RHK6s+0.n(4)
同感

35
デフォルトの名無しさん (ワッチョイ ab26-S/j3)[sage]   投稿日:2017/01/11 15:53:31  ID:kJf5mE6d0.n(5)
相性が悪いものがあるっていう書き込みをして何が悪いんだ?

>スレッド間で共有したい変数の話の最中に

それはお前が勝手に決めたことだろ
元々あくまで関数内static変数の初期化がスレッドセーフになっているというだけの話であり
本質的にロジックとして変数をスレッド間で共有する必要が有るのか無いのかまでは関係ないだろ
本質的にスレッド間で共有する必要がない場合はTLSに変更することもできる
ってだけの話で
そのほうがパフォーマンスが出る場合もある

36
デフォルトの名無しさん (オッペケ Sr3f-KLRm)[sage]   投稿日:2017/01/11 16:34:37  ID:ZhOyh3uTr.n(3)
static変数ってどうやって〜を実現してるんだろう?
 ↓
MT保証で複雑なことしてる
 ↓
そのstatic、ホントに必要ですか?
 ↓
いきなり何を言いだすの
 ↓
本質的にロジックとして変数をスレッド間で共有する必要が有るのか無いのかまでは話してないからな←今ここ

37
デフォルトの名無しさん (ワッチョイ ab26-S/j3)[sage]   投稿日:2017/01/11 16:47:40  ID:kJf5mE6d0.n(5)
>そのstatic、ホントに必要ですか?

スレッドローカル関数内static変数の事すら理解していないのがよく分かった

38
デフォルトの名無しさん (ワッチョイ bb7b-XpjH)[sage]   投稿日:2017/01/11 17:27:25  ID:7JGhXUMg0.n(3)
>27
どのような状況で呼び出されても確実に一回だけ初期化する事が要求されている
mutexは初期化する必要があるから役に立たん
コメント1件

39
デフォルトの名無しさん (ワッチョイ df17-pn3f)[sage]   投稿日:2017/01/11 17:41:25  ID:9AYGk8zp0.n(2)
IDが見えるスレッドなのに、ひとりの相手とやりとりしている錯覚に陥った ID:ZhOyh3uTr 氏は失礼ながら、精神疾患の兆候があるかも。

40
デフォルトの名無しさん (ワッチョイ df98-S/j3)[]   投稿日:2017/01/11 18:35:56  ID:z2RHK6s+0.n(4)
俺は一言もstaticとは言ってないし
mutexとatomic「だけで」とも言ってないのに
人の話の前提条件を勝手にでっち上げて叩く
ストローマンに辟易としちまった

41
デフォルトの名無しさん (ワッチョイ bb7b-XpjH)[sage]   投稿日:2017/01/11 18:45:08  ID:7JGhXUMg0.n(3)
>26まではstatic変数(特に関数内)の初期化の話をしてたのに、知ったかぶって参加しようとしたID:z2RHK6s+0がグチャグチャにしたって事か


42
デフォルトの名無しさん (ワッチョイ df8e-KLRm)[sage]   投稿日:2017/01/11 18:48:17  ID:wUdtm8ww0.n(2)
いつもながらのぐちゃぐちゃ展開
それがこのスレの醍醐味

43
デフォルトの名無しさん (ワッチョイ df8e-KLRm)[sage]   投稿日:2017/01/11 20:16:24  ID:wUdtm8ww0.n(2)
>さあ、熱く語れ
>どうやって解決するのか熱く語ってもらおうか

どちらかというと>26あたりからおかしくなったようだ
クスリでもやっているのか、>28あたりは何か幻覚を見たのではないかと

44
デフォルトの名無しさん (ワッチョイ bb7b-XpjH)[sage]   投稿日:2017/01/11 21:00:46  ID:7JGhXUMg0.n(3)
具体的な例はないけど、作成したスレッドはRW、それ以外はROなんてのもありうるわけで
「スレッドに紐付付いてるのは共有するな」は受け入れ難い
と考えると、これをstatic変数の初期化に使うのは要注意と言う指摘は一理はあるかと

45
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/12 15:07:52  ID:8CizHZGj0.n
>38
ひんとstd::mutexのコンストラクタはconstexpr修飾されてる
コメント4件

46
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/12 15:28:40  ID:sAPGeyQI0.n
>45
std::mutexってランタイムライブラリじゃ無いだろ
コメント1件

47
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/13 00:15:44  ID:nVxQCvXm0.n
>46
ちょっと何言ってるのかわからないから誰か解説者よろ
コメント1件

48
デフォルトの名無しさん (ワッチョイ 1f36-cG99)[sage]   投稿日:2017/01/13 10:28:33  ID:VKtyxMUH0.n
>47
なんだ、そこからかよ
static変数の初期化の話題だってわかってる?
コメント2件

49
デフォルトの名無しさん (ワッチョイ b2cf-YL17)[sage]   投稿日:2017/01/13 10:37:18  ID:7CvKX7vR0.n
ぜんぜん話が見えてこない

50
デフォルトの名無しさん (ドコグロ MM0a-Hii4)[sage]   投稿日:2017/01/13 12:28:56  ID:LkImdLNRM.n
>48
関数内のstatic変数だろ。

51
デフォルトの名無しさん (ワンミングク MMe2-dqLr)[]   投稿日:2017/01/13 12:56:57  ID:kKg87s4oM.n(6)
>48
それとランタイムライブラリが何って?

52
デフォルトの名無しさん (ワッチョイ 3217-q48i)[sage]   投稿日:2017/01/13 13:13:35  ID:y8BGYaW90.n
ランタイムライブラリじゃない = ヘッダーファイルのみでOk
という意味に、私は解釈したんだがほかの人は道南?
コメント1件

53
デフォルトの名無しさん (ワンミングク MMe2-dqLr)[]   投稿日:2017/01/13 13:16:53  ID:kKg87s4oM.n(6)
>52
それが>45へのレスとしてつながる?
コメント1件

54
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/13 17:12:37  ID:76Aeg2JY0.n(9)
ランタイムライブラリが通じなかった?
llvmで言うところのcompiler-rtだよ
コメント1件

55
デフォルトの名無しさん (ワンミングク MMe2-dqLr)[]   投稿日:2017/01/13 18:02:07  ID:kKg87s4oM.n(6)
>54
それが?
コメント1件

56
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/13 18:31:46  ID:76Aeg2JY0.n(9)
>55
これで何がわからない?
コメント1件

57
デフォルトの名無しさん (ワンミングク MMe2-dqLr)[]   投稿日:2017/01/13 18:45:44  ID:kKg87s4oM.n(6)

58
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/13 18:49:34  ID:76Aeg2JY0.n(9)
>57
llvmで言うところのcompiler-rtって理解してる?
コメント1件

59
デフォルトの名無しさん (ワンミングク MMe2-dqLr)[]   投稿日:2017/01/13 18:55:22  ID:kKg87s4oM.n(6)
>58
うん。
それとstd::mutexのコンストラクタがconstexprだということの関連性がわからん
コメント1件

60
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/13 19:03:56  ID:76Aeg2JY0.n(9)
>59
じゃ、static変数の初期化の排他制御にstd::mutexを使うと言うお笑い提案に付いては?
コメント3件

61
デフォルトの名無しさん (ワンミングク MMe2-dqLr)[]   投稿日:2017/01/13 19:08:40  ID:kKg87s4oM.n(6)
>60
規格上は別に問題ないんじゃない?
コメント1件

62
デフォルトの名無しさん (ワッチョイ 3298-los8)[]   投稿日:2017/01/13 19:14:15  ID:LnYnqLIL0.n
>60=28
ストローマンまだ粘着してたのか
コメント1件

63
デフォルトの名無しさん (オッペケ Sr37-U8Ig)[sage]   投稿日:2017/01/13 19:24:27  ID:weu0eN0Dr.n
>60
まだやってんのかよ
バカに構うと時間を損するだけだぞ

64
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/13 19:57:05  ID:76Aeg2JY0.n(9)
>61
constexprを理解してないのか
もう一回規格読んでから出直しなよ
重要なところは3.6.2だぞ

>62
理解できないからって、おかしな捏造してごまかすのはやめたまえ
コメント1件

65
デフォルトの名無しさん (ワントンキン MMe2-dqLr)[]   投稿日:2017/01/13 20:13:13  ID:8qb1acaCM.n(5)

66
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/13 20:15:51  ID:76Aeg2JY0.n(9)
>65
だから、何?

67
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/13 20:19:22  ID:76Aeg2JY0.n(9)
>65
それのどこをどうよ読むと
static変数の初期化の排他制御にstd::mutexを使えると言うお笑い提案が出てくるんだ?
コメント1件

68
デフォルトの名無しさん (ワントンキン MMe2-dqLr)[]   投稿日:2017/01/13 20:22:34  ID:8qb1acaCM.n(5)
>67
他のスレッドより先に初期化されることが保証されているんだから排他に使えるでしょ。
まさに例で書かれてるんだけどコード読めないの?

69
デフォルトの名無しさん (ワントンキン MMe2-dqLr)[]   投稿日:2017/01/13 20:38:51  ID:8qb1acaCM.n(5)
ランタイムライブラリがどう関係してくるのか一つも説明ないんだけど、どういう事なの?

70
デフォルトの名無しさん (ワッチョイ 7e13-dHfL)[sage]   投稿日:2017/01/13 20:46:26  ID:nYJUER3p0.n(4)
お願いします.

C::a, C::b を protected のままにしたいのですが,どうしても public を要求されます.
なぜなのでしょうか
http://ideone.com/x3ymxM
コメント2件

71
デフォルトの名無しさん (ワッチョイ 7e6c-6SG4)[sage]   投稿日:2017/01/13 20:51:50  ID:daPh3nWD0.n(2)
>70
なんか色々言いたくなるけど
とりあえずmyabsがfriendじゃないから要求されてるんじゃ?

72
デフォルトの名無しさん (ワッチョイ 7e6c-6SG4)[sage]   投稿日:2017/01/13 20:53:38  ID:daPh3nWD0.n(2)
>70
ってエラーにそう書いてあるやん

73
デフォルトの名無しさん (ワッチョイ 7e13-dHfL)[sage]   投稿日:2017/01/13 21:06:18  ID:nYJUER3p0.n(4)
すみません.ありがとうございます.
http://ideone.com/BhdBHO

他になにかいろいろまずいところがあるんですね.
お手を煩わすようで恐縮ですがコメントいただけないでしょうか.
よろしくお願いいたします.
コメント1件

74
デフォルトの名無しさん (ワッチョイ 326c-6SG4)[sage]   投稿日:2017/01/13 21:12:36  ID:eTv8M5MG0.n
>73
明らかにfriend不要になったでしょ
比較クラスが比較対象を継承してるのも意味不明
意味わからずコード書いてる感じがするから勉強し直したほうが良い気がする
コメント1件

75
デフォルトの名無しさん (ワッチョイ c621-q48i)[]   投稿日:2017/01/13 21:30:49  ID:AzvsCcDE0.n
すごいコードだ

76
デフォルトの名無しさん (ワッチョイ 7e13-dHfL)[sage]   投稿日:2017/01/13 22:09:13  ID:nYJUER3p0.n(4)
>74
ありがとうございます.
確かに例示としては
http://ideone.com/Hi50Xi
で十分でした.

しかし次の場合はどうでしょうか?
不適当とは思いながら CCompare を C の継承としましたが,それでも protected がききません.
http://ideone.com/XJbnUo

プログラミングのお題スレ Part9
を書いている際にぶつかった問題です.
よろしくお願いいたします.
コメント3件

77
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/13 22:20:31  ID:76Aeg2JY0.n(9)
ああ、わかって来たぞ
void func()
{
static std::mutex mtx; // ←これ
...
}
このmtxの初期化を排他制御するために、非ローカルなstd::mutex生成して使うと言うお笑い提案か
目の付けどころが鴻海過ぎる
コメント1件

78
デフォルトの名無しさん (ワントンキン MMe2-dqLr)[]   投稿日:2017/01/13 22:34:28  ID:8qb1acaCM.n(5)
>77
何言ってるのかわかんねえわ。
コメント1件

79
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/13 22:51:30  ID:76Aeg2JY0.n(9)
>78
自分で言い出したんだろ
>65
コメント1件

80
デフォルトの名無しさん (ワッチョイ f330-emOI)[sage]   投稿日:2017/01/13 22:59:08  ID:ByW8JYfQ0.n(2)
>76
CCompareがアクセスできるのは自身のメンバとしてのa,bだから

概念的にいうならCCompareが持っているのはCから継承した自身のメンバ
CCompare::a,CCompare::bへのアクセス権であって
C::a,C::bへの直接のアクセス権を持っているわけではないから
コメント1件

81
デフォルトの名無しさん (ワントンキン MMe2-dqLr)[]   投稿日:2017/01/13 23:18:01  ID:8qb1acaCM.n(5)
>79
関数ローカルのstaticなstd::mutexをなぜmutexで保護しようとしたのかサッパリとわかんねえって言ってんの。
ランタイムライブラリとstd::mutexのデフォルトコンストラクタがconstexprである関係性の説明一つもないし相手しても出てこないって解ったから相手するのやめるよ。
最初から最後まで何が言いたいのか一ミリもわかんなかったわ。
コメント1件

82
デフォルトの名無しさん (ワッチョイ 7e13-dHfL)[sage]   投稿日:2017/01/13 23:21:37  ID:nYJUER3p0.n(4)
>80
map や priority_queue にあたえる比較関数オブジェクト(CCompare) の中に,
別のクラス(例では C) の private/protected をアクセスすることはできないのでしょうか
なんとかならないでしょうか
コメント2件

83
デフォルトの名無しさん (ワッチョイ f330-emOI)[sage]   投稿日:2017/01/13 23:59:19  ID:ByW8JYfQ0.n(2)
>82
一般的には真っ当やり方ではどうにもならない
>76のケースならCとCCompareのunionを使って真っ当にどうにかなるのかもしれない

84
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/14 00:05:54  ID:8QfSwFFH0.n(2)
>81
関数ローカルなstatic変数の初期化は排他制御しなけりゃならない
これはOKかな?
その排他制御にstd::mutexを使えというお笑い提案が>45
コメント2件

85
デフォルトの名無しさん (スプッッ Sdf2-gTkB)[sage]   投稿日:2017/01/14 00:37:53  ID:rG4STkB+d.n
>84
ランタイムライブラリじゃなければならない理由を説明するつもりならコード書いて例示すればいいんじゃないの?
断片的なコメント書くよりわかりやすいと思うぞ
コメント1件

86
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/14 00:42:02  ID:Q3G32+hm0.n(2)
>85
関数ローカルのstatic変数の初期化を排他しなきゃいけないなんて言ってるバカを相手にしちゃいけないよ
コメント2件

87
デフォルトの名無しさん (ワッチョイ b633-zxSj)[]   投稿日:2017/01/14 00:47:15  ID:/xjCjFtE0.n(3)
>82
#define private public
#define protected public

異論反論は勿論認める。

88
デフォルトの名無しさん (ワッチョイ b633-zxSj)[]   投稿日:2017/01/14 00:51:08  ID:/xjCjFtE0.n(3)
あ、コード見てなかった。
ネタにもなって無かったわ…ごめん。

89
デフォルトの名無しさん (ワッチョイ 3290-V/2k)[sage]   投稿日:2017/01/14 01:17:03  ID:RBO90iTA0.n(2)
質問ですが、mapやunordered_mapの[]演算子が非constしか用意されていないのは
何か理由があるんですか?
コメント2件

90
デフォルトの名無しさん (ワッチョイ f330-emOI)[sage]   投稿日:2017/01/14 01:39:44  ID:mg/r9n9z0.n
>89
指定したキーに対応する要素が存在しないときは新たに要素を作成するから

91
デフォルトの名無しさん (ワッチョイ b633-zxSj)[]   投稿日:2017/01/14 01:40:54  ID:/xjCjFtE0.n(3)
>89
そのキーが存在しなくても、自動的に追加する仕様だから、const にはできない。
コメント1件


92
デフォルトの名無しさん (ワッチョイ 4f04-lw3D)[]   投稿日:2017/01/14 02:18:12  ID:kOBEZk8k0.n
static変数の話の戻るんですけど、非ローカルstatic変数は生成/開放順序が不定
だから、使うな(googleスタイルガイド)やstaticローカルの参照にしろ(effective c++)
は言っているわけですけが、非ローカルstatic constexpr変数なら問題ないですよね?
コメント3件

93
デフォルトの名無しさん (ワッチョイ 3290-V/2k)[sage]   投稿日:2017/01/14 02:22:43  ID:RBO90iTA0.n(2)
ありがとうです
仕様がそうなっているからですか
わざわざatが用意されているのもそれが理由なんですね

94
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/14 02:59:59  ID:Q3G32+hm0.n(2)
>92
変数にconstexpr付けたらコンパイル時定数になるから実行時の初期化とは無縁
コメント6件

95
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/14 08:04:44  ID:8QfSwFFH0.n(2)
>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.
コメント2件

96
デフォルトの名無しさん (ワッチョイ 328e-U8Ig)[sage]   投稿日:2017/01/14 08:14:50  ID:4HVF8lbq0.n
話の前提(規格と実装)がずれてるような気がしなくもない

97
デフォルトの名無しさん (ワッチョイ 3298-los8)[]   投稿日:2017/01/14 08:16:06  ID:BjO/qPFR0.n
>91
正確にはconstにできないのではなく、
constにするのは良心が咎める、だろ
データの実体はthisに指されていないわけで

98
デフォルトの名無しさん (ワッチョイ f642-SV1A)[sage]   投稿日:2017/01/14 11:01:30  ID:f29MAUgw0.n
>76
protectedなんて使うな、あんなもんpublicと一緒だ

いくつかそれっぽいの書いてみたから好きなの使え
http://ideone.com/GkUTFI
http://ideone.com/IvYKWe
http://ideone.com/ZrgkZM
コメント1件

99
デフォルトの名無しさん (ワンミングク MMe2-SV1A)[sage]   投稿日:2017/01/14 13:46:51  ID:TZ84v9ShM.n
心が洗われるようなコード

100
デフォルトの名無しさん (ワッチョイ b2ac-vSov)[sage]   投稿日:2017/01/14 15:44:02  ID:SDa1ObQ20.n
struct A {
int value;
};

auto p1 = new A;
auto p2 = new A();

cout << p1->value << endl; // <- 不定
cout << p2->value << endl; // <- ゼロ

この挙動の違いは規格のどの部分で定義されてるんじゃろ?

101
デフォルトの名無しさん (ワッチョイ d3c9-U8Ig)[sage]   投稿日:2017/01/14 15:59:48  ID:kCGGguyq0.n(2)
規格を読まずに言うと8.5p11

102
デフォルトの名無しさん (ワッチョイ d3c9-U8Ig)[sage]   投稿日:2017/01/14 16:00:41  ID:kCGGguyq0.n(2)
嘘を言った
8.5までわかっていて、規格を見たら段落11だった

103
デフォルトの名無しさん (ワッチョイ 7e13-dHfL)[sage]   投稿日:2017/01/14 17:01:56  ID:pjYHXW8Q0.n
>98
ありがとうございます.C++11以降の新鮮な書き方ですね
個人的には3番目のラムダ式のものが分かりやすくていいと思いました
using 文を名前スペース以外に使う方法って,なんていうのですか?詳しく調べたいと思います.

104
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/15 12:13:55  ID:OwCHVx6x0.n(7)
>92 がバカに騙されてないか少しだけ心配
コメント1件

105
デフォルトの名無しさん (オイコラミネオ MMce-mZvv)[]   投稿日:2017/01/15 12:52:42  ID:oZyLvSNYM.n(2)
>104
何も考えんとアホみたいにstatic使ってるやつよりマシやろ

106
デフォルトの名無しさん (ワッチョイ d3c9-U8Ig)[sage]   投稿日:2017/01/15 13:12:23  ID:n2HQszSv0.n
マシかどうかではなく問題の有無で語るべきではないか

107
デフォルトの名無しさん (オイコラミネオ MMce-mZvv)[sage]   投稿日:2017/01/15 13:19:44  ID:oZyLvSNYM.n(2)
>94
みたいな回答がついてそれに
>95
とツッコまれるくらいの問題はあるやろ

108
デフォルトの名無しさん (ブーイモ MM8b-STcG)[sage]   投稿日:2017/01/15 13:41:07  ID:gYQA4gmtM.n
「コンパイル時に定数として評価される」ことと「コンパイル時に解決される」ことを混同している人は結構いると思う。
コメント2件

109
デフォルトの名無しさん (ワンミングク MMe2-SV1A)[sage]   投稿日:2017/01/15 13:50:38  ID:dIwTpKXnM.n
>108
どうちがうの?

110
デフォルトの名無しさん (アウアウカー Sa5f-YGRn)[sage]   投稿日:2017/01/15 14:48:53  ID:Vh4eztBka.n

111
デフォルトの名無しさん (ワッチョイ b2cf-YL17)[sage]   投稿日:2017/01/15 16:26:13  ID:6tnmROhD0.n(4)
>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の引用した文面は消えてる。
http://wg21.cmeerw.net/cwg/issue2026
コメント3件

112
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/15 20:39:17  ID:T6BZe6fz0.n(6)
>111
3.6.2のタイトルを1000回音読してから出直してくれたまえ
コメント1件

113
デフォルトの名無しさん (ワッチョイ b2cf-YL17)[sage]   投稿日:2017/01/15 20:51:15  ID:6tnmROhD0.n(4)
>112
3.6.2 Static initialization [basic.start.static]
で、これ読んだら話がどう変わると思ってるの?
コメント1件

114
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/15 21:57:06  ID:T6BZe6fz0.n(6)
>113
なるほど、名前も変えるの見落としてた
なんか支離滅裂な提案してるなと、読み込みを本能的に拒絶してた

>94が正しくなるということだね
>86みたいな電波とばしてるからマグレ当たりだろうけど
コメント2件

115
デフォルトの名無しさん (ワッチョイ b2cf-YL17)[sage]   投稿日:2017/01/15 22:22:21  ID:6tnmROhD0.n(4)
>114
名前?提案?いったい何の話?

>46 からずっと、ほとんど何言ってるのかわかんなくてこわい。
もうちょっと伝わる文面にしてもらえないものか。


あと、「>94が正しくなる」じゃなくて現行の C++14 でも正しいよ。
コメント2件

116
デフォルトの名無しさん (ワッチョイ 3298-los8)[]   投稿日:2017/01/15 22:24:11  ID:RPIsJnBb0.n(2)
>108
今現在の流れにどんな関係があるんだ?
constexprの効力は最適化と関係ないぞ

117
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/15 22:39:13  ID:OwCHVx6x0.n(7)
>115
少しでも解るなら凄いよ…
俺全く理解出来ないからスルーすると決めたもの。

118
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/15 22:49:15  ID:OwCHVx6x0.n(7)
デタラメばかり言ってるから流石にもう騙される人は居ないと思うけど、一応関数ローカルなstatic変数の初期化タイミングに排他必要ないという記事張っとくよ
ググって日本語で一番上にでた記事だよ

http://d.hatena.ne.jp/yohhoy/touch/20120309/p1
コメント1件

119
デフォルトの名無しさん (ワッチョイ 3298-los8)[]   投稿日:2017/01/15 22:54:49  ID:RPIsJnBb0.n(2)
ggrを最高神とあがめる信者か
採用1年目からアレをやらされるとそうなるかねえ
コメント1件

120
デフォルトの名無しさん (ワッチョイ 0fc9-U8Ig)[sage]   投稿日:2017/01/15 23:01:04  ID:Ah8VE8+/0.n
読点の前に書かれているように
読点の後を鵜呑みにするか試しているのではないか

121
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/15 23:02:17  ID:OwCHVx6x0.n(7)
>119
検索したらすぐ解ることを読めもしない規格だけ読んで間違って解釈するやつの前でそんな事言えんの?
残酷な奴だな
コメント1件

122
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/15 23:02:52  ID:T6BZe6fz0.n(6)
>118
そこにも日本語で解説してあるだろ

> gcc 4.0.0から既定動作でスレッドセーフなコードが出力される。(自動的に排他制御コードが埋め込まれる。)

これは最初から言っている(>24)
コメント1件

123
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/15 23:08:33  ID:OwCHVx6x0.n(7)
>122
いや、そんな事十分に理解しておりますよ。
自分で排他制御を書く必要ないって書くべきだったか?

どこぞのレスで
> >86みたいな電波とばしてるからマグレ当たりだろうけど

って書いてるからそれに騙されてる人が居ないか心配で書いただけだよ
コメント1件

124
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/15 23:14:37  ID:T6BZe6fz0.n(6)
>123
はあ? 自分で排他制御なんてどうやって書くんだよ
バカも休み休み言え

125
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/15 23:20:48  ID:OwCHVx6x0.n(7)
それは
>84
に言えよ
ってやべー間違ったわアンカー付けたの触ったらダメな奴だった
コメント1件

126
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/15 23:25:26  ID:T6BZe6fz0.n(6)
>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な変数はそのブロックに最初に入る時に初期化、すなわち実行時
コメント2件

127
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/15 23:30:17  ID:T6BZe6fz0.n(6)
>125
>45
> gcc 4.0.0から既定動作でスレッドセーフなコードが出力される。(自動的に排他制御コードが埋め込まれる。)
こう言う自動的に埋め込まれる排他制御にstd::mutex使えなんて愉快な提案してしたんだろ

> ひんとstd::mutexのコンストラクタはconstexpr修飾されてる

128
デフォルトの名無しさん (ワッチョイ b2cf-YL17)[sage]   投稿日:2017/01/15 23:35:49  ID:6tnmROhD0.n(4)
>126
before は「前」って意味ね。ブロックに入る「時」とまでは限定されてない。

同時に、定数初期化(を含む静的初期化)はあらゆる動的初期化より前に行われる
とする規定があるのは>111で挙げたとおり。

これにより、動的初期化(実行時の初期化)との間で順序が問題になることはない。
コメント1件

129
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/15 23:42:21  ID:OwCHVx6x0.n(7)
>92
の質問が

>非ローカルstatic constexpr変数なら問題ないですよね?

だからブロックスコープの話ですら無いんだけどね。
コメント1件

130
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/16 00:16:22  ID:4D4bT+Tb0.n(7)
>128
ブロックに入る前なので、「実行時の初期化とは無縁」じゃ無いだろ

あと、>111に書かれてるのは現行は
3.6.2 initialization of non-local variables
の規定だね
コメント1件

131
デフォルトの名無しさん (ワッチョイ 3298-los8)[]   投稿日:2017/01/16 00:21:18  ID:UB1GTfE40.n(2)
>121
すぐ解ることって自分で言いながら読めもしないって
言ってる意味わかんねえぜ
検索と規格のどっちが難しいかも逆に認識してるみたいだし
まあ1年目に魔改造されたアタマっちゃそれらしいが

132
デフォルトの名無しさん (ワッチョイ b2cf-YL17)[sage]   投稿日:2017/01/16 00:39:27  ID:5OapSwc60.n(4)
>130
ブロックに入る前、且つ、すべての動的初期化より前、だから「無縁」でもいいんじゃないの?
ローカル static constexpr 変数について初期化順の問題が起こり得るというなら、コード例
出してみてよ。

>114 の「名前」は 3.6.2 のタイトルのこと言ってたのか。ようやくわかった。
でも 3.6.2 のタイトルがどうあれ、>126 で引用した箇所にある "Constant initialization" の
定義は 3.6.2 によるんだから、話は変わらないよ。

誤解を招くタイトル含め文面がマズいのは認めるけど、だからこそ本来の意図に沿うように修正
されたんだろうし。
コメント1件

133
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/16 00:44:11  ID:4D4bT+Tb0.n(7)
>129
実行時の初期化とは無縁の理由として
> 変数にconstexpr付けたらコンパイル時定数になる
をあげている(ローカルでもコンパイル時定数になる)

ところが、コンパイル時定数であってもブロックスコープのConstant initilizationは実行時初期化(ブロックに入る前)なので間違い

134
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/16 01:02:26  ID:4D4bT+Tb0.n(7)
>132
6.3.2を参照してるのはConstant initializerの定義だけ、
その初期化が行われるタイミングは6.7に書かれている通りブロックに入る前
ロード後、プログラムに制御が移る前かもしれないし、mainが呼び出された後かもしれない
コメント2件

135
デフォルトの名無しさん (ワッチョイ b2cf-YL17)[sage]   投稿日:2017/01/16 01:17:19  ID:5OapSwc60.n(4)
>134
Constant initializer じゃなくて Constant initialization の定義ね。
その Constant initialization に対する規定がローカル static の場合だけ
無視できるとする根拠が何かあるの?

136
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/16 02:10:36  ID:4D4bT+Tb0.n(7)
> その 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.
コメント1件

137
デフォルトの名無しさん (ワッチョイ b2cf-YL17)[sage]   投稿日:2017/01/16 02:53:47  ID:5OapSwc60.n(4)
>136
別の記述があることが根拠?
それら2つの規定の両方が適用され得るだろうと言ってるんだけど、
なんでどっちか片方しか適用されないと思ってるの?

A ⊃ B の場合に A に対する規定が B にも及ぶってことを認めないの?
(この場合は A = "Constant initialization", B = "Constant initialization of a block-scope entity")
コメント1件

138
デフォルトの名無しさん (オッペケ Sr37-U8Ig)[sage]   投稿日:2017/01/16 07:40:40  ID:a6XjHitHr.n(2)
>137
>134の主張は3.6.2, 6.7のどちらとも矛盾しないように見えるのだが
コメント1件

139
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/16 08:43:01  ID:4D4bT+Tb0.n(7)
むしろ
3.6.2 initialization of non-local variables
と、明確に分けられてる項の規定が全部適用されると言ってるのが不思議過ぎる

http://wg21.cmeerw.net/cwg/issue2026もバグ指摘されてるし、前途多難だ

140
デフォルトの名無しさん (ワッチョイ b2cf-YL17)[sage]   投稿日:2017/01/16 09:38:47  ID:5OapSwc60.n(4)
>138
タイミングについての言及だけ読めばそうだけど、彼は 3.6.2 にある静的初期化一般に対する規定が
ローカル static の場合に限っては及ばない、とする主張をしている。


新しい理由付けも出なくなって平行線みたいだし、次期規格ではざっくり改定される文面の話だし、
もういいかな。

141
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/16 10:48:30  ID:4D4bT+Tb0.n(7)
3.6.2のnon-localに関する規定は6.7で「そのブロックに入る前」と上書きされてるだろ
3.6.2がlocal, non-local問わずに有効なら「そのブロックに入る前」と言う規定は矛盾する
コメント1件

142
デフォルトの名無しさん (スプッッ Sdf2-9KqD)[]   投稿日:2017/01/16 11:01:51  ID:ULOq3Vpcd.n
https://cpprefjp.github.io/reference/atomic/atomic.html
atomicを使ったspinlockなるmutexの例があるのですが
これを再帰ロック可能なrecursive_spinlockにするには
どのように実装すればいいですか。

143
デフォルトの名無しさん (オッペケ Sr37-U8Ig)[sage]   投稿日:2017/01/16 19:11:32  ID:a6XjHitHr.n(2)
>141
「ブロックに入る前、且つ、すべての動的初期化より前」
規格がUNKOなのはさておき、論理的にどこも矛盾していないのでは?

144
デフォルトの名無しさん (ワントンキン MMe2-dqLr)[]   投稿日:2017/01/16 19:40:06  ID:LWQyQSVNM.n
仮にブロックスコープのconstexpr変数が実行時に初期化されたとして、どんな問題が発生するという主張なん?
コメント3件

145
デフォルトの名無しさん (ワッチョイ 3298-los8)[]   投稿日:2017/01/16 22:29:50  ID:UB1GTfE40.n(2)
翻訳時に評価せよと指定したものが
実行時に評価されるようなら
コンパイラを窓から投げ捨てて
アセンブラか機械語を使うしかない

int main() { return 1; }で0を返されるのと同じで
もはや何を言っても無駄、根本的に話にならないということ
コメント2件

146
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/16 23:04:39  ID:4D4bT+Tb0.n(7)
>145
初期化の意味がわからない子は参戦しないように
コメント1件

147
デフォルトの名無しさん (オッペケ Sr37-U8Ig)[sage]   投稿日:2017/01/16 23:23:13  ID:+uglxnZcr.n
>144
特に実害はなくても>94の『実行時の初期化とは無縁』が真実でないことを問題と考える者がいるのだと思っていた

148
デフォルトの名無しさん (ワントンキン MMe2-dqLr)[]   投稿日:2017/01/17 03:28:47  ID:tvPWGsMMM.n
なんというか糞の役にもたたんな
今現在そんな実装のコンパイラがあるわけでもなし、今から実装するにしてもわざわざ複雑にして実行速度落とすような実装にするとも思えないし

149
デフォルトの名無しさん (ワッチョイ a258-rG+u)[sage]   投稿日:2017/01/17 04:25:31  ID:ngprCvv90.n
最近猫でもわかるって奴読んで独学でちょくちょく勉強してんだけど、こんまま独学でプログラミング学んでったらオセロくらいなら作れるようになる?どんくらいかかるかな
コメント1件

150
デフォルトの名無しさん (ドコグロ MM0a-8ZdN)[sage]   投稿日:2017/01/17 07:56:18  ID:ueZ17iDzM.n
>144
組み込みじゃ、ROMになるかRAMになるか大きな違いが出るな
コメント2件

151
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/17 13:27:45  ID:mkv39b380.n
>150
constすら付けなくても初期値が決まっていて変更する可能性のあるコードが無ければ最適化で定数に置き換えられる時代にそんな事気にするんだ?
コメント1件

152
デフォルトの名無しさん (ワッチョイ b624-los8)[]   投稿日:2017/01/17 13:30:54  ID:Pbl2vPGV0.n
>146
おい間抜け
どこかに初期化って書いてあったか?
人を小馬鹿にしたつもりだろうがブーメラン刺さってるぞw
コメント1件

153
デフォルトの名無しさん (ワッチョイ 3e5b-vSov)[sage]   投稿日:2017/01/17 22:57:29  ID:FvzokP9y0.n
>149
オセロくらいなら excel と vba で一週間くらい集中すればできんじゃないかね。
コメント1件

154
デフォルトの名無しさん (ワッチョイ 4f17-0Plu)[sage]   投稿日:2017/01/18 01:28:58  ID:9W34sy+b0.n
>153
アスペ

155
デフォルトの名無しさん (ワッチョイ 6296-8ZdN)[sage]   投稿日:2017/01/18 01:54:34  ID:an9uI7uk0.n
>151
定数が実行時に初期化されれば、それはROMじゃなくてRAMに配置されてるってことだろ?そりゃ組み込みなら気にならないほうがおかしい
コメント1件

156
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/18 02:36:42  ID:n1DpjkbT0.n(2)
>155
int f(){static int v=5;return v;}

int f(){return 5;}
が最適化後は一緒になるって言ってんの。
そして
static constexpr int v=...;
にしたらそのvの初期化値はコンパイル時に求まるし変更出来ない。ここまで言えば最適化後にどうなるか解るよね?
まぁ、constexprの場合は最適化しなくてもなんだけどさ
コメント2件

157
デフォルトの名無しさん (ワッチョイ b2cf-YL17)[sage]   投稿日:2017/01/18 03:40:09  ID:2vnfhfI50.n
>156
>150>144の言った「仮に・・・」へのレスなんだから現実のコンパイラがどうなってるかは関係ないと思われ
コメント1件

158
デフォルトの名無しさん (ドコグロ MM9f-lGK7)[sage]   投稿日:2017/01/18 07:14:44  ID:KfZHaLf7M.n
定数であることと ROM に置くかどうかは別の話だし
コメント1件

159
デフォルトの名無しさん (ワッチョイ 573c-U8Ig)[sage]   投稿日:2017/01/18 08:00:45  ID:+X3tak3t0.n
>156
>最適化後は一緒になるって言ってんの
デバッグ中の挙動を無視されると困ります
コメント1件

160
デフォルトの名無しさん (ワッチョイ 677b-dqLr)[]   投稿日:2017/01/18 08:42:08  ID:n1DpjkbT0.n(2)
>157
ごもっとも。規格がどうかも関係なかったね。
>159
なんで?

161
デフォルトの名無しさん (ブーイモ MMd2-a69X)[sage]   投稿日:2017/01/18 08:52:41  ID:ZS0nd/enM.n
>158
定数であるからromにも置けるって話なんで関係ない訳がない。
コメント1件

162
デフォルトの名無しさん (ドコグロ MM4e-lGK7)[sage]   投稿日:2017/01/18 18:41:42  ID:Abs9KEqJM.n
>161
> 定数であるからromにも置ける
だからと言ってROMに置くとは限らない
って話なんだがお前には難しすぎたか?
コメント1件

163
デフォルトの名無しさん (アウアウカー Sa5f-YGRn)[sage]   投稿日:2017/01/18 21:27:37  ID:4GI0Tt+ca.n
このスレを見て、C++って永遠に喧嘩できて寂しくない言語だと判った

164
デフォルトの名無しさん (ワッチョイ 3e5b-vSov)[sage]   投稿日:2017/01/18 21:56:10  ID:qB5vepR/0.n
こういうやりとり見てるとやっぱリーナスの c++観は正しいなと思う。

165
デフォルトの名無しさん (ブーイモ MM8b-a69X)[sage]   投稿日:2017/01/18 23:18:53  ID:0GLHJE+5M.n
>162
置けるってのは置くこともできるって意味だが、随分日本語不自由なやつだな
コメント1件

166
デフォルトの名無しさん (ドコグロ MM7f-j6UX)[sage]   投稿日:2017/01/19 06:46:32  ID:JadLiFtgM.n
>165
> 随分日本語不自由なやつだな
「置ける」と言う可能性の話と「置く」と言う実際の動作の区別がつかない奴に言われても...
でっかいブーメラン乙としか言いようがないわな w

167
デフォルトの名無しさん (ワッチョイ 037b-rTuY)[]   投稿日:2017/01/19 06:57:37  ID:bO+XZlhy0.n(3)
何を言い争ってんのか解らん
直値でもROMに置けると言えるだけでなんの違いも無いんだが。
コメント2件

168
デフォルトの名無しさん (ワッチョイ 637b-voKO)[sage]   投稿日:2017/01/19 08:39:21  ID:4Gh/dudO0.n
>152
初期化==評価と考えてなけりゃ >145は出てこねーんだよ バーカ
コメント1件

169
デフォルトの名無しさん (スプッッ Sd1f-xrkK)[]   投稿日:2017/01/19 10:16:43  ID:CldDY8MLd.n(2)
int a=100;
int&& b=std::move(static_cast<int>(a));
b=200;
aは100、bは200になるのですが
キャストすると必ず一時オブジェクトが生成されるのでしょうか
環境によってaもbも200になったりしますか。
コメント2件

170
デフォルトの名無しさん (ワッチョイ ffcf-JQ1R)[sage]   投稿日:2017/01/19 10:39:40  ID:gPdsJo1i0.n

171
デフォルトの名無しさん (スプッッ Sd1f-xrkK)[]   投稿日:2017/01/19 10:50:03  ID:CldDY8MLd.n(2)
わかりました

172
デフォルトの名無しさん (ワッチョイ 23c9-mcUU)[sage]   投稿日:2017/01/19 11:10:02  ID:ipEwSksA0.n
次に、「ボクのパソコンではaが200になるんてすけど」というレスが来るに違いない

173
デフォルトの名無しさん (ドコグロ MMff-j6UX)[sage]   投稿日:2017/01/19 12:54:31  ID:Ccs4bPhGM.n
>167
わからないなら絡んでくるなよ w
コメント1件

174
デフォルトの名無しさん (オッペケ Sr87-mcUU)[sage]   投稿日:2017/01/19 14:28:16  ID:oLhGNghYr.n
>169
>環境によってaもbも200になったりしますか

Yes

175
デフォルトの名無しさん (ワッチョイ bfcb-SmTw)[]   投稿日:2017/01/19 20:26:21  ID:+cE5RWPo0.n
どっちですか

176
デフォルトの名無しさん (ワッチョイ cf24-RK9q)[]   投稿日:2017/01/19 21:29:45  ID:x+icVyy10.n
>173
わからないなら絡まれたフリをするなよw
おまえに教えを請うようなクズの中のクズはさすがにこのスレにもいないだろうから
コメント1件

177
デフォルトの名無しさん (ドコグロ MMff-j6UX)[sage]   投稿日:2017/01/19 21:35:22  ID:ylWIT8ZQM.n
>176
わからんって言ってるのは俺じゃなくて >167 なんだが...
色々お前には難しすぎたか? w

178
デフォルトの名無しさん (ワッチョイ 037b-rTuY)[]   投稿日:2017/01/19 21:54:21  ID:bO+XZlhy0.n(3)
何を言い争ってんのかわからん。

179
デフォルトの名無しさん (ワッチョイ ff6c-L1Ju)[sage]   投稿日:2017/01/19 21:55:13  ID:f8wSWc2J0.n
いいのよ
コメント1件

180
デフォルトの名無しさん (ワッチョイ 037b-rTuY)[]   投稿日:2017/01/19 21:56:39  ID:bO+XZlhy0.n(3)
>179
ありがとう

181
デフォルトの名無しさん (アウアウカー Sac7-WqDQ)[sage]   投稿日:2017/01/20 02:35:51  ID:WXRyG1p+a.n
最近この喧嘩は自演じゃないかと思ってる

182
デフォルトの名無しさん (ワッチョイ f302-JQ1R)[sage]   投稿日:2017/01/20 08:56:02  ID:1CC8R4dK0.n
ここで出た話題のTips集を出したら売れるんじゃないかと思えてきたわ
コメント1件

183
デフォルトの名無しさん (スプッッ Sd1f-ddg/)[sage]   投稿日:2017/01/20 18:53:55  ID:zIVGmPHgd.n
32bitのソフトを64bit対応させようかなって考えてるのだけど
printf, winapi, _t型変数以外気を付けることある?俺これやってはまったわみたいなのが知りたい

184
デフォルトの名無しさん (ワッチョイ cf24-RK9q)[]   投稿日:2017/01/20 23:36:02  ID:GZ99lyBK0.n
>168
いーや、初期値==評価とは考えずに書いた
事実とおまえの考えは完全が食い違っているんだよ
せいぜい妄想の世界で自画自賛してろナルシスト
コメント1件

185
デフォルトの名無しさん (ワッチョイ 637b-voKO)[sage]   投稿日:2017/01/21 01:01:56  ID:v+i75+9D0.n
>184
引っかかりやがった
初期化の話題で評価と言い出しのはテメーだ バーカ
コメント1件

186
デフォルトの名無しさん (ワッチョイ cf7b-5ScM)[sage]   投稿日:2017/01/21 01:52:25  ID:RmTA4cQd0.n
江添はなんて言ってる?

187
デフォルトの名無しさん (アウアウカー Sac7-WqDQ)[sage]   投稿日:2017/01/21 11:02:38  ID:Bf4L6OzOa.n
それワイのやつや!

188
デフォルトの名無しさん (ワッチョイ cf24-RK9q)[]   投稿日:2017/01/22 00:06:25  ID:LwmXYJhf0.n
>185
だから初期化ってどこに書いてあるんだよ
幻視か? だからリスパダールちゃんと飲めとあれほど・・・

189
デフォルトの名無しさん (ワッチョイ cf7b-rTuY)[]   投稿日:2017/01/22 00:24:56  ID:77/TNfJH0.n
>182
こんなのどうやってまとめるんだ…

190
デフォルトの名無しさん (ワッチョイ bfcb-xrkK)[]   投稿日:2017/01/22 02:31:51  ID:hchjfZjx0.n(2)
江口はなんて?

191
デフォルトの名無しさん (ワッチョイ 6f56-3qL8)[sage]   投稿日:2017/01/22 02:40:24  ID:rrJzCAZR0.n(3)
教えて下さい。
環境は 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を呼んで欲しい
}
コメント2件

192
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-o4cX)[sage]   投稿日:2017/01/22 03:05:41  ID:NkQzBql/K.n(2)
>191
1 charは常に2バイトではない。あなたはマルチバイト文字列の基礎を理解していないようだ。
マルチバイト文字列中の複数のcharが一文字になっているか否かは、
文字列の先頭から1charごとにcharの値の範囲を確認し、lead byteかtrail byteかを判定するしかない。
コメント1件

193
デフォルトの名無しさん (ワッチョイ bfcb-SmTw)[]   投稿日:2017/01/22 03:12:07  ID:hchjfZjx0.n(2)
ビルド通らないからなんでかはわかんない

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&)
{
}

これでいけない?

194
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK47-o4cX)[sage]   投稿日:2017/01/22 03:12:21  ID:NkQzBql/K.n(2)
型情報からはマルチバイト文字列のlead/trailに関する情報は得られない。よって、各charの値の範囲を実際に確認しないと、わからない。

195
デフォルトの名無しさん (ワッチョイ 23c9-mcUU)[sage]   投稿日:2017/01/22 07:14:06  ID:7mC+0LM10.n(2)
>192
日本語が理解できないボケ老人は去れ

196
デフォルトの名無しさん (ワッチョイ a37d-wsSS)[sage]   投稿日:2017/01/22 08:04:55  ID:5o7PrILb0.n
>191
例のコンパイラがぶっ壊れてるんだろうね
gccは期待通り
http://ideone.com/9pSqel

197
デフォルトの名無しさん (ワッチョイ 037b-rTuY)[]   投稿日:2017/01/22 08:28:45  ID:gigvK4EO0.n
オーバーロードでよくね

198
191 (ワッチョイ 6f56-3qL8)[sage]   投稿日:2017/01/22 08:37:36  ID:rrJzCAZR0.n(3)
>192-196
ありがとうございます。

>193
確かに期待通りの動作をします。
ただ、この先 MFC の CStringA, CStringW, 生配列などを仮引数として与えたいため、operator[] の戻り値で判定出来ないか考えていました。

>196
なるほど。コンパイラの問題くさいので代替案を考えてみます。
ありがとうございました。

199
191 (ワッチョイ 6f56-3qL8)[sage]   投稿日:2017/01/22 08:50:18  ID:rrJzCAZR0.n(3)
>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バイト版
}
コメント1件

200
デフォルトの名無しさん (ワッチョイ 237b-rTuY)[]   投稿日:2017/01/22 09:58:50  ID:iEDujvJA0.n

201
デフォルトの名無しさん (ワッチョイ f302-JQ1R)[sage]   投稿日:2017/01/22 13:37:19  ID:gnARoY8z0.n
CStringとかまだ存在してたのかよ

202
デフォルトの名無しさん (ワンミングク MM9f-aDhR)[sage]   投稿日:2017/01/22 14:40:31  ID:hBhrTyQGM.n

203
デフォルトの名無しさん (ワッチョイ ffcf-JQ1R)[sage]   投稿日:2017/01/22 15:06:13  ID:paMlvMvI0.n
>199
sizeof(decltype(STR()[0])) って sizeof(STR()[0]) と何か違ったっけ?

204
デフォルトの名無しさん (ワッチョイ 23c9-mcUU)[sage]   投稿日:2017/01/22 15:53:04  ID:7mC+0LM10.n(2)
mainがvoidなレベルの人にそんな突っ込みをしても…
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

プログラム板 タイトル検索

このスレッドが人気です(実況系)
世界遺産 (1000)TBS実況
笑点笑点笑点笑点笑点笑点笑点笑点★3 (996)NTV実況
真相報道 バンキツャ!★2 (260)NTV実況
報道ステーション SUNDAY ★3 (878)テレ朝実況
ちびまる子+サザエさん=フジテレビアニメ夜の部 3 (211)フジ実況
機動戦士ガンダム 鉄血のオルフェンズ #15(#40)「燃ゆる太陽に照らされて★6 (879)TBS実況
【マターリ】機動戦士ガンダム 鉄血のオルフェンズ #15(#40)★2 (464)TBS実況
【sage】笑点→バンキシャ→DASH sp【マターリ】 (368)NTV実況
このスレッドが人気です(ニュース系)
【相撲】大相撲一月場所千秋楽 綱へ稀勢有終の14勝!土俵際逆転白鵬を降す 蒼国来12番技能賞、高安・御嶽・貴ノ岩も11番三賞 (636)音楽・芸能ニュース
【国際】口の中で電子たばこのLG製バッテリーが爆発 歯を7本失い、顔と首に熱傷、口や喉に異物が食い込む大けがをした米国人男性 (337)ニュー速+
【テニス】ジョコに続きマレーも敗退 ズベレフ(兄)大金星! 荒れる全豪、本命不在の混戦へ (909)音楽・芸能ニュース
【芸能】松ちゃん“確執騒動”角田がドタキャン!?「共演NGとかの小さい話ではない」★5 (733)音楽・芸能ニュース
【仮想現実】パンティの臭いを再現!「臭いつきヘッドセット」で究極のバーチャルセックス 米国でサービス提供開始 (556)ニュー速+
【卓球】16歳平野美宇が史上最年少V 女王石川佳純を破る/全日本選手権 (717)音楽・芸能ニュース
【医療】キスでも感染!急増する「梅毒」の強力な感染力とは (249)ニュー速+
【観光】行くべき都市は「食い倒れの街大阪」 NYタイムズ選出 (614)ニュー速+
プログラム板の人気スレ
【統計分析】機械学習・データマイニング11 (1001)
C++相談室 part129 (204)
Excel VBA 質問スレ Part45 (270)
C言語なら俺に聞け 138 (593)
ふらっと C#,C♯,C#(初心者用) Part126 (328)
Xamarin Part3 (262)
スレ立てるまでもない質問はここで 145匹目 (141)
くだすれPython(超初心者用) その31 (899)
【PHP】下らねぇ質問はここに書き込みやがれ 7 (642)
Visual Studio 2015 Part7 (1000)
Androidプログラミング質問スレ revision52 (587)
関数型プログラミング言語Haskell Part30 (50)
クラス名・変数名に迷ったら書き込むスレ。Part27 (741)
次世代言語議論スレ【Go Rust Haskell Scala Erlang Elixir】 (477)
+ JavaScript(ECMAScript)質問用スレッド vol.122 + (985)
☆★Java質問・相談スレッド179★★ (596)
推薦図書/必読書のためのスレッド 80 (950)
Swift part9 (597)
Ruby 初心者スレッド Part 59 (562)
人工知能ディープラーニング機械学習のための数学 (105)
テストしにくいコードをテストする方法 その2 (89)
Java入門・初心者質問スレ Part.2 (303)
【JavaScript】スクリプト バトルロワイヤル55【php,py,pl,rb】 (461)
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus Rift/その他VR】 (351)
+ JavaScript の質問用スレッド vol.122 + (631)
C++ Builder vs C# どっちがいいか教えて (931)
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 (266)
ディープラーニング (965)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
Amazon


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 正常取得 - 3件 - 取得完了