板検索:
C++相談室 part129 (1961)
まとめビュー
最新スレッド候補が見つかりました
C++相談室 part133 (17) スレ作成日時:2017/11/24 16:52:50
過去ログ C++相談室 part133 (17) 2017/11/24 16:52〜
過去ログ C++相談室 part132 (1001) 2017/10/10 00:11〜
過去ログ C++相談室 part131 (758) 2017/07/29 11:28〜
重複読み込みスレ:このスレは、2重読み込みでレスが重複している可能性があります。修復する場合はこちらをクリックしてください。
1
デフォルトの名無しさん(ワッチョイ dfcf-HvS5)[sage]   投稿日:2017/01/09 14:49:27  ID:p96WJVyd0.n(2)
次スレを立てる時は本文の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
コメント6件


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

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

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

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

#include <stdafx.h>
後死ね。

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

32
デフォルトの名無しさん (ワッチョイ df17-pn3f)[]   投稿日:2017/01/11 14:03:34  ID:9AYGk8zp0.n(4)
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(6)
>31
>何がお題変更なの?
相性が悪いものの話なんかしてねーし
スレッド間で共有したい変数の話の最中に
「スレッド間でシェアする必要がなければTLS」とか力説し始めて
アホなの?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

異論反論は勿論認める。

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

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

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

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

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

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

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

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

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

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

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

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

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

100
デフォルトの名無しさん (ワッチョイ b2ac-vSov)[sage]   投稿日:2017/01/14 15:44:02  ID:SDa1ObQ20.n(2)
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(4)
規格を読まずに言うと8.5p11

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

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

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

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

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

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

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

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

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

111
デフォルトの名無しさん (ワッチョイ b2cf-YL17)[sage]   投稿日:2017/01/15 16:26:13  ID:6tnmROhD0.n(8)
>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
コメント6件

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

139
デフォルトの名無しさん (ワッチョイ 1f7b-cG99)[sage]   投稿日:2017/01/16 08:43:01  ID:4D4bT+Tb0.n(14)
むしろ
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(8)
>138
タイミングについての言及だけ読めばそうだけど、彼は 3.6.2 にある静的初期化一般に対する規定が
ローカル static の場合に限っては及ばない、とする主張をしている。


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

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

142
デフォルトの名無しさん (スプッッ Sdf2-9KqD)[]   投稿日:2017/01/16 11:01:51  ID:ULOq3Vpcd.n(2)
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(4)
>141
「ブロックに入る前、且つ、すべての動的初期化より前」
規格がUNKOなのはさておき、論理的にどこも矛盾していないのでは?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Yes

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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(4)
型情報からはマルチバイト文字列のlead/trailに関する情報は得られない。よって、各charの値の範囲を実際に確認しないと、わからない。

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

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

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

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

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

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

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

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

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

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

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

204
デフォルトの名無しさん (ワッチョイ 23c9-mcUU)[sage]   投稿日:2017/01/22 15:53:04  ID:7mC+0LM10.n(10)
mainがvoidなレベルの人にそんな突っ込みをしても…

205
デフォルトの名無しさん (ワッチョイ cf24-RK9q)[]   投稿日:2017/01/22 20:43:26  ID:LwmXYJhf0.n(4)
戻らないmainについてもガタガタ言っちゃう人がねえ

206
デフォルトの名無しさん (ワッチョイ 037b-rTuY)[]   投稿日:2017/01/22 22:57:58  ID:gigvK4EO0.n(6)
mainのreturnは省略したら0が返ることが保証されている
コメント2件

207
デフォルトの名無しさん (ワッチョイ 23c9-mcUU)[sage]   投稿日:2017/01/22 22:59:58  ID:7mC+0LM10.n(10)
>206
当たり前のことを言い出して、いきなりどうした
コメント2件

208
デフォルトの名無しさん (ワッチョイ 037b-rTuY)[]   投稿日:2017/01/22 23:01:08  ID:gigvK4EO0.n(6)
>207
戻らないmain(?)へ宛
コメント2件

209
デフォルトの名無しさん (ワッチョイ 23c9-mcUU)[sage]   投稿日:2017/01/22 23:14:20  ID:7mC+0LM10.n(10)
>208
なるほど理解した
『戻らないmain』は[[noreturn]]のことだと思ったので理解できずスルーしていた
人に『リスパダールちゃんと飲めとあれほど』と言って自分が飲み忘れたのかと

210
デフォルトの名無しさん (ワッチョイ 23c9-mcUU)[sage]   投稿日:2017/01/22 23:26:22  ID:7mC+0LM10.n(10)
>203
CStringは知らないが、stringは恐らく同じ
sizeof(STR()[0])
 →sizeof (char &型の左辺値)
 →sizeof (char)と同じ
sizeof(decltype(STR()[0]))
 →sizeof (decltype(char &型の左辺値))
 →sizeof (char &型)
 →sizeof (char)と同じ

211
191 (アウアウカー Sac7-/Qox)[sage]   投稿日:2017/01/23 09:48:36  ID:SwVOU3U8a.n(2)
>203
vc++2015で deltype をぬくと、関数に[] は出来ません、みたいなエラーで通りませんでした。
STR()をコンストラクタではなく、関数と思ってるんだと思います。
コメント2件

212
デフォルトの名無しさん (オッペケ Sr87-mcUU)[sage]   投稿日:2017/01/23 17:40:29  ID:oJYEiyR6r.n(2)
宣言に解釈できるときは宣言として解釈
みたいなルールだっけ

213
デフォルトの名無しさん (ワッチョイ ff9f-tc54)[sage]   投稿日:2017/01/23 18:40:50  ID:FReCyx8S0.n(2)
コンストラクタ ⊆ 関数

214
デフォルトの名無しさん (アウアウカー Sac7-WqDQ)[sage]   投稿日:2017/01/23 19:40:02  ID:Ij4EmhsFa.n(2)
アンダーバー要らなくね?

215
デフォルトの名無しさん (ワッチョイ ffcc-DOWB)[sage]   投稿日:2017/01/24 03:03:03  ID:ch78KtiL0.n(2)
MFCとか何処のバカが設計したんだろうな
とっくに絶滅しているもんだとおもっていたぜw

216
デフォルトの名無しさん (ワッチョイ 037b-rTuY)[]   投稿日:2017/01/24 03:50:21  ID:nvNd8iP10.n(2)
それより優れたものを設計してから言えよな
コメント2件

217
デフォルトの名無しさん (ワッチョイ f302-JQ1R)[sage]   投稿日:2017/01/24 03:56:08  ID:Af36V4kC0.n(2)
>216←今日のバカ

218
デフォルトの名無しさん (ワッチョイ 137b-Eksc)[]   投稿日:2017/01/24 11:11:02  ID:dVVoZ7Su0.n(2)
MFCが作られた時代を考えられないやつのほうがバカなんだよなあ
あれはWin32APIの薄いラッパでしかないから
文句あるなら別のライブラリを使えばいいだけの話、それも出来ないならやっぱりお前が無能でバカ

219
デフォルトの名無しさん (スップ Sd1f-xrkK)[]   投稿日:2017/01/24 11:33:11  ID:9X3I9Jqtd.n(4)
int (*func)(int) = &hoge;
func = nullptr;

funcへの代入をできないようにconst付けたいのですが
どう書けばいいですか。
usingやtypedefは使わない方法でお願いします。

あとメンバ関数への参照はどう記述すればいいですか
int (hage::*func)(int) = &hage::test;
の参照版です
コメント4件

220
デフォルトの名無しさん (アウアウカー Sac7-WqDQ)[sage]   投稿日:2017/01/24 11:41:16  ID:GCEfrzc1a.n(2)
益のない煽りはよしなよ(・ิω・ิ)

221
デフォルトの名無しさん (ワッチョイ 7330-J7L1)[sage]   投稿日:2017/01/24 12:11:20  ID:ekWjtoGq0.n(2)
>219
int (* const func)(int) = &hoge;

int (piyo::* mf0)(int) = &piyo::test;
int (piyo::* & mf1)(int) = mf0;

int (piyo::* const & mf2)(int) = &piyo::test;
コメント2件

222
デフォルトの名無しさん (ワッチョイ ffcf-JQ1R)[sage]   投稿日:2017/01/24 12:13:02  ID:NfDXKGen0.n(4)
>211
そっか sizeof だと式と型の曖昧さが問題になるけど decltype なら式しか取らないから曖昧さを消せるのか。

223
デフォルトの名無しさん (ワッチョイ ffcf-JQ1R)[sage]   投稿日:2017/01/24 12:13:28  ID:NfDXKGen0.n(4)
>219
[dcl.mptr]/3 (Note) "There is no "reference-to-member" type in C++."

224
デフォルトの名無しさん (スップ Sd1f-xrkK)[]   投稿日:2017/01/24 12:19:40  ID:9X3I9Jqtd.n(4)
>221
それだとメンバ関数のポインタの参照になってませんか
int (&func)(int) = hoge;
のメンバ関数版はできないでしょうか

constの件はうまくいきました
コメント2件

225
デフォルトの名無しさん (ワッチョイ ffd9-iijN)[sage]   投稿日:2017/01/24 13:24:18  ID:kmpgWA440.n(2)
>224
thisが必要になるから無理なんじゃないの
それよりクラス内でメンバ関数へのポインタを書くとthisが必要になる

226
デフォルトの名無しさん (ワッチョイ 6f5b-OQjX)[sage]   投稿日:2017/01/24 21:23:55  ID:GIi5sfFU0.n(2)
一生こういう些末なところに引っかかって
中身を書けない人生を送るんだろうな〜

227
デフォルトの名無しさん (ワッチョイ cf42-Wde1)[sage]   投稿日:2017/01/25 00:27:17  ID:I9ZrCxSQ0.n(2)
uint8_tとbasic_ifstream組み合わせるといろいろ面倒なんだけど、みなバイナリファイル読み込むときどうしてんの?普通にchar使っ使う?

228
デフォルトの名無しさん (オッペケ Sr87-mcUU)[sage]   投稿日:2017/01/25 00:35:21  ID:KGxAJ6V6r.n(2)
バイナリでchar使うのは30年前の老人の発想
コメント4件

229
デフォルトの名無しさん (ササクッテロレ Sp87-Taza)[sage]   投稿日:2017/01/25 00:51:14  ID:/+qbj4+Vp.n(2)
fopenでおk

230
デフォルトの名無しさん (ワッチョイ 037b-rTuY)[]   投稿日:2017/01/25 01:30:42  ID:5KwEWhG70.n(2)
他の型をバイト列として解釈するときは(unsigned )charしか許されてないから普通にchar使う
コメント2件

231
デフォルトの名無しさん (ワッチョイ ff17-SmTw)[]   投稿日:2017/01/25 02:33:17  ID:LUWqNFoa0.n(2)
fgetc() の戻り値を直接 char 変数に代入して EOF(=-1)判定するヘマ。あるある

232
デフォルトの名無しさん (ワンミングク MM9f-cBXx)[sage]   投稿日:2017/01/25 04:12:15  ID:nJO+CT7AM.n(4)
ねぇよ

233
デフォルトの名無しさん (アウアウウー Sa67-OTU1)[sage]   投稿日:2017/01/25 15:31:39  ID:uJriqNlza.n(2)
fopen、fgets系は使わないな。処理をFILE*依存にしたくない

>230
>228が言ってるのはそういう意味のcharじゃないでしょ

234
デフォルトの名無しさん (ワッチョイ cf24-RK9q)[]   投稿日:2017/01/25 21:44:43  ID:gbQNFS3L0.n(2)
FILE*に依存しないとしてじゃあ何を使うんだ?
intにも依存したくないのか?

235
デフォルトの名無しさん (ワンミングク MM9f-cBXx)[sage]   投稿日:2017/01/25 22:01:41  ID:nJO+CT7AM.n(4)
fileno して read/writeかな

236
デフォルトの名無しさん (ワッチョイ aacc-X95Y)[sage]   投稿日:2017/01/26 00:52:19  ID:GN6UrdAH0.n(2)
おまいら相変わらず抵レベルな話題しているな

237
デフォルトの名無しさん (ワッチョイ 6f02-FuHd)[sage]   投稿日:2017/01/26 02:07:00  ID:cRvsGxqc0.n(2)
高レベルな人が2ch何か見てるわけないからな
コメント2件

238
デフォルトの名無しさん (ワッチョイ 2613-AZYz)[sage]   投稿日:2017/01/26 06:24:12  ID:XBNxNxvo0.n(2)
>237
FILE * を使う人はどうして2chをみないのか?iostream な人はどうなるのか?

239
デフォルトの名無しさん (スップ Sdca-kwgD)[]   投稿日:2017/01/26 08:04:45  ID:fFyxUIyid.n(2)
プログラミングにはCBDオイルというのが有効だそうです。アイデアが治療に有効するので安倍内閣総理大臣も持病に使っているそうです。
ビル・ゲイツもこれで億万長者になれました

240
デフォルトの名無しさん (JP 0H16-T3y8)[sage]   投稿日:2017/01/26 13:11:34  ID:lD0mvySBH.n(2)
低レイヤーな釣りですね

241
デフォルトの名無しさん (ワッチョイ 3e24-XYXB)[]   投稿日:2017/01/26 18:22:33  ID:A9/xu7Tb0.n(2)
物理層?

242
デフォルトの名無しさん (ワッチョイ aacc-X95Y)[sage]   投稿日:2017/01/29 15:48:31  ID:Hm/zwJzS0.n(2)
この処理低レベルだねぇと言われてムキーっとなるヤツ→素人童貞
この処理低レベルだねぇと言われて得意げにほくそ笑むヤツ→玄人

243
デフォルトの名無しさん (ワッチョイ af7b-FuHd)[sage]   投稿日:2017/01/29 16:07:03  ID:K+/fnyLa0.n(2)
すみません 低レベルな処理がが好きなんで

244
デフォルトの名無しさん (ワッチョイ 1bc9-kHcU)[sage]   投稿日:2017/01/29 16:12:04  ID:2ZaFXkbr0.n(2)
環境・処理系固有の事情やバグに悩まされてばかりで
幸せな顔をして仕事をしている人を見たことがない

245
デフォルトの名無しさん (アウアウカー Sa5b-seiz)[sage]   投稿日:2017/01/29 16:31:19  ID:sujTTxNda.n(2)
低レイヤって言えばいいのよ

246
デフォルトの名無しさん (ワッチョイ 0ac0-H6k8)[sage]   投稿日:2017/01/29 22:01:55  ID:F8NpKYaN0.n(2)
コスプレイヤーの仲間かな

247
デフォルトの名無しさん (ワッチョイ 3e24-BAqL)[]   投稿日:2017/01/30 21:07:15  ID:P5tJpKPw0.n(2)
>228
std::fstream::readの引数が【なぜ】charなのか
理解できないアフォ?

248
デフォルトの名無しさん (ワッチョイ 6fc9-a+zf)[sage]   投稿日:2017/02/01 22:16:18  ID:zf0e/zUB0.n(2)
30年前の設計だからだ!

249
デフォルトの名無しさん (ワントンキン MM1a-9Rjx)[]   投稿日:2017/02/01 22:52:40  ID:mWAIN14mM.n(2)
むしろバイナリでchar以外何使うんだ?

250
デフォルトの名無しさん (ワッチョイ 137b-1ST5)[sage]   投稿日:2017/02/02 00:40:35  ID:kju30PyH0.n(2)
いやバイナリならどう読もうが書こうがいいと思うが。
てか疑問の意味がわからん。
コメント2件

251
デフォルトの名無しさん (ワッチョイ 7fcf-1ST5)[sage]   投稿日:2017/02/02 01:35:32  ID:FXYEZ0RW0.n(2)
>250 そんなんじゃ type based aliasing rule に殺されるよ

252
デフォルトの名無しさん (ワッチョイ 1302-1ST5)[sage]   投稿日:2017/02/02 01:58:08  ID:hMTSyXzS0.n(2)
何か動作がおかしいときになってから考えれば良いんだよ
標準的な環境では考える必要は無いこと

253
デフォルトの名無しさん (ワッチョイ cf24-1aN8)[]   投稿日:2017/02/02 22:10:32  ID:1pIxEkoa0.n(2)
真性アフォが早くも三名か。嘆かわしい。

254
デフォルトの名無しさん (オッペケ Sra7-dUno)[sage]   投稿日:2017/02/03 08:10:44  ID:HxuiJzZXr.n(2)
真性のアフォの内の二人くらいは
たいてい片山の自演

255
デフォルトの名無しさん (スップ Sd9f-aC2u)[sage]   投稿日:2017/02/03 13:51:28  ID:+x5EsLXNd.n(4)
新卒一年目で過去のコードをバージョンアップさせる業務についてるんだけど
会社のコードってなんであんなにdefine切ったりtypedefしまくってるんだ?
可読性低くない?始めて作った人には良いだろうけど後のこと考えるとデメリットなんではって思うんだけど...
コメント4件

256
デフォルトの名無しさん (ワッチョイ 6f6c-i1/f)[sage]   投稿日:2017/02/03 13:57:14  ID:Fv/X2f+d0.n(2)
場合によるからなんとも
コメント2件

257
デフォルトの名無しさん (ワッチョイ 7f7b-1ST5)[sage]   投稿日:2017/02/03 15:21:22  ID:cyynpkXi0.n(2)
一年目か凄いね

258
デフォルトの名無しさん (アウアウカー Sae7-mIyn)[sage]   投稿日:2017/02/03 16:26:23  ID:oWJS3iiDa.n(2)
スマン、片山って誰ンゴ?

259
デフォルトの名無しさん (スップ Sd9f-aC2u)[sage]   投稿日:2017/02/03 17:44:58  ID:+x5EsLXNd.n(4)
>256
それを言っちゃあおしまいだよ...と言いたいけどまさにそうか
windowsapiが絡んでくると本当にわけがわからなくなる
MSDNも読みにくいし

260
デフォルトの名無しさん (ブーイモ MMc7-plQq)[sage]   投稿日:2017/02/03 19:35:01  ID:8SRwU46KM.n(2)
参考までに、どんなdefIneやtypedefなん?
コメント2件

261
デフォルトの名無しさん (ワントンキン MM1f-fOGj)[sage]   投稿日:2017/02/03 21:14:55  ID:DgoKILm5M.n(2)
>255
情報が増えるtypedefは正義
たとえば、
typedef std::vector<int> personal_id_array_type;

減るtypedefはゴミ
たとえば、
typedef std::vector<int> array_type;
コメント4件

262
デフォルトの名無しさん (ワッチョイ a3a6-0MWP)[sage]   投稿日:2017/02/03 21:24:44  ID:2s9sq5BM0.n(2)
>261
情報の増減がどこにあると?

263
デフォルトの名無しさん (ワッチョイ 937b-aC2u)[sage]   投稿日:2017/02/03 21:43:49  ID:flkT/o5k0.n(2)
>260
>261の前者・後者両方ともある
あと色々な名前で__stdcallが切られてたりして読むのがきつい

264
デフォルトの名無しさん (ワッチョイ a37b-jpzQ)[]   投稿日:2017/02/03 22:05:00  ID:ubtIaYbs0.n(2)
ちなみにお前らの思うきれいなソースって具体的にどれよ
コメント2件

265
デフォルトの名無しさん (スッップ Sd9f-oUAv)[]   投稿日:2017/02/03 22:11:40  ID:7t2mdctmd.n(2)
glm

266
デフォルトの名無しさん (ワッチョイ cf24-1aN8)[]   投稿日:2017/02/03 22:55:16  ID:aXFSiqlm0.n(2)
261が言ってるのは
システムハンガリアンとアプリケーションハンガリアンてことだ
ハンガリー記法に限らず意味づけと言うまでもないことを
どう位置づけるべきかってこと

267
デフォルトの名無しさん (ワッチョイ c35b-0MWP)[sage]   投稿日:2017/02/03 23:39:20  ID:CYbB7nGp0.n(2)
>255
変更しやすくする為じゃないの?
一箇所でそれ関連を纏めて変更したいんでしょ。
今は偶々同じ std:vector<int> なだけで。
コメント2件

268
デフォルトの名無しさん (ワッチョイ 1302-1ST5)[sage]   投稿日:2017/02/04 00:17:30  ID:DV7gEIN40.n(4)
m_ulDataCntとか全く意味を持たない変数名が多用されてて辛いわ
コメントも無い
コメント2件

269
デフォルトの名無しさん (ワッチョイ ffc0-Sup+)[sage]   投稿日:2017/02/04 05:48:10  ID:/r5Uxr2+0.n(2)
>264
ソースは俺

270
デフォルトの名無しさん (ワッチョイ 937b-aC2u)[sage]   投稿日:2017/02/04 06:49:15  ID:JWHU8o9P0.n(2)
>267
なんか小難しい
定義されたものをさらに定義して
さらにさらに定義してってのをやってるのも同じなんかな?
見たことない型を追うだけで何ヵ所も追わないといけなくて大変
コメントもないし
コメント2件

271
デフォルトの名無しさん (ワッチョイ d3dc-0e9Z)[sage]   投稿日:2017/02/04 07:32:17  ID:uizo/+L30.n(2)
>268
字面だけで推測するなら m_ulDataCnt は
m_ クラスのメンバ変数である
ul unsigned long
DataCnt データの個数
てな感じに見えるね。

元のソースファイルが一貫した命名規則を使ってれば
それがどんな規則であれ、見てるうちに慣れてくると思うよ。
コメント4件

272
デフォルトの名無しさん (ワッチョイ 7fcc-ysPd)[sage]   投稿日:2017/02/04 07:39:17  ID:6QMeFViK0.n(4)
クソみてぇな命名規則

273
デフォルトの名無しさん (ワッチョイ c35b-0MWP)[sage]   投稿日:2017/02/04 08:42:25  ID:UEIbCXwH0.n(6)
>270
基本的にはそうでしょ。
ある物をdoubleにするかfloatで済ますかという場合、系統毎にtypedefをしてそれを使うしかない。
クラスの継承も同じだと思うけど。

というか読み方間違ってるだろ。まずは縦に読まずに横に読めよ。
そしてそれ以前に上司に聞けよ。
どのみちソースは出せないのだろうから、ここでいくら聞いてもかなり憶測を含んだ回答しか得られない。

コメントが無いのを問題に思うのなら、コメントを付けるのもお前の仕事だろ。
ただ正直言って、m_ulDateCntは>271の言うとおりだろうし、そんなところにコメントがあっても嬉しくない。
多分君とそのソースでコメント作成基準に大幅にずれがある。
それは上司と打ち合わせしないと駄目だ。
最近の傾向としては、「コード読めば分かることをコメントするな!」みたいなのがあるが、
君はまさにその類のコメントを付けようとしている。
ただ逆に、何事であってもコメントを付けて二重化し「間違っていない」事を示す文化の所もある。
いずれにしても合わせるしかないんだから上司に聞け。

274
デフォルトの名無しさん (ワッチョイ a37b-jpzQ)[]   投稿日:2017/02/04 08:49:53  ID:XS0fIkHD0.n(6)
とりあえずシステムハンガリアンは糞

275
デフォルトの名無しさん (ワッチョイ cf24-1aN8)[]   投稿日:2017/02/04 10:35:39  ID:BOsvOfBI0.n(2)
doubleかfloatかに迷いがあるときはtemplateだろjk

276
デフォルトの名無しさん (ワッチョイ cf6b-aC2u)[sage]   投稿日:2017/02/04 20:11:06  ID:tL9rMbFt0.n(4)
>271
こういうの読めるようになりたい
アンダーバーとかなんか特徴あるんかね?
コメント6件

277
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK67-DkDD)[sage]   投稿日:2017/02/04 20:13:21  ID:sK4bvJ1nK.n(2)
>276
MFCのソース見れば時代遅れのハンガリアンが見れる。

278
デフォルトの名無しさん (ワッチョイ 7fcc-ysPd)[sage]   投稿日:2017/02/04 20:29:05  ID:6QMeFViK0.n(4)
MSのバカ社員が勘違いしてシステムハンガリアンが出来た

279
デフォルトの名無しさん (ワッチョイ c35b-0MWP)[sage]   投稿日:2017/02/04 20:32:51  ID:UEIbCXwH0.n(6)
>276
むしろどこが読めないんだ?
271以外の解釈はないだろ。
コメント2件

280
デフォルトの名無しさん (ワッチョイ 7f3c-ZDta)[sage]   投稿日:2017/02/04 20:36:47  ID:pJMir97a0.n(4)
>276
パターン認識って言うか慣れでしょ
いろんなソース見てりゃだんだんなれてくるよ

281
デフォルトの名無しさん (ワッチョイ cf6b-aC2u)[sage]   投稿日:2017/02/04 20:37:44  ID:tL9rMbFt0.n(4)
ハンガリアンってなんだ
ってレベルで初めて見るわ

>279
それは規則とか法則とか知ってるから読めるんだろ
大まかに言えば経験が違いすぎる
なら読めよって話だけどさ
コメント2件

282
デフォルトの名無しさん (ワッチョイ 1341-qcXh)[]   投稿日:2017/02/04 20:41:51  ID:URlnQv8F0.n(2)
場合によってはハンガリアン記法にすべきものもあるかもしれないけど
全ての変数に対してやるのはどうなんでしょ?
コメント2件

283
デフォルトの名無しさん (ワッチョイ 1302-1ST5)[sage]   投稿日:2017/02/04 21:08:08  ID:DV7gEIN40.n(4)
クラスの先頭にCを付けるのだけは全くの無駄だからやめて

284
デフォルトの名無しさん (ワッチョイ a37b-jpzQ)[]   投稿日:2017/02/04 21:13:17  ID:XS0fIkHD0.n(6)
>282
それでもulとか環境によってサイズが変わる名前付けるのイミフだけどな

285
デフォルトの名無しさん (ワッチョイ c35b-0MWP)[sage]   投稿日:2017/02/04 21:14:27  ID:UEIbCXwH0.n(6)
>281
いや多分、そのソース見たらそんなんばっかだから大体分かると思うぞ。

一応説明しておくと、
m_: method_ の略。(member_かも?)
頭に付けたらインテリセンスでソートされて便利とか言っていた奴もどこかのスレにいたはず。
(メソッドなのかフィールドなのか一目瞭然ということらしい。既に出ているが頭のCもそういう理由)
他でもルール的に「頭に」何か付けるのはよくある話。
MSのVC++のローカル拡張なら __int64 とか、頭に __(二重アンダースコア) がついている。
googleだとprivateは頭に _ だったかな?
(なおgoogleはメソッドは動詞、フィールドは名詞を使えとか言っていたはず)
サフィックスはユーザーが勝手に使い、プリフィックスはシステム側でルールとして使う。

ulはそのまま unsigned long の略。Cなら元の型は数種しかないから想像はつくだろ。
DataCntはDataCountの略。短くする時には母音(aiueo)を抜く。(子音だけでも何となく分かるから)

そんなに経験の差って程の物でもないと思うが。
もっとも俺は無駄に頭に付けたり略したりしないので、このルールなら嫌いだが。
コメント4件

286
デフォルトの名無しさん (ワッチョイ a37b-jpzQ)[]   投稿日:2017/02/04 21:24:54  ID:XS0fIkHD0.n(6)
補足
* グローバルスコープでアンダースコアで始まる
* アンダースコアで始まって大文字が続く
* 二重アンダースコアを含む
に合致する名前は規格で処理系によって予約されてるからコンパイラとそれに付属する標準ライブラリーを実装する人以外は使っちゃダメ

287
デフォルトの名無しさん (ワッチョイ 7f3c-ZDta)[sage]   投稿日:2017/02/04 21:42:33  ID:pJMir97a0.n(4)
>285
> m_: method_ の略。
そんなわけないだろ...

288
デフォルトの名無しさん (ワッチョイ ffc0-Sup+)[sage]   投稿日:2017/02/05 00:12:45  ID:NucUcCyo0.n(2)
グーグルはメンバ変数の最後に_
クソ過ぎわろた
コメント6件

289
デフォルトの名無しさん (ワッチョイ 7fc1-AkR4)[sage]   投稿日:2017/02/05 00:14:15  ID:nBEZPMY50.n(4)
>288
結構あるくね?
インスタンスに付けるてのもよく見る
コメント2件

290
デフォルトの名無しさん (ワッチョイ 3342-fOGj)[sage]   投稿日:2017/02/05 00:41:54  ID:mLcywPgQ0.n(4)
>288
え、なんで?
this->でもいいけど

291
デフォルトの名無しさん (ワッチョイ cf6b-aC2u)[sage]   投稿日:2017/02/05 00:56:14  ID:6qCMRDqV0.n(6)
アンダーバーを変数に付けるのは慣れないと気持ち悪く見えるな
今は慣れたけどなんでついてるかなんて考えたことがない

292
デフォルトの名無しさん (ワッチョイ 7f3c-ZDta)[sage]   投稿日:2017/02/05 00:58:41  ID:PGIZ+KFZ0.n(2)
>289
そこそこある
>288 が井の中なだけ

293
デフォルトの名無しさん (ワッチョイ cf6b-aC2u)[sage]   投稿日:2017/02/05 00:59:09  ID:6qCMRDqV0.n(6)
途中で投稿しちゃった
考えたことないなんて人も居るんじゃないの?と...俺が考えなさすぎてるだけか...

>285
二重アンダーバーもよく見かけるけどなんでわざわざ二重つけてんだよ!!!っていつも思う

母音抜くルールわかりやすかった
変に短いやつ見付けたら母音考えたら良いんだね
コメント4件

294
デフォルトの名無しさん (スップ Sd9f-oUAv)[]   投稿日:2017/02/05 00:59:12  ID:rJZpHJC7d.n(4)
m_xxxでもxxx_でもメンバである保証全くないからthis->派

295
デフォルトの名無しさん (ワッチョイ 7f7b-1ST5)[sage]   投稿日:2017/02/05 01:01:31  ID:WpCJ+nTl0.n(4)
メンバ変数は ぱっと見わかるように、
vector<string> _vstr;
前ハイフンつけてます
コメント2件

296
デフォルトの名無しさん (ワッチョイ 3342-fOGj)[sage]   投稿日:2017/02/05 01:03:44  ID:mLcywPgQ0.n(4)
前ハイフンはシステム予約とバッティングしやすいから後ハイフン派

297
デフォルトの名無しさん (ワッチョイ cf6b-aC2u)[sage]   投稿日:2017/02/05 01:04:30  ID:6qCMRDqV0.n(6)
>295
こんなルールのみだったらわかりやすいのに

298
デフォルトの名無しさん (スップ Sd9f-oUAv)[]   投稿日:2017/02/05 01:07:18  ID:rJZpHJC7d.n(4)
変数はいいけどメンバ関数はどうすんの?
m_とか後ろ_とかつけるの?

299
デフォルトの名無しさん (ワッチョイ c35b-0MWP)[sage]   投稿日:2017/02/05 01:27:23  ID:lu7sp4/h0.n(2)
>293
> 母音抜くルールわかりやすかった
まあここでも使われてるんだけどね。
kwskとか、ggrksとか。

300
デフォルトの名無しさん (ワッチョイ 1302-1ST5)[sage]   投稿日:2017/02/05 01:29:06  ID:Yy4bNkpa0.n(2)
バッティングしやすいと言われて避けてたけどかれこれ一回もしたことないから止めたわ

301
デフォルトの名無しさん (ワッチョイ 7fc1-AkR4)[sage]   投稿日:2017/02/05 01:41:58  ID:nBEZPMY50.n(4)
確率論かよ
プロのやることじゃないだろ
コメント2件

302
デフォルトの名無しさん (ワッチョイ a37b-jpzQ)[]   投稿日:2017/02/05 02:18:19  ID:cECtpBb50.n(4)
避けてきたというのにバッティングしたこと無いから止めるって論理がちょっとおかしい。
お前サーバー管理者だけど今まで何も障害発生してないから要らないわ、解雇ね。
みたいな。

303
デフォルトの名無しさん (ワッチョイ b31e-1yep)[sage]   投稿日:2017/02/05 03:03:49  ID:uDzXyp1X0.n(2)
using std;してるのに変数名にcount使ってるのはたまに見かける
そういう人は
int printf = 0;
とか書いてあっても気にならないんだろうか

304
デフォルトの名無しさん (ワッチョイ 7f7b-1ST5)[sage]   投稿日:2017/02/05 04:04:57  ID:WpCJ+nTl0.n(4)
いずれにしろわかると思うが

305
デフォルトの名無しさん (ワッチョイ a3a6-0MWP)[sage]   投稿日:2017/02/05 08:20:30  ID:sLo1ryYQ0.n(2)
>301
2chにプロが来ると思うのはおかしいでしょ

306
デフォルトの名無しさん (ワッチョイ cf42-qddC)[sage]   投稿日:2017/02/05 21:23:37  ID:QXihksJQ0.n(2)
規格上、メンバ変数の先頭にアンダーバーつけてもシステム変数とバッティングしたりしないよ。
defineとか色々やってるとバッティングするのかもしれんけど、誰か例示してくれ

307
デフォルトの名無しさん (ワッチョイ cf24-1aN8)[]   投稿日:2017/02/05 21:50:38  ID:93yXMd2W0.n(4)
マクロはスコープに従わない
これこそが諸悪の根源
コメント2件

308
デフォルトの名無しさん (ワッチョイ a37b-0yxR)[]   投稿日:2017/02/05 21:53:28  ID:cECtpBb50.n(4)
先頭アンダースコアに大文字が続くとローカルスコープでも×

309
デフォルトの名無しさん (ワッチョイ cf24-1aN8)[]   投稿日:2017/02/05 22:00:58  ID:93yXMd2W0.n(4)
operator "" がアンダースコアで始まらない
std::chronoの識別子までハネるコンパイラを
どう修正すべきか開発陣は詰んでるよね

310
デフォルトの名無しさん (ワッチョイ 13c9-dUno)[sage]   投稿日:2017/02/05 22:11:51  ID:JZIpCKM70.n(2)
cstddef無しでもdecltype(sizeof(int))が使えるぐらいだから別につんでない
コメント2件

311
デフォルトの名無しさん (ワッチョイ cf6b-aC2u)[sage]   投稿日:2017/02/06 01:33:36  ID:EE2HabAa0.n(6)
初歩的な質問なんだけど
列挙体の列挙タグとかないやつってどういうときに使うの?
列挙タグないとどうしようもなくね?ってなってるんだけど
コメント2件

312
デフォルトの名無しさん (ワッチョイ a37b-0yxR)[]   投稿日:2017/02/06 02:14:43  ID:cswrm9tC0.n(2)
>311
単に定数値として使われてるだけだとともう
コメント2件

313
デフォルトの名無しさん (ワッチョイ cf6b-aC2u)[sage]   投稿日:2017/02/06 02:22:16  ID:EE2HabAa0.n(6)
>312
受けとる側を同じ型にしなくていいんかな?
基本的にint型らしいからint型で受けるものなの?

314
デフォルトの名無しさん (ワッチョイ d3dc-0e9Z)[sage]   投稿日:2017/02/06 05:48:15  ID:GvVdGH4O0.n(2)
enum {
 buf_size = 100;
 answer = 42;
};

みたいな感じで使うenumの話だよね。
大雑把に言って「数値リテラルと同じ場面で使える名前のついた整数」。
配列定義の要素数に使えるし、キャストなしに任意の整数型に入れられる。
コメント2件

315
デフォルトの名無しさん (ワッチョイ cf6b-aC2u)[sage]   投稿日:2017/02/06 09:45:50  ID:EE2HabAa0.n(6)
>314
まさにそれだ!!!
要素数か!!!そこ見落としてた

任意のやつに入れられるとしても
本来なら型は合わせるべきでってルールに反しててみたいな葛藤が繰り広げられてる
コメント4件

316
デフォルトの名無しさん (ワッチョイ 7fcf-1ST5)[sage]   投稿日:2017/02/06 10:46:33  ID:eKJHyJFq0.n(2)
>315
Cならintの定数として使えばいいけど、C++ならテンプレートと組み合わせたときとかに型の違いが
出てきちゃうから、整数として使うならconstexpr intにしといたほうがいいよ。葛藤するぐらいならなおのこと。

317
デフォルトの名無しさん (ワッチョイ a319-gmgt)[sage]   投稿日:2017/02/06 16:13:16  ID:1+9LFiOi0.n(4)
f(x,a)をx.f(a)と書くみたいな新しいC++の機能になる予定のがあったと思ったんですけど
この機能が何て言う名前か忘れたので教えてください。

318
デフォルトの名無しさん (ワッチョイ 7f3c-mNa5)[sage]   投稿日:2017/02/06 17:15:37  ID:CRCNRbS80.n(2)
統一関数呼び出しだったかな。
提案されてるだけで取り入れられるかどうかはまだ決まってない気がする。
C言語の既存APIに対応できないとかで揉めてるんじゃないっけ?

319
デフォルトの名無しさん (ワッチョイ a319-gmgt)[sage]   投稿日:2017/02/06 17:49:23  ID:1+9LFiOi0.n(4)
ありがとうございました。
それが使いたいので気になってました。

320
デフォルトの名無しさん (ワッチョイ cf24-1aN8)[]   投稿日:2017/02/06 19:36:58  ID:8E+Xd5G50.n(2)
>310
それoperator ""と関係あるの?

321
デフォルトの名無しさん (ワントンキン MM1f-0yxR)[]   投稿日:2017/02/06 20:41:46  ID:XckUYI7fM.n(4)
operator ""って何?

322
デフォルトの名無しさん (スプッッ Sd9f-PPsr)[]   投稿日:2017/02/06 20:42:45  ID:vzOme6YXd.n(2)
ユーザ定義リテラル
コメント2件

323
デフォルトの名無しさん (エムゾネ FF9f-aC2u)[sage]   投稿日:2017/02/06 20:49:53  ID:wweedNqsF.n(2)
パイプラインでデータ送るってのはexeからexeってイメージで良いのかな?
コメント2件

324
デフォルトの名無しさん (ワントンキン MM1f-0yxR)[]   投稿日:2017/02/06 20:52:29  ID:XckUYI7fM.n(4)
>322
定義するときそんなの使うんだ。全く使わないし使いたいと思ったことがないからマジで知らんかった。

325
デフォルトの名無しさん (ワッチョイ c35b-0MWP)[sage]   投稿日:2017/02/06 21:05:15  ID:R4XPB48C0.n(2)
>315
それ多分defineの代わり。
改善点は>307くらいか?俺はあまり文法には詳しくないから分からんが。

てかお前、マジで上司に聞いた方がいいぞ。
そういうところ改善しろって話じゃないと思うのだが。

326
デフォルトの名無しさん (ドコグロ MMff-C4Pq)[sage]   投稿日:2017/02/06 21:14:58  ID:VJg+IRhiM.n(2)
>323
パイプラインの定義による
普通はプロセス〜プロセスだけど自分で定義した関数に渡せる PowerShell みたいな奴もいるから
コメント4件

327
デフォルトの名無しさん (ワンミングク MM1f-PSyA)[sage]   投稿日:2017/02/07 20:42:19  ID:cTLgA1N6M.n(2)
>293
古アラム語の記法で2000年以上の歴史があるよ

328
デフォルトの名無しさん (ワッチョイ cf24-1aN8)[]   投稿日:2017/02/07 20:54:19  ID:A56tKajQ0.n(2)
>326
pipeline burst SRAMってのがあったな

329
デフォルトの名無しさん (スプッッ Sd9f-aC2u)[sage]   投稿日:2017/02/07 22:51:12  ID:LBkPe/Vnd.n(2)
>326
関数to関数ってdllと何がちがうんや

330
デフォルトの名無しさん (ワッチョイ cf7b-gPBI)[sage]   投稿日:2017/02/08 01:04:48  ID:6rskJv7R0.n(2)
Linuxのコマンドでも、同一プロセス内のコマンドと、別プロセスを起動するコマンドの、2種類ある

10万行のシェルスクリプトの実行時間でも、大きな差がある。
for 9分
while 5秒
awk・perl 0.1秒

331
デフォルトの名無しさん (ワッチョイ 365b-a31+)[sage]   投稿日:2017/02/09 11:43:50  ID:18LIUJ/70.n(2)
STLはどの程度使いこなせるのが一般的と思いますか?

書籍、簡単でいいのがなくて困ってます。
C++難しすぎ。
コメント4件

332
デフォルトの名無しさん (スップ Sd72-Q8BR)[]   投稿日:2017/02/09 11:44:59  ID:ABH38W/Id.n(4)
↓STLというものは存在しない

333
デフォルトの名無しさん (ワッチョイ 9302-ENO3)[sage]   投稿日:2017/02/09 12:39:20  ID:mjUCD5MK0.n(6)
>331
毎日cpprefjp眺めとけばそのうち結構覚えてる

334
デフォルトの名無しさん (ワッチョイ b330-t3CD)[sage]   投稿日:2017/02/09 13:03:54  ID:Wn84KVBK0.n(2)
一般的なんてぼんやりした領域のことを聞かれても困るわ
まC++をC++として使うつもりならコンテナ単体とコンテナとアルゴリズムの組み合わせくらいは
なんとなくでも使えるようになっていて欲しいな

335
デフォルトの名無しさん (ワッチョイ 83dc-w/2a)[sage]   投稿日:2017/02/09 13:09:01  ID:4sYnDBFk0.n(2)
入門書を何冊も試すより『プログラミング言語C++』第4版を手に入れて
先頭からのんびり読み進めながら、後半の標準ライブラリの部分も拾い読み、
という方が費用対効果は大きいかも。1万円近くするお高い本だけど。

336
デフォルトの名無しさん (ワッチョイ 32cc-LNBT)[sage]   投稿日:2017/02/09 13:22:05  ID:erARudvS0.n(2)
バカは一気に覚えようとするから
そんなん受験くらいやろ
実践は身につけんと意味ない

337
デフォルトの名無しさん (アウアウカー Sa1f-a31+)[sage]   投稿日:2017/02/09 13:31:32  ID:DP2Fqfwxa.n(2)
必要になったとき調べながら使ってれば自然と覚える

338
デフォルトの名無しさん (ササクッテロレ Spf7-7zST)[sage]   投稿日:2017/02/09 14:05:14  ID:Ra4XvV1bp.n(4)
STL覚えるのに金払うのは勿体無い気がする
cpprefjpをざっと眺めてどんなものがあるか何となくレベルで把握→実際に使ってみる ってのを繰り返すべし

339
デフォルトの名無しさん (ワッチョイ e2d4-cGUq)[sage]   投稿日:2017/02/09 15:54:11  ID:Ccc/L2ZJ0.n(6)
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) {}
}

って括ると大丈夫になります。
これは何が起きているのでしょうか。

340
デフォルトの名無しさん (ワッチョイ e2d4-cGUq)[sage]   投稿日:2017/02/09 16:42:39  ID:Ccc/L2ZJ0.n(6)
補足
extern "C" なし時にエラーが出るは void show の行です。

C++では引数は別スコープ?

341
デフォルトの名無しさん (ワッチョイ fe6c-lXju)[sage]   投稿日:2017/02/09 17:01:06  ID:ljwNeD6M0.n(2)
それだけだとエラー再現しないから
なんか他でやってるんじゃないの?

342
デフォルトの名無しさん (スップ Sd72-Q8BR)[]   投稿日:2017/02/09 17:13:47  ID:ABH38W/Id.n(4)
test関数が.cにあるとか

343
デフォルトの名無しさん (ワッチョイ e2d4-cGUq)[sage]   投稿日:2017/02/09 21:17:24  ID:Ccc/L2ZJ0.n(6)
あ、.cpp じゃなくて .c  です。
これが大きいんですか?
コメント2件

344
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK4f-4eBQ)[sage]   投稿日:2017/02/09 21:21:30  ID:2NLO6FImK.n(2)
>343
.cで定義した関数をC++で使うにはextern "C"で宣言しないといけない。
コメント2件

345
デフォルトの名無しさん (アウアウカー Sa1f-a31+)[sage]   投稿日:2017/02/09 21:39:45  ID:H/sFxM1Na.n(2)
>331です。皆さんありがとうございます。

http://www5c.biglobe.ne.jp/~ecb/cpp/cpp00.html
でSTLを勉強中ですが投げ出しそうです。
独習C++は理解できましたが
プログラミング言語 C++は厳しいです。
vector for_each random_shuffle sort
の動作を確認中です。
random_shuffleが毎回同じ値を返すのですが
どうやったら毎回異なる結果を返せますか?
コメント4件

346
デフォルトの名無しさん (ワントンキン MM62-xxX2)[sage]   投稿日:2017/02/09 21:47:39  ID:0i4innvNM.n(2)
>345
3番目の引数に数字入れろ
random_shuffleじゃなくてshuffle使え
HackerRankのSTLのコーナーでやれ
以上

347
デフォルトの名無しさん (ワッチョイ 9302-ENO3)[sage]   投稿日:2017/02/09 23:08:25  ID:mjUCD5MK0.n(6)
>345
random_shuffleは非推奨になったから別のを使え
for_eachは特別な理由が無ければ範囲forを使え

348
デフォルトの名無しさん (ワッチョイ 2731-CIv3)[sage]   投稿日:2017/02/09 23:17:44  ID:Tzm2iYcD0.n(4)
C++11とかC++14とかC++17とかあるけど、C++はまだ開発途上なの?

349
デフォルトの名無しさん (ササクッテロレ Spf7-eUd9)[sage]   投稿日:2017/02/09 23:23:36  ID:lbPmSuZmp.n(2)
はい

350
デフォルトの名無しさん (ササクッテロレ Spf7-7zST)[sage]   投稿日:2017/02/09 23:28:37  ID:Ra4XvV1bp.n(4)
進化なきソフトウエアに未来はないのだ

351
デフォルトの名無しさん (ワッチョイ 9302-ENO3)[sage]   投稿日:2017/02/09 23:50:09  ID:mjUCD5MK0.n(6)
更新が止まるのは需要が無くなったときだ

352
デフォルトの名無しさん (ワッチョイ 2731-CIv3)[sage]   投稿日:2017/02/09 23:55:51  ID:Tzm2iYcD0.n(4)
ちょっと開発工程表出してくれる?
瑕疵期間は完成版リリース後1年ね。
もちろん予算は増やせないよ。

353
デフォルトの名無しさん (ワッチョイ e7a6-cGUq)[sage]   投稿日:2017/02/10 00:02:15  ID:X8zCTp9W0.n(2)
クライアントはよりどりみどりだから

354
デフォルトの名無しさん (ワッチョイ 92c1-7zST)[sage]   投稿日:2017/02/10 00:04:38  ID:DjvLDgGn0.n(4)
唐突に始まる基地外顧客ごっこやめて

355
デフォルトの名無しさん (ワッチョイ b37b-a31+)[sage]   投稿日:2017/02/10 00:06:53  ID:Rg0hWeb00.n(4)
型変換難しすぎます
すぐコンパイラ先生に怒られます

356
デフォルトの名無しさん (ワッチョイ 92c1-7zST)[sage]   投稿日:2017/02/10 00:08:58  ID:DjvLDgGn0.n(4)
すぐ怒ってくれるコンパイラ先生に感謝感激雨あられですね

357
デフォルトの名無しさん (アウアウカー Sa1f-Twc8)[sage]   投稿日:2017/02/10 00:10:01  ID:ynOefsL0a.n(2)
サクラダファミリア

358
デフォルトの名無しさん (ワッチョイ b37b-a31+)[sage]   投稿日:2017/02/10 00:16:30  ID:Rg0hWeb00.n(4)
普通の型からマイクロソフト定義の専用のきついわ
あんなん初めから使うなよマイクロソフトさん

359
デフォルトの名無しさん (ワッチョイ 9302-ENO3)[sage]   投稿日:2017/02/10 00:19:08  ID:Yd/z+i5f0.n(2)
そのうちどれが何をdefineしたものかは大体察しが付いてくる

360
デフォルトの名無しさん (ワッチョイ e2d4-cGUq)[sage]   投稿日:2017/02/10 16:18:59  ID:ovuuNq0I0.n(2)
>344

==ここから==
typedef int macaddress_t[6];

void show(macaddress_t m) {}

int test() {
  macaddress_t m;
  show(m);
}
==ここまで==

ひとつのソースファイルなのですが、
全体を extern "C" で括るらともかく、なんでvoid show〜の行だけ括らないといけないのか、そこが理解できないんです
コメント6件

361
デフォルトの名無しさん (ワッチョイ 7642-CIv3)[sage]   投稿日:2017/02/10 18:37:08  ID:bnzKLGGx0.n(2)
NDKでC++
でwregex使おうとしたら
コンパイルできないし。
wchar_tが4なんだな。
codecvtもないし

まだ早すぎたのか。
コメント4件

362
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK4f-4eBQ)[sage]   投稿日:2017/02/10 18:43:05  ID:HPN+NYiaK.n(2)
>361
NDKでBoost使えるか試してみてや。
コメント2件

363
デフォルトの名無しさん (ワッチョイ 277b-VpYz)[]   投稿日:2017/02/10 20:32:59  ID:MRcACxyw0.n(2)
>361
wchar_tはWindows以外だいたい4だぞ

364
デフォルトの名無しさん (スッップ Sd52-jZLg)[sage]   投稿日:2017/02/10 20:59:06  ID:kKjy5FQnd.n(2)
>360
試してみたいからどっかにソリューション一式アップしてみ?

365
デフォルトの名無しさん (ワッチョイ 7b0e-zOJM)[sage]   投稿日:2017/02/10 21:53:45  ID:m9Xytejo0.n(2)
2だと合成文字どころかcodepointすら1つでは表現出来ない、半端仕様
それならもういっそutf-8でいいじゃないか

366
デフォルトの名無しさん (ドコグロ MM8a-zlRv)[sage]   投稿日:2017/02/10 22:01:34  ID:YdIN6n2bM.n(2)
>360
釣果はどうだい?

367
デフォルトの名無しさん (ワッチョイ 7b51-cGUq)[sage]   投稿日:2017/02/10 22:09:36  ID:WMmjWeX+0.n(2)
文字を「文字列の先頭」みたいな形でしか表せないのは用途によっては面倒くさい。

368
デフォルトの名無しさん (ワッチョイ 93c9-3u4T)[sage]   投稿日:2017/02/11 00:41:43  ID:yp4PwuMD0.n(2)
そうだな
だから367はもうUnicode使わないようにしないと

369
デフォルトの名無しさん (ワッチョイ 367b-ZOaM)[]   投稿日:2017/02/11 13:11:50  ID:I0QTm/K50.n(2)
>360
ひとつの.cppの中?それならextern "C"は必要ないよ
.cと.cppをリンクするときは.cで定義した関数は.cpp側でextern "C"しなけりゃいけない
キーワード:マングリング

370
360 (ワッチョイ 7642-CIv3)[sage]   投稿日:2017/02/11 18:00:41  ID:mOx2IQFJ0.n(2)
>362
Boostビルドの前に
Android Studioでinclude pathの設定が
わからなくて
お手上げ状態。

371
デフォルトの名無しさん (ワッチョイ 9302-ENO3)[sage]   投稿日:2017/02/11 19:33:50  ID:I2Nt/svY0.n(4)
C++の最大の難関は環境構築

372
デフォルトの名無しさん (アウアウオー Sa8a-S0So)[sage]   投稿日:2017/02/11 20:04:39  ID:2PZ2/Gs1a.n(4)
VCぇ。。。

373
デフォルトの名無しさん (スプッッ Sd72-a31+)[sage]   投稿日:2017/02/11 20:10:03  ID:7410wxb3d.n(2)
vcってなんなんですか

374
デフォルトの名無しさん (アウアウオー Sa8a-S0So)[sage]   投稿日:2017/02/11 20:24:54  ID:2PZ2/Gs1a.n(4)
VisualC++の略。
ダイアログアプリ以外は全然Visualじゃ無いけどね。
でもそんなの他のC++処理系も一緒。
(むしろダイアログアプリすら別に入れないと出来ない。そこがライブラリ選べる自由度の代償)
VB的にC++使えたC++Builderは死んだのだ。。。
他の環境入れる辺り、GUIは関係無いだろうけど、GUI以外にもライブラリがインストール時に全部入るので環境構築は一番楽。

あ、VCでも.netならVB的に使える。
文法が独特になって、C#使った方がマシだが。

375
デフォルトの名無しさん (ワッチョイ 9302-ENO3)[sage]   投稿日:2017/02/11 23:51:53  ID:I2Nt/svY0.n(4)
MSVCとQtって組み合わせられるの?

376
デフォルトの名無しさん (ササクッテロロ Spf7-eUd9)[sage]   投稿日:2017/02/12 03:21:26  ID:9ZkThf7dp.n(2)
組み合わせるの意味がよくわからんけどコンパイラにmsvcは使える

377
デフォルトの名無しさん (ワッチョイ b27b-ENO3)[sage]   投稿日:2017/02/12 15:27:47  ID:YlSn9Fu90.n(4)
vcっていう人とvc++っていう人がいる
コメント2件

378
361 (ワッチョイ 7642-CIv3)[sage]   投稿日:2017/02/12 18:15:47  ID:2aJLYPTP0.n(2)
build.gradleで

cmake {
cppFlags "-std=c++11 -frtti -fexceptions -I${project.buildDir}/../src/main/cpp/include"
}

としたらshared_ptrやらlexical_castは動いたわ。
Boostビルドやインテリセンスが動かない問題は解決できなかったけど

379
デフォルトの名無しさん (アウアウオー Sa8a-S0So)[sage]   投稿日:2017/02/12 18:35:37  ID:ElZAn973a.n(2)
>377
VC6の時代は入門書には大体VCって書いてた。
あの頃がVC全盛期。
コメント2件

380
デフォルトの名無しさん (ワッチョイ b27b-ENO3)[sage]   投稿日:2017/02/12 18:51:10  ID:YlSn9Fu90.n(4)
>379
実はVC6が仕事で使ったのが最後w
MSCもVer.6が良かったなぁみたいな。

381
デフォルトの名無しさん (スプッッ Sd72-a31+)[sage]   投稿日:2017/02/13 08:28:15  ID:w9FuiKwSd.n(2)
fopenと_sの違いを教えてクレメンス
コメント2件

382
デフォルトの名無しさん (アウアウオー Sa8a-S0So)[sage]   投稿日:2017/02/13 10:32:02  ID:dreuS3Zka.n(2)
_sはセキュリティのs
コメント2件

383
デフォルトの名無しさん (スプッッ Sd72-Q8BR)[]   投稿日:2017/02/13 13:50:40  ID:jR+QOQ4bd.n(4)
コンストラクタの関数トライブロックのイニシャライザで発生した例外をキャッチしても
そのままコンストラクタの外へ例外が飛び出るのですがそういうものですか?
コメント2件

384
デフォルトの名無しさん (ワッチョイ b27b-ENO3)[sage]   投稿日:2017/02/13 14:12:07  ID:CDuxjgvH0.n(2)
>381
そんなんがあんのかorz

385
デフォルトの名無しさん (ワッチョイ b330-t3CD)[sage]   投稿日:2017/02/13 14:22:10  ID:83glS84B0.n(2)
>383
そういうもの

386
デフォルトの名無しさん (スプッッ Sd72-Q8BR)[]   投稿日:2017/02/13 14:41:07  ID:jR+QOQ4bd.n(4)
そういうものですか

387
デフォルトの名無しさん (オッペケ Srf7-3u4T)[sage]   投稿日:2017/02/13 22:21:47  ID:0ypMjrgpr.n(2)
メンバーの初期化が失敗してる状態で続行されたら迷惑以外の何物でもない

388
デフォルトの名無しさん (ブーイモ MM52-mpSg)[sage]   投稿日:2017/02/13 22:30:08  ID:2WrcuwMzM.n(2)
catchブロックは必ずthrowで終わらないといけなくて、省略すると自動でrethrowするみたいね

389
デフォルトの名無しさん (ワッチョイ b37b-a31+)[sage]   投稿日:2017/02/13 22:32:22  ID:riwEWnOT0.n(2)
COM登録難しい
自動で作られる_p.cとか_i.cファイルってなんなんだ
IIDやCLSIDとか難しすぎる

390
デフォルトの名無しさん (ワッチョイ 129b-ilKL)[sage]   投稿日:2017/02/14 00:03:42  ID:IGsQOpXK0.n(2)
>382
secure

391
デフォルトの名無しさん (スップ Sd72-a31+)[sage]   投稿日:2017/02/14 09:38:53  ID:dFgeiJZpd.n(4)
idlをビルドしたときに作られる _p.c _i.c .h はコンパイラによって中身に差は出てくるけど
内容までは気にしなくて良いもの??

392
デフォルトの名無しさん (スップ Sd72-RX11)[]   投稿日:2017/02/14 11:14:58  ID:T4QzsHFxd.n(10)
void hoge
{
static string a;
}

void hage
{
thread_local string b;
}

int main()
{
hoge();
hage();
}
とした場合aとbのデストラクタが呼ばれる順番の規定はどうなってますか
コメント4件

393
デフォルトの名無しさん (スップ Sd72-a31+)[sage]   投稿日:2017/02/14 12:12:14  ID:dFgeiJZpd.n(4)
>392
cプラスはデストラクタは定義しないとないんじゃなかったっけ
プログラム終了時は呼ばれるのだろうか

394
デフォルトの名無しさん (ワッチョイ b330-t3CD)[sage]   投稿日:2017/02/14 12:20:58  ID:mNVQx7P30.n(2)
シングルスレッドなら構築の逆順

395
デフォルトの名無しさん (ワントンキン MM62-xxX2)[sage]   投稿日:2017/02/14 12:24:34  ID:cBGBFD/aM.n(2)
マルチスレッドでも同じだで

396
デフォルトの名無しさん (スップ Sd72-RX11)[]   投稿日:2017/02/14 12:26:56  ID:T4QzsHFxd.n(10)
gcc6.2でやってますが順番を変えてもaのデストラクタが先に呼ばれます

397
デフォルトの名無しさん (JP 0H4b-EsWW)[sage]   投稿日:2017/02/14 13:00:32  ID:he6YB8dMH.n(2)
そいつら main と関係ないとこで呼ばれてるべ
しかし記述順にかかわらず b が先じゃないとまずいんじゃないの

398
デフォルトの名無しさん (スップ Sd72-RX11)[]   投稿日:2017/02/14 13:15:37  ID:T4QzsHFxd.n(10)
ちゃんとmainのそれぞれの関数内で順番通りコンストラクタは呼ばれてます
デストラクタは逆順にならないです

399
デフォルトの名無しさん (ワッチョイ 93c9-3u4T)[sage]   投稿日:2017/02/14 13:39:07  ID:aNlWux3V0.n(6)
>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.』

400
デフォルトの名無しさん (スップ Sd72-RX11)[]   投稿日:2017/02/14 14:23:27  ID:T4QzsHFxd.n(10)
そのスレッド内のスレッド記憶期間を有する全ての初期化されたオブジェクトに対するデストラクタの完了は、静的記憶期間を有するオブジェクトのデストラクタの開始前に順序付けられる。


thread localはstaticの前に順序付けられる?

401
デフォルトの名無しさん (ワッチョイ 93c9-3u4T)[sage]   投稿日:2017/02/14 14:33:18  ID:aNlWux3V0.n(6)
thread_localのデストラクターの完了はstaticのデストラクター開始前となる
つまりthread_localのデストラクターが先

402
デフォルトの名無しさん (ワッチョイ df7b-3cRu)[sage]   投稿日:2017/02/14 14:43:39  ID:DbhRLpyW0.n(2)
英語読めねーザコにはC++は早い

403
デフォルトの名無しさん (スップ Sd72-RX11)[]   投稿日:2017/02/14 14:54:00  ID:T4QzsHFxd.n(10)
でもthread localのデストラクタが後に呼ばれているようです

404
デフォルトの名無しさん (ワッチョイ 367b-F1sY)[sage]   投稿日:2017/02/14 17:04:24  ID:NG72BBfs0.n(2)
clangだとどう?
Wandbox等でも試せる
コメント2件

405
デフォルトの名無しさん (スプッッ Sdc7-a31+)[sage]   投稿日:2017/02/14 18:47:20  ID:KObDNYqgd.n(4)
テストについて考えてるんだけど難しい
ソフトウェア開発難しくないか
一番ダメなのは俺が方向性を定めぬまま決めてしまっていることだろうが

406
デフォルトの名無しさん (ワッチョイ df98-3CwI)[sage]   投稿日:2017/02/14 20:35:30  ID:lntB2yLX0.n(2)
仕事でやってるなら
(まさか会社で物事を決める立場にある人がこんな質問しているとは思えないので)
先輩に聞くか、会社の方針に合わせるしかないよ
今までどのようにやってきているかを見て、同じようにやるしかない

趣味でやっていて、オープンソースか何か、チームの一員として参加しているのなら
やはりチームの方針に合わせるしかないよ
今までどのようにやってきているかを見て、同じようにやるしかない

趣味でやっていて、個人で何か作っているっていうんなら、テストはする必要ないよ
個人開発はいつでも時間が圧倒的に足りてないから、テストなんか真面目にやってたら
いつまでたってもソフトが完成しない
一般的にメインのコードよりもテストコードのほうが量が多い
1万行のコードに対して10万行のテストコード・・・とかなったらもうソフトが完成しない
いろいろいう人もいるだろうけど、ここは現実問題を見たほうが良い
・・・お金取るなら別だけど
コメント2件

407
デフォルトの名無しさん (ワッチョイ 93c9-3u4T)[sage]   投稿日:2017/02/14 20:38:17  ID:aNlWux3V0.n(6)
ふむふむ、つまり長文=低能

408
デフォルトの名無しさん (ワッチョイ e292-CIv3)[]   投稿日:2017/02/14 20:47:51  ID:kM+db1DC0.n(2)
>404
VC2017だと必ずthread_localが先にデストラクトされます
gcc5.4.0だとコンストラクタと逆順になります
clang3.8.1だとコンパイルできません

409
デフォルトの名無しさん (スプッッ Sdc7-a31+)[sage]   投稿日:2017/02/14 21:15:15  ID:KObDNYqgd.n(4)
>406
まさに大当たりなんだな
ソフトウェア開発こんな難しいとは思ってなかった
何が難しいって意見が違うところが多くて困る

結合テストどうすりゃええんやってマジ困ってるわ
単体やシステムはなんとなくわかるんだが

410
デフォルトの名無しさん (オッペケ Srf7-3u4T)[sage]   投稿日:2017/02/14 21:26:41  ID:5RYrxuibr.n(2)
VC2017って来月9日に出るやつか

411
デフォルトの名無しさん (JP 0Hf7-7zST)[sage]   投稿日:2017/02/14 21:43:47  ID:w8MjV4wUH.n(2)
大前提として、100%不具合が存在しないことを保証することは現実的には不可能
その前提の上で、如何に効率良く目的に合った不具合を検出して修正できるかがテストの肝

何か拠り所が欲しいならJSTQBの用語集でも読んでみたら良いんじゃね
コメント2件

412
デフォルトの名無しさん (ワッチョイ e7a6-cGUq)[sage]   投稿日:2017/02/14 22:01:03  ID:fgjpd/Zj0.n(2)
バグを見つけるためのテスト

413
デフォルトの名無しさん (JP 0H4b-EsWW)[sage]   投稿日:2017/02/15 00:15:28  ID:urFAvqLFH.n(2)
バグを追い出すためのテスト

隠れ家を重点的に叩く

414
デフォルトの名無しさん (ドコグロ MMa3-VkM2)[sage]   投稿日:2017/02/15 06:47:06  ID:zgJtAmDRM.n(2)
追い出されたバグは違うモジュールに...
デスマーチあるある

415
デフォルトの名無しさん (スプッッ Sd72-a31+)[sage]   投稿日:2017/02/15 07:31:50  ID:PfwOrtkrd.n(10)
>411
以下に効率よくってのポイントっぽいね
結合テストシステムテストの差がいつも怪しい
コメント2件

416
デフォルトの名無しさん (ワッチョイ d236-a31+)[sage]   投稿日:2017/02/15 07:41:57  ID:XaX5xvK80.n(2)
>415
システムテストはシステムレベルの仕様に基づいてテストすればいいんじゃないかな。その際、中身がどのようにモジュールに分割されてるかは意識しない。
結合テストでは、システムレベルの仕様では見えないモジュール同士のインターフェースを中心に行う。
コメント2件

417
デフォルトの名無しさん (スプッッ Sd72-a31+)[sage]   投稿日:2017/02/15 07:48:01  ID:PfwOrtkrd.n(10)
>416
dllを差し換える作業を今してるんだけどその結合テストとなると
diiを呼び出す口を呼び出したときにどうなるか
それだけ見ればよいってことで良いかな?

418
デフォルトの名無しさん (スプッッ Sd72-a31+)[sage]   投稿日:2017/02/15 10:29:03  ID:PfwOrtkrd.n(10)
strcpy_sってなんかMSDNの記載と挙動違うくない?
第三引数ぬるのときにエラーになる
コメント2件

419
デフォルトの名無しさん (ワッチョイ 9b22-lHUq)[sage]   投稿日:2017/02/15 11:05:06  ID:t9yAVOgj0.n(2)
strSourceがNULLだとEINVALを返すって書いてあるけど
コメント2件

420
デフォルトの名無しさん (スプッッ Sd72-a31+)[sage]   投稿日:2017/02/15 11:10:10  ID:PfwOrtkrd.n(10)
>419
リリースビルド実行してもそんなことなく落ちてしまう

421
デフォルトの名無しさん (ワッチョイ df7b-3cRu)[sage]   投稿日:2017/02/15 11:53:58  ID:LTs78uDW0.n(12)
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.
コメント2件

422
デフォルトの名無しさん (スプッッ Sd72-a31+)[sage]   投稿日:2017/02/15 12:06:28  ID:PfwOrtkrd.n(10)
>421
それ読んでるけど表ではコピー先には0で返り値でエラーコードが返ってくると記載がある
その文章の後半の実行の継続が〜って箇所がこれなんだと読んだんだが
コメント2件

423
デフォルトの名無しさん (ワッチョイ df7b-3cRu)[sage]   投稿日:2017/02/15 12:14:45  ID:LTs78uDW0.n(12)
パラメータバリデーションも読めばわかる
その中で実行継続が選択された場合はエラーコードが返る
コメント2件

424
デフォルトの名無しさん (ワッチョイ 0fd2-3yR0)[sage]   投稿日:2017/02/15 12:16:06  ID:tDlcUFQu0.n(4)
>422
記載内容を確認したいのでURL張って
コメント2件

425
デフォルトの名無しさん (ワッチョイ df7b-3cRu)[sage]   投稿日:2017/02/15 12:18:53  ID:LTs78uDW0.n(12)
ググればトップに出てくるページも探せない奴は参加しなくて良い

426
デフォルトの名無しさん (スップ Sd72-a31+)[sage]   投稿日:2017/02/15 12:25:15  ID:7fF4cQx4d.n(8)
>423
実行継続ってどうやってするんだ...
リリースビルドのやつだとそのまま落ちちゃうけどもそれとは違うの?

427
デフォルトの名無しさん (ワッチョイ df7b-3cRu)[sage]   投稿日:2017/02/15 12:29:16  ID:LTs78uDW0.n(12)
Invalid Parameter Handler Routineを差し替える

428
デフォルトの名無しさん (スップ Sd72-a31+)[sage]   投稿日:2017/02/15 12:34:47  ID:7fF4cQx4d.n(8)
なんか手のつけたことのないやつに深入りしそうだ
ぐぐりちゅう
これ普通にだと落ちるのが正常ってことなんかね...?

>424
https://msdn.microsoft.com/ja-jp/library/td1esda9.aspx

429
デフォルトの名無しさん (ワッチョイ df7b-3cRu)[sage]   投稿日:2017/02/15 12:35:51  ID:LTs78uDW0.n(12)
レジストリ弄ってワトソン出さない方法もあるらしいけどやった事ない
コメント2件

430
デフォルトの名無しさん (スップ Sd72-a31+)[sage]   投稿日:2017/02/15 12:45:49  ID:7fF4cQx4d.n(8)
>429
これって初期設定だと実行継続みたいなのをぽちっとしないといけない
それがデフォルトってことなんね
なんか思っていた動作と異なる
くそやろう...
コメント2件

431
デフォルトの名無しさん (スップ Sd72-a31+)[sage]   投稿日:2017/02/15 14:54:33  ID:7fF4cQx4d.n(8)
で....できない
http://srz-zumix.blogspot.jp/2012/08/strcpys.html?m=1
これ参考にしてるんだけどそのままコピペだとできない
助けてクレメンス
コメント2件

432
デフォルトの名無しさん (ワッチョイ df7b-Ry7I)[sage]   投稿日:2017/02/15 15:37:40  ID:LTs78uDW0.n(12)
#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);
}

433
デフォルトの名無しさん (オッペケ Srf7-3u4T)[sage]   投稿日:2017/02/15 18:51:08  ID:rJwzLFnhr.n(2)
>418
スレ違いは去れよ

434
デフォルトの名無しさん (ワッチョイ 0fd2-3yR0)[sage]   投稿日:2017/02/15 20:32:24  ID:tDlcUFQu0.n(4)
>431
何が起きてるのかわからないから助けようがない
ブレークポイント張って動作は追った?

435
デフォルトの名無しさん (ワッチョイ fb5f-YBZc)[sage]   投稿日:2017/02/17 16:55:38  ID:oBsnwbhT0.n(2)
>430
_s関数の設計思想がプログラマが想定してない状況で動作を継続しないだもの
NULLが来るのが想定内だってんならデバッグ用の_set_invalid_parameter_handler()なんか使わず最初からstrcpy_s()を呼ぶな

436
デフォルトの名無しさん (ワッチョイ 5f17-P9CU)[]   投稿日:2017/02/18 02:10:37  ID:BjwZuIbZ0.n(2)
Electronic Artsの標準ライブラリEASTL
https://github.com/electronicarts/EASTL

3.05.02 release
ようやくunordered_set, unordered_map が追加された。

437
デフォルトの名無しさん (オッペケ Sr9f-xmLK)[sage]   投稿日:2017/02/18 09:00:37  ID:GNecI7Ewr.n(4)
『Electronic Artsの標準ライブラリEASTL』
俺ライブラリのくせに「標準」付けるところが馬鹿っぽい
標準って日本語の意味も理解しない低能

438
デフォルトの名無しさん (ワッチョイ 0f7b-LjcY)[sage]   投稿日:2017/02/18 09:10:35  ID:IbdRLC160.n(2)
「標準ライブラリ実装」なら満足?

439
デフォルトの名無しさん (オッペケ Sr9f-xmLK)[sage]   投稿日:2017/02/18 11:10:10  ID:GNecI7Ewr.n(4)
Electronic Artsによる標準ライブラリの一部分の実装 EASTL

440
デフォルトの名無しさん (ワッチョイ 5fcc-UoBp)[sage]   投稿日:2017/02/18 14:17:54  ID:cCamoDUt0.n(2)
STLのSはStandardだからな
英語出来ない馬鹿なのか

441
デフォルトの名無しさん (アウアウカー Sa9f-LRhM)[sage]   投稿日:2017/02/18 17:51:18  ID:DE0SU//Ra.n(2)
Sugoi Tsuyoi Library

442
デフォルトの名無しさん (ワッチョイ 5b02-Z7AI)[sage]   投稿日:2017/02/18 18:20:17  ID:oLH7rESg0.n(2)
サブセットのなにがいけないのか

443
デフォルトの名無しさん (ワッチョイ fba6-eq+O)[sage]   投稿日:2017/02/18 19:49:22  ID:fWF8oK3d0.n(2)
処理系を作っているなら「STL実装」を名乗ってもいいの?

444
デフォルトの名無しさん (ワッチョイ 0f7b-qzUy)[]   投稿日:2017/02/18 20:29:26  ID:bU7vWvgF0.n(2)
「Electronic Artsの標準」って言ってるだけで何の問題もないと思うが?
Standardという言葉を必要以上に狭く解釈するほうがバカみたい

445
デフォルトの名無しさん (ワッチョイ 0f5b-6x/Q)[sage]   投稿日:2017/02/19 09:55:36  ID:2DCCXMeS0.n(6)
strstreamでwstringを使う方法はありますか?

446
デフォルトの名無しさん (ワッチョイ 8bc9-xmLK)[sage]   投稿日:2017/02/19 09:59:54  ID:sJkQ60Iy0.n(4)
はい。有ります

447
デフォルトの名無しさん (ワッチョイ 8bc9-xmLK)[sage]   投稿日:2017/02/19 10:17:39  ID:sJkQ60Iy0.n(4)
ちなみにこんな感じだろうたぶん
https://ideone.com/JpKEZ7

448
デフォルトの名無しさん (ワッチョイ 0f5b-6x/Q)[sage]   投稿日:2017/02/19 11:16:43  ID:2DCCXMeS0.n(6)
それは(w)stringstreamではないですか?
strstreamのヘッダもいらない気がします。

strstreamでwstringを利用したいのですが
独習C++のサンプルでもchar配列しか扱って
ません。

449
デフォルトの名無しさん (ワッチョイ 0f7b-LjcY)[sage]   投稿日:2017/02/19 11:50:16  ID:kiv7S6GK0.n(2)
strstreamってdeprecatedでは
コメント2件

450
デフォルトの名無しさん (ワッチョイ 0f5b-6x/Q)[sage]   投稿日:2017/02/19 12:02:45  ID:2DCCXMeS0.n(6)
>449
visual studioのヘルプ見たらそんな気がしました。
おとなしくwstringstream使っとくべきですかね。

451
デフォルトの名無しさん (ワッチョイ 6bdc-89sP)[sage]   投稿日:2017/02/19 21:37:05  ID:XrGtgUCH0.n(6)
Singletonでのthread終了時にjoinで固まる
http://suzukit14.hateblo.jp/entry/2015/06/24/111000

これとまったく同じ問題に突き当たりました。
最後に書かれているように、detach()で確かに無事終了できますが、
なんかマズかったりしますか?
コメント4件

452
デフォルトの名無しさん (オッペケ Sr9f-xmLK)[sage]   投稿日:2017/02/19 22:04:43  ID:s/Z6tyYFr.n(2)
良く読んでないけと
破棄されたm_endを参照してなんかうれしいの?

453
デフォルトの名無しさん (ワッチョイ eb9a-XQTV)[]   投稿日:2017/02/19 22:07:24  ID:qRKd/jmw0.n(4)
スレッドの終了を待たずにプロセスが終了しても問題ないならOK

454
デフォルトの名無しさん (ワッチョイ fb7b-Mjmn)[]   投稿日:2017/02/19 22:15:23  ID:Av0JmT9x0.n(4)
>451
そのインスタンスのメンバーを使用するコードがdetachしたスレッド内にある場合はデストラクタが呼ばれた後にそのメンバーを参照して未定義動作になる可能性がある
コメント2件

455
451 (ワッチョイ 6bdc-89sP)[sage]   投稿日:2017/02/19 22:22:05  ID:XrGtgUCH0.n(6)
皆さん、ご回答、ありがとうございます。

>454
まさにそれと思しきクラッシュが終了時にランダムで発生することに気付きました(汗)
detach()もjoin()もせずに終わろうとしたときに百発百中で出るのと同じ「R6010 -abort() has been called」というエラーです。

Sleep()でも呼んで十分に待てば、実用上は問題ないんでしょうけど、
こういう曖昧なコードは嫌いなので、なんとかキレイにスパッと終わりたいです・・・。

Singletonが適したクラスではあるのですが、
この問題をうまく裁けないようであれば、諦めて通常のクラスにすることを検討します。
コメント2件

456
デフォルトの名無しさん (ワッチョイ fb7b-Mjmn)[]   投稿日:2017/02/19 22:32:17  ID:Av0JmT9x0.n(4)
>455
コンパイラは?MSVC2015使っててそんな問題に当たったことないんだけど
どうしても回避できないなら(MSVC2012には無かったかもしれないけど)std::quick_exit使う事も検討してみたら?
コメント2件

457
デフォルトの名無しさん (ワッチョイ eb9a-XQTV)[]   投稿日:2017/02/19 22:45:35  ID:qRKd/jmw0.n(4)
俺なら、pthread なり直接使って
クリーンアップハンドラ登録する

458
451 (ワッチョイ 6bdc-89sP)[sage]   投稿日:2017/02/19 23:08:15  ID:XrGtgUCH0.n(6)
>456
Visual Studio Express 2013 for Windows Desktop Update5 です。

http://stackoverflow.com/questions/10915233/stdthreadjoin-hangs-if-cal...

ここを見てると、どうも2015では直ってそうですね。

quick_exitのこと教えてくださってありがとうございます。
知りませんでした。
でも、VS2015に移行するのが一番キレイに解決するので、そうします。

これまで、特にVS2015に移行する理由がなかったので2013のままでしたが、
おかげさまで理由ができました。
ありがとうございました。

459
451 (ワッチョイ 6bdc-89sP)[sage]   投稿日:2017/02/20 01:50:05  ID:1uwDjjWZ0.n(4)
ところで、>451のサイトのコードですが、
m_end変数の型がstd::atomic<bool>となっています。
わざわざatomicクラスを使わなくても、

m_end = true;

は通常のboolでもアトミック操作だからかまわないですよね?
何か意図があるのでしょうか?

460
デフォルトの名無しさん (ワッチョイ dfc0-fRM8)[sage]   投稿日:2017/02/20 02:43:42  ID:kFvPCPcM0.n(2)
コンパイラが省略するかもしれないから

461
デフォルトの名無しさん (ワッチョイ 5f17-P9CU)[sage]   投稿日:2017/02/20 03:08:55  ID:n+W7/EeT0.n(2)
volatile ではダメなん?
コメント2件

462
デフォルトの名無しさん (ワッチョイ fb7b-Mjmn)[]   投稿日:2017/02/20 04:17:03  ID:8FjaGYLq0.n(2)
>461
わざわざ保証されてないものを使用したあなら好きにしたらいいんじゃない?
タイミングが重要なものに使用したらすぐ破綻するけど。

463
デフォルトの名無しさん (ワッチョイ cbdc-92cl)[sage]   投稿日:2017/02/20 06:33:50  ID:8HBU9+MH0.n(2)
大きな整数だと読み書き操作のアトミック性が保証されないから
std::atomic を使わなきゃならん。
必要ないかも知れないけど、同じ書き方でboolでもlong longでも
正しく動くようにテンプレートを使った標準的な書式にしておく、
ってのがC++流と言えるのかな。

あと、std::atomic<bool>と書いてもboolを直に代入しても
実行時には同じ速度で動く(ようにatomicを実装する)から損はない、
というのもね。
コメント2件

464
451 (ワッチョイ 6bdc-89sP)[sage]   投稿日:2017/02/20 19:43:56  ID:1uwDjjWZ0.n(4)
ご回答、ありがとうございます。

>463
>大きな整数だと読み書き操作のアトミック性が保証されない
そうだったんですか!
それはatomicが要りますね。

>実行時には同じ速度で動く(ようにatomicを実装する)から損はない
オーバーヘッドがないのは素晴らしいですね。

気を付けます。
ありがとうございました。

465
デフォルトの名無しさん (ワッチョイ 0f2b-eq+O)[sage]   投稿日:2017/02/21 07:47:04  ID:t35fjyuz0.n(2)
>459
>何か意図があるのでしょうか?

サイト書いた人間死んでるの?
それとも生きてるの?

生きてるならなんでわざわざ赤の他人に他人の意図を聞くんだろうこの人
本人に直接聞けば一番早いんじゃないの
そいつの意図なんてのは書かない限りそいつしか知らないし分からないじゃん

466
デフォルトの名無しさん (ドコグロ MM7f-My/j)[sage]   投稿日:2017/02/21 08:17:30  ID:y0kzTLQNM.n(2)
終わった話になに頓珍漢な言いがかりつけてるんだよ w

467
デフォルトの名無しさん (ササクッテロラ Sp9f-Aztl)[sage]   投稿日:2017/02/21 09:41:12  ID:yRuALuONp.n(2)
お受験の季節だし、国語の時間が辛かったんだと思います
許してあげてください

468
デフォルトの名無しさん (ワッチョイ 6bdc-89sP)[sage]   投稿日:2017/02/22 19:13:31  ID:M+n+vM/b0.n(6)
以下のようなマルチスレッドプログラムを書いたのですが、もっとエレガントに書くことはできないでしょうか?
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();
 }
コメント2件

469
デフォルトの名無しさん (ササクッテロラ Sp9f-Aztl)[sage]   投稿日:2017/02/22 20:12:00  ID:OuXxGo6Bp.n(2)
それで必要十分だと思うよ
stdがついたり付いてなかったり、変数が大文字始まりだったり小文字始まりだったりするのが気持ち悪いけど

470
デフォルトの名無しさん (ワッチョイ fb34-wIi3)[]   投稿日:2017/02/22 20:31:27  ID:3B67WX1e0.n(4)
>468
強いて言うなら
str.swap(m_str);
かな。
コメント4件

471
デフォルトの名無しさん (ワントンキン MM7f-Mjmn)[]   投稿日:2017/02/22 20:40:10  ID:W153DobNM.n(2)
そんな動作が必要なプログラムを書いたことがないし、どんなケースで必用になるのか想像もつかないけど、その動作が正なのであるばそれでいいんじゃない?

m_ って付いてるってことはメンバー関数なんだろうけどデストラクタどうするんだろうとか、色々気になる所はあるけど。

472
デフォルトの名無しさん (ワッチョイ 5b02-Z7AI)[sage]   投稿日:2017/02/22 21:09:30  ID:TTVI91Rf0.n(2)
バックグラウンドで通信するならおおよそこんな感じになるんじゃないの
コメント2件

473
468 (ワッチョイ 6bdc-89sP)[sage]   投稿日:2017/02/22 21:38:29  ID:M+n+vM/b0.n(6)
>470
ご回答、ありがとうございます。

>472
その通りでございます。

>470
なるほど!
ということは、atomic<T>を使って

■メンバ変数

 std::atomic<std::string> m_str;

■生産者スレッド

 while( true ) m_str += "何らかの文字列";

■消費者スレッド

 std::string str;
 str.swap( m_str );


と、超エレガントにできそうですが、この場合、swap()でのアトミック性ってどうなるんでしょう??
コメント2件

474
デフォルトの名無しさん (ワッチョイ fb34-wIi3)[]   投稿日:2017/02/22 21:46:47  ID:3B67WX1e0.n(4)
>473
心配なら
m_str.swap(str);
でいいんじゃね?
コメント2件

475
468 (ワッチョイ 6bdc-89sP)[sage]   投稿日:2017/02/22 23:00:07  ID:M+n+vM/b0.n(6)
>474
あ、そうですね!
それならより安心ですね。
テストしてみて問題なかったら、それでいきます!
ありがとうございました。

476
デフォルトの名無しさん (ワッチョイ 8acc-CoTN)[sage]   投稿日:2017/02/23 00:46:03  ID:+OueSnEu0.n(2)
ハンガリアンキンモー

477
デフォルトの名無しさん (ワッチョイ de5b-moPN)[sage]   投稿日:2017/02/24 08:16:42  ID:DyzPRDD50.n(2)
見たことないのですがポインタ(の
入った変数)を参照することって可能
ですか?
int* &みたいなことです。
コメント4件

478
デフォルトの名無しさん (ブーイモ MMc7-Ccab)[sage]   投稿日:2017/02/24 09:58:19  ID:bBhQmgr7M.n(2)
>477
出来ます。テンプレートで使われるのが一番多いかな?
func(T& dst)に対してint*を渡すみたいなパターン

479
デフォルトの名無しさん (アウアウカー Saeb-uNyc)[sage]   投稿日:2017/02/24 10:28:09  ID:e/BP7pNwa.n(2)
それは初心者用質問スレで訊くのが合っていますよ

480
デフォルトの名無しさん (ワッチョイ 8a3c-/RgJ)[sage]   投稿日:2017/02/24 11:40:07  ID:9xRtAprE0.n(2)
auto&&とint&&は機能的に別物と考えていいのかな。
int&&は右辺値参照を実現する記法で、auto&&は参照の参照を実現するための仕組みという認識なんだけど。
コメント2件

481
デフォルトの名無しさん (ワッチョイ 8acc-CoTN)[sage]   投稿日:2017/02/24 12:43:18  ID:quEFnRbB0.n(2)
人に聞く前になぜ自分でやってみようとは思わないの?

482
デフォルトの名無しさん (スップ Sd4a-36q6)[]   投稿日:2017/02/24 13:15:08  ID:u1ntmSSgd.n(2)
試してもその環境では動くということしか確かめられないから

483
デフォルトの名無しさん (ワッチョイ 7fc9-2lVT)[sage]   投稿日:2017/02/24 22:09:09  ID:OddQnmIq0.n(2)
実現するのが目的ではないだろうけど
auto &&のauto部分がX &に解決されるのはどうも気持ち悪い

484
◆QZaw55cn4c (ワッチョイ 4613-8lb6)[sage]   投稿日:2017/02/24 22:22:18  ID:4ewDjGBZ0.n(2)
>477
できる,二重ポインタより分かりやすい

485
デフォルトの名無しさん (ワッチョイ 1f30-GZNV)[sage]   投稿日:2017/02/25 00:02:24  ID:5D288ePc0.n(2)
>480
テンプレートの型パラメータと普通の型の関係と同じようなもの
機能的に完全に別物というより一段上に追加機能のレイヤーがあるかないかの違い

486
デフォルトの名無しさん (ワッチョイ 8acc-CoTN)[sage]   投稿日:2017/02/25 00:13:15  ID:Bto43eGs0.n(2)
まあautoの部分はXにもX*にもX&にも解釈可能だからトーシローは錯覚する罠

487
デフォルトの名無しさん (ワッチョイ 8a3c-/RgJ)[sage]   投稿日:2017/02/25 12:29:14  ID:xXEZYycv0.n(2)
auto&&はreference collapsingっていう仕組みらしいけど江添氏はこの機能の解説してないんだよね。
だから右辺値参照の仕組みと透過性があるものなのだと思ってた。
右辺値参照の仕組みを理解すればおのずと理解できるもんだと思ってた。

488
デフォルトの名無しさん (ワッチョイ 63a6-8lb6)[sage]   投稿日:2017/02/25 13:33:16  ID:THbYlaQi0.n(2)

489
デフォルトの名無しさん (アウアウカー Saeb-uNyc)[sage]   投稿日:2017/02/25 18:59:53  ID:A0aZ5Z9Sa.n(2)
江添はそう言ってる?

490
デフォルトの名無しさん (ワッチョイ 7fc9-2lVT)[sage]   投稿日:2017/02/25 21:48:53  ID:r3+UW6Ch0.n(2)
江添の説明はこれだな
『テンプレート実引数推定のルールで型推定が行われる』
『できるだけ普通のプログラマーの常識に合わせるために、とても複雑になっている』
以上

491
デフォルトの名無しさん (ワッチョイ 0a7f-orIt)[sage]   投稿日:2017/02/27 14:18:25  ID:XaQXd7Ck0.n(8)
libc++ の挙動にバグっぽいものを見付けたんで cfe-dev に投げたんですが
http://lists.llvm.org/pipermail/cfe-dev/2017-February/052807.html
応答がありません…もっとふさわしい場所ってあるんですかね?

っていうか std::is_abstract が純粋仮想関数入りのクラステンプレートに対して
false 返すのって規格に照らしてどうなんでしょう?

492
デフォルトの名無しさん (オッペケ Sr23-2lVT)[sage]   投稿日:2017/02/27 18:50:50  ID:mrZfm/tmr.n(2)
テンプレートクラスならともかくクラステンプレートならコンパイルエラーにならないとおかしい
ちなみにただのバグにしか見えない

493
デフォルトの名無しさん (ワッチョイ 0a7f-orIt)[sage]   投稿日:2017/02/27 20:02:23  ID:XaQXd7Ck0.n(8)
なるほど、テンプレートクラスと言えばいいんですね。
適切な言葉をちゃんと知りませんでした。

494
デフォルトの名無しさん (ワッチョイ a37b-mxZJ)[]   投稿日:2017/02/27 20:55:00  ID:Of/Kbntx0.n(2)
https://bugs.llvm.org//
バグ報告はここじゃね?
コメント2件

495
デフォルトの名無しさん (ワッチョイ 7fc9-2lVT)[sage]   投稿日:2017/02/27 21:11:47  ID:4UiY0/x/0.n(2)
libc++ではなくてclangが腐ってるようにも見える
http://melpon.org/wandbox/permlink/GCDP7CU2HzUOMMML
コメント2件

496
デフォルトの名無しさん (ワッチョイ 0a7f-orIt)[sage]   投稿日:2017/02/27 21:22:12  ID:XaQXd7Ck0.n(8)
>494
New user self-registration is currently disabled
らしいのでどうせメールするならメーリスでいいか、
というのと規格的にどうなのかよくわからなかったので…

497
デフォルトの名無しさん (ワッチョイ 0a7f-orIt)[sage]   投稿日:2017/02/27 21:25:24  ID:XaQXd7Ck0.n(8)
>495
g++ で libc++ を使わせても同じ挙動だったのですが
どうなってるんでしょうね?

498
デフォルトの名無しさん (スプッッ Sd33-moPN)[sage]   投稿日:2017/02/28 09:18:02  ID:cUxO9p4sd.n(4)
long→short 警告でない
size_t→int 警告出る

警告出たり出なかったりの違いってなんなんだ?
上記二つとも出ると思っていたのだが

499
デフォルトの名無しさん (スップ Sd4a-36q6)[]   投稿日:2017/02/28 09:25:14  ID:+UqvplX+d.n(2)
unsignedでは
コメント2件

500
デフォルトの名無しさん (ワッチョイ 8acc-CoTN)[sage]   投稿日:2017/02/28 09:41:23  ID:Mx4bsJ8G0.n(4)
警告を出すか出さないかはコンパイラのオプションで自由に選べる

501
デフォルトの名無しさん (スプッッ Sd33-moPN)[sage]   投稿日:2017/02/28 11:50:09  ID:cUxO9p4sd.n(4)
>499
それだと思ったのだけどsize_tでも出ないところと出るところがある
なんなんだこれ
コメント2件

502
デフォルトの名無しさん (ワッチョイ 466c-fGBt)[sage]   投稿日:2017/02/28 13:37:18  ID:XuG6C30R0.n(4)
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
って警告されるんですけど何が問題でどう書くのが正解なんですかね?
コメント2件

503
デフォルトの名無しさん (ワッチョイ 8acc-CoTN)[sage]   投稿日:2017/02/28 13:40:56  ID:Mx4bsJ8G0.n(4)
>502
特化テンプレートを使う場合は型や値を明記しなけりゃならない
この場合はNの数値を明記しなけりゃいけない

504
デフォルトの名無しさん (ワッチョイ 466c-fGBt)[sage]   投稿日:2017/02/28 13:45:44  ID:XuG6C30R0.n(4)
ああなるほど・・・
Nが多いからテンプレートしてるのに手間ですな・・・

505
デフォルトの名無しさん (ワントンキン MMfa-cxDF)[sage]   投稿日:2017/02/28 14:36:02  ID:t3AtpORvM.n(2)
出先だから書いてないけどvaliadic templateと再帰で全部インスタンス化できそうだけど

506
デフォルトの名無しさん (ワッチョイ 1f30-GZNV)[sage]   投稿日:2017/02/28 18:49:47  ID:jvds/XNw0.n(2)
最初の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; }

507
デフォルトの名無しさん (オッペケ Sr23-2lVT)[sage]   投稿日:2017/03/01 12:26:23  ID:2EZ/mUsgr.n(2)
>501
もしかして定数の値が欠損していない場合では
constexpr size_t v1 = 32767;
int32_t v2 {v1}; //たぶん警告は出ない

508
デフォルトの名無しさん (ワッチョイ 1f90-BJNc)[sage]   投稿日:2017/03/02 19:18:35  ID:x/1yO3Ie0.n(2)
++演算子で延々とループできるリングバッファみたいなコンテナってあると便利だと思うんですが
STLに入っていないのはなんでですか?

509
デフォルトの名無しさん (ワッチョイ 6b02-2BvX)[sage]   投稿日:2017/03/02 19:23:17  ID:6rzvDmku0.n(4)
提案されていたけどまだ入ってない

510
デフォルトの名無しさん (ワッチョイ 6b02-2BvX)[sage]   投稿日:2017/03/02 20:02:04  ID:6rzvDmku0.n(4)
ごめん違う奴だった勘違いしてた

511
デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci)[sage]   投稿日:2017/03/03 00:07:16  ID:TsTyuoGu0.n(4)
class Fooに対して演算子(例えば「|=」)のオーバーロードを使って
 Foo& operator|=(const Foo& rhs) { (*thisとrhsの演算結果を*thisに入れる) ; return *this; }
とか定義する例を見る気がしますが、
こういうパターン(演算結果を返すと共に*thisの値が破壊される)なメソッドを演算子のオーバーロードでなく名前で実装するとしたら
get〜とすべき?それともset〜が普通?

512
デフォルトの名無しさん (ワッチョイ ef6c-HgeV)[sage]   投稿日:2017/03/03 00:10:55  ID:MwnP4WDg0.n(2)
普通setじゃない?
コメント2件

513
デフォルトの名無しさん (ワッチョイ 9fed-OGW1)[sage]   投稿日:2017/03/03 00:15:24  ID:/S0wuqbS0.n(2)
setの戻り値にsetされた値が返ってきても違和感ないけど、getで中身変わったらキレる
質問からはズレるけど、演算処理が入るならupdateとかその辺のどちらでもない名前にしとくのが良いと思うなあ
コメント4件

514
デフォルトの名無しさん (ワッチョイ 1fcc-+LoG)[sage]   投稿日:2017/03/03 01:57:52  ID:gLymaIrQ0.n(2)
無いものは自分で作ればいいのよ
パンがなければお菓子を食べればいいのよ
コメント2件

515
デフォルトの名無しさん (ワッチョイ eb7b-2BvX)[sage]   投稿日:2017/03/03 02:12:38  ID:ApTpm6Xd0.n(2)
先輩 お金がないならATMに行けばいいじゃないですかぁ

516
デフォルトの名無しさん (ワッチョイ 5fd4-CqFM)[sage]   投稿日:2017/03/03 05:32:35  ID:v1le7QT40.n(2)
その|=の演算を意味する名前だろ。
コメント2件

517
デフォルトの名無しさん (ワッチョイ 0f24-T7IB)[]   投稿日:2017/03/03 09:23:46  ID:EiwPmmlf0.n(4)
ビットORでsetというと「ビットを立てる」という意味か?
だとしたらビットANDでreset、ビットXORでflipか

518
デフォルトの名無しさん (ササクッテロル Spef-OGW1)[sage]   投稿日:2017/03/03 09:35:11  ID:CN7XccVQp.n(6)
ビット演算はただの例でしょ

519
デフォルトの名無しさん (ワッチョイ 0f24-T7IB)[]   投稿日:2017/03/03 09:53:32  ID:EiwPmmlf0.n(4)
副作用のある演算子なら+=や--もあるわけだが
それもひっくるめて一概にsetかgetかと問うのに例が|=なのか

520
デフォルトの名無しさん (ワッチョイ abd9-8nUV)[sage]   投稿日:2017/03/03 11:08:49  ID:mnS2IoUK0.n(2)
>513
カウンタとかオートインクリメントする奴があるだろ
もっとカルシウム取った方が良いぞ
コメント2件

521
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)[]   投稿日:2017/03/03 11:52:47  ID:8SEA7Mtt0.n(2)
カウンターのインクリメントにgetなんて名前付けないでしょ

522
デフォルトの名無しさん (スプッッ Sdef-cA0b)[]   投稿日:2017/03/03 11:56:49  ID:LaI4btVTd.n(4)
GetNextFrameなのに内部で動画のデコードが行われるミドルウェアがあった
コメント4件

523
デフォルトの名無しさん (ドコグロ MM2f-Y1yA)[sage]   投稿日:2017/03/03 12:46:37  ID:hxiWJWmXM.n(4)
>520
それカウンタのインクリメントがメインじゃないだろ
(メインの機能なら単なるバカ)
他にも取得したデータをキャッシュしとくとかでオブジェクトの状態を変える奴はある

>522
デコードしたフレームが取得できるとかじゃなくて?
コメント2件

524
デフォルトの名無しさん (ワッチョイ 1f7f-RJLO)[sage]   投稿日:2017/03/03 13:00:47  ID:qCQIHM4i0.n(2)
>522
PopNextFrameにしろって文句つけたら

525
デフォルトの名無しさん (スプッッ Sdef-cA0b)[]   投稿日:2017/03/03 13:15:03  ID:LaI4btVTd.n(4)
>523
フレーム番号を取得する機能とデコードの機能が一つになってる
コメント2件

526
デフォルトの名無しさん (ワッチョイ 1f7d-M3Ci)[]   投稿日:2017/03/03 13:33:04  ID:UcAC+2mM0.n(2)
>514
マリー・アントワネットのこの言葉は、事実ではなくて、
『マリー・アントワネット』を書いたシュテファン・ツバイクの創作
だという説もあるね

527
デフォルトの名無しさん (ワッチョイ cb3c-m4jB)[]   投稿日:2017/03/03 14:59:24  ID:BCfaURI80.n(2)
ロベールのC++入門講座持っている人に質問
p.537一番下のテンポラリオブジェクトの寿命と
p.543のテンポラリオブジェクトの寿命の違いがいまいちよくわからないんだけど
もう少し詳しく解説してくれませんか?

528
デフォルトの名無しさん (ドコグロ MM2f-Y1yA)[sage]   投稿日:2017/03/03 19:06:53  ID:hxiWJWmXM.n(4)
>525
そのまとめかたがいいかどうかは知らんけど名前は特に違和感ないけどな

529
511 (ワッチョイ 5b8b-M3Ci)[sage]   投稿日:2017/03/03 20:51:41  ID:TsTyuoGu0.n(4)
レス泥ス

>512
なるほど言われてみればそんな気がする

>513
確かに言われてみればそうかもしれない

>516
ごもっとも言われてみればその通りに思える

もとの「|=」は和集合を求める演算のつもりだったので
setUnionという名前にした、

530
デフォルトの名無しさん (ササクッテロル Spef-OGW1)[sage]   投稿日:2017/03/03 22:11:43  ID:CN7XccVQp.n(6)
ちなみにJavaでよく使われるByteStreamのgetシリーズは値を読み出しつつ参照位置を進めるメソッドになっている
個人的にはreadあたりに改名しろやと思わなくもないけど、getでしれっと中身が変わるのは稀によくある

つまりC++のconstメンバ関数は素晴らしい

531
デフォルトの名無しさん (ササクッテロル Spef-OGW1)[sage]   投稿日:2017/03/03 22:13:19  ID:CN7XccVQp.n(6)
ByteBufferだわ

532
デフォルトの名無しさん (ワッチョイ 5b30-EN75)[sage]   投稿日:2017/03/04 00:38:16  ID:gb3ZxOZZ0.n(2)
それは設計の視点・方向性の違い
コンテナ/ホルダーとみるならgetで状態が変わらない方が自然だけど
ジェネレータとみるならgetで値を返しつつ状態が変わる(次の値の用意をする)のも自然だ
コメント2件

533
デフォルトの名無しさん (ワッチョイ 0f24-T7IB)[]   投稿日:2017/03/04 08:01:38  ID:NPMNhlmj0.n(2)
読み取り動作と進行動作は本来別な話だが
I/Oを進行なしで読み取らせようとすると
キャッシュせにゃあかんのでそこは副作用となる
C++にはそのためにmutableがあるので問題にはならん

ただしポートを叩くのとアクセス管理は別な問題なので
1つのクラスに一緒くたに突っ込む設計に俺は反対

534
デフォルトの名無しさん (オッペケ Sref-n7ZK)[sage]   投稿日:2017/03/04 08:40:11  ID:sD1+OZIDr.n(2)
珍妙な持論だ
だがiostreamの>>やstdioのfreadやソケットのrecvも
読み取り命令と進行命令を別にすべきという考えなら一貫性はある

535
デフォルトの名無しさん (ワッチョイ 1f3c-Y1yA)[sage]   投稿日:2017/03/04 08:45:52  ID:IfQ9fk2A0.n(4)
>532
> コンテナ/ホルダーとみるならgetで状態が変わらない方が自然だけど
そう言うのは Peek でいいかと

536
デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci)[sage]   投稿日:2017/03/04 09:59:29  ID:JHoGQxOg0.n(2)
I/Oに近い低水準レイヤ────で読み取りと進行が不可分なケースは
物理法則からくる制約と処理効率の兼ね合いからそうしているはずで
読み取り+進行、という操作に業界固有の用語が存在はずだから
その用語を使えば良いんじゃないの

いったんメモリに乗ってしまったデータは使われ方が1種類で決まりきっているとかいった
特殊なケースを除き、取得と変更わ分けるのが正義
この領域において不必要なオブジェクトの変更を放置するのは
チューリングマシンの計算モデルで物事を初期化しないプログラマーレベル

537
デフォルトの名無しさん (ワッチョイ 1f3c-Y1yA)[sage]   投稿日:2017/03/04 10:39:59  ID:IfQ9fk2A0.n(4)
ちゅーりんぐましんしってるおれすげーくん w

538
デフォルトの名無しさん (ワッチョイ ab98-T7IB)[sage]   投稿日:2017/03/04 11:12:56  ID:+pEijc2g0.n(2)
読みにくい日本語から漂うアスペ感

539
デフォルトの名無しさん (ワッチョイ 3b0e-RhaL)[sage]   投稿日:2017/03/04 12:55:27  ID:r8uNi5/x0.n(2)
getc

540
デフォルトの名無しさん (ワッチョイ bb02-5QEK)[sage]   投稿日:2017/03/04 22:54:48  ID:zKraxpcF0.n(2)
デフォルトコンストラクタを持たないメンバーの初期化をしたいのだけど、
初期化が複雑だから初期化リストに含めたくない場合ってみんなどうしてるの?unique_ptrに変更する?
コメント6件

541
デフォルトの名無しさん (ワンミングク MM3f-QRNW)[sage]   投稿日:2017/03/05 00:17:33  ID:n48qZSY3M.n(2)
>540
builder patternを使う
コメント2件

542
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)[]   投稿日:2017/03/05 00:27:52  ID:qOQ2PN1U0.n(6)
>540
複雑ってのがよくわからんのだけど、例えばどんな?
単に引数を求める形に変換する必要があるとかならヘルパ関数作るだけ

543
デフォルトの名無しさん (ワッチョイ 9fc1-OGW1)[sage]   投稿日:2017/03/05 01:30:40  ID:gIuIuvFQ0.n(10)
>541
まぁこれ

544
デフォルトの名無しさん (ワッチョイ bb02-5QEK)[sage]   投稿日:2017/03/05 09:53:23  ID:Ur8kOvvv0.n(2)
説明不足でした。すみません。
class Car {
. Engine e; //<デフォルトコンストラクタをもたない
};
みたいなクラスでeを初期化するのに
. 適切なトルクの計算;
. 適切な燃費の計算;
. e = Engine(トルク, 燃費);
とかしないといけなかったら、
Car : e(トルク, 燃費) {}みたいに初期化するのは難しいよね?
みなはどうしてるの?
コメント4件

545
デフォルトの名無しさん (ワッチョイ 3b0e-RhaL)[sage]   投稿日:2017/03/05 10:36:02  ID:2RIrBifF0.n(2)
適切なトルクの計算や、適切な燃費の計算なんて処理はそのクラスのコンストラクタ以外じゃ使わないような特殊なものなの?
それはCarが計算すべきものなの?
別の関数でも用意して、Carのコンストラクタにエンジンの初期化情報を渡させるような作り方をするのが普通じゃね。

546
デフォルトの名無しさん (ワッチョイ 1fcc-+LoG)[sage]   投稿日:2017/03/05 10:38:36  ID:X9OstEVD0.n(2)
Engineクラスに別途Initialize()メソッドを持たせるだけ
無理にコンストラクタで全部やろうとする設計がバカっぽい
コメント2件

547
デフォルトの名無しさん (オッペケ Sref-n7ZK)[sage]   投稿日:2017/03/05 10:58:54  ID:w6jz+T9vr.n(4)
>544が説明不足なんじゃなくて
ビルダーパターンと言う言葉を覚えて
レスも良く読まずに単語レベルで反応したアホがいるだけ

548
デフォルトの名無しさん (ワッチョイ 9fc1-OGW1)[sage]   投稿日:2017/03/05 11:13:35  ID:gIuIuvFQ0.n(10)
Engineにコピーコンストラクタかムーブコンストラクタ作って、CarにEngineを受け取るコンストラクタを作る

Initializeメソッド付けるのは「オブジェクトを作ったら必ずInitializeを呼ぶ」ってルールを守らなきゃ使えないクラスになるから好み分かれると思う
コメント2件

549
デフォルトの名無しさん (オッペケ Sref-n7ZK)[sage]   投稿日:2017/03/05 11:45:46  ID:w6jz+T9vr.n(4)
デフォルトコンストラクターを作ることがはばかられる質問者は
ムーブコンストラクターを作ることができない可能性がある
という発想には至らなかったようだ
コメント2件

550
デフォルトの名無しさん (ワッチョイ 1f59-NqFr)[]   投稿日:2017/03/05 11:55:22  ID:69Hgyfek0.n(2)
ラムダ式でやろう
class Car{
t toruku{ 100 };
n nenpi{ 200 };
Engine e{ [](auto&& toruku, auto&& nenpi){ return { toruku * 2, nenpi * 3 }; }( this->toruku, this->nenpi ) };
};
コメント2件

551
デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci)[sage]   投稿日:2017/03/05 11:55:25  ID:uSZUgTTE0.n(10)
>546
その設計はEngineの宣言(Engiine e;)からe.Initialize()呼び出しまでの間を持たせるために、
Engineに無理矢理デフォルトコンストラクタを付ける設計変更を要す、

仮にInitialize()をeではなくファクトリメソッドとするなら
>540にてすでに
>unique_ptrに変更する?
としてすでに言及されているパターンと実質同じなのでは…

552
デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci)[sage]   投稿日:2017/03/05 11:58:09  ID:uSZUgTTE0.n(10)
>548
横だがおk

553
デフォルトの名無しさん (ワッチョイ 9fc1-OGW1)[sage]   投稿日:2017/03/05 12:18:26  ID:gIuIuvFQ0.n(10)
>549
デフォルトコンストラクタが作れないケースとムーブ(コピー)コンストラクタが作れないケースは全く違うと思うけど、どうしてそんな可能性があるって発想に至ったの?
コメント2件

554
デフォルトの名無しさん (ワンミングク MM3f-QRNW)[sage]   投稿日:2017/03/05 12:23:52  ID:h33ckUPTM.n(4)
俺はいつもコンストラクタは
デフォルトコンストラクタ(必要に応じて)
コピコン、ムブコン
メンバをすべて受け取るコンストラクタ
しか作らんけどなぁ

メンバを作るのが少しでもややこしければstaticなcreateみたいなの作ってそこでメンバ作る

555
デフォルトの名無しさん (ワンミングク MM3f-QRNW)[sage]   投稿日:2017/03/05 12:26:06  ID:h33ckUPTM.n(4)
あと、ポインタで持つのはポリモーフィズムを期待するときだけだわ
C++でnullにしておきたいからポインタにするってなんかへんじゃね?
使うとき毎回nullチェックするポリシーも一緒に維持しないといけなさそう

556
デフォルトの名無しさん (ワッチョイ 1f3c-Y1yA)[sage]   投稿日:2017/03/05 12:49:35  ID:f7+gl1ia0.n(4)
>553
違うから可能性がない
とでも言うのか?
そのクラスは触れないだろうな
って考えるのが普通だと思うが

557
デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci)[sage]   投稿日:2017/03/05 13:05:22  ID:uSZUgTTE0.n(10)
>544
>eを初期化するのに
>. 適切なトルクの計算;
>. 適切な燃費の計算;
>. e = Engine(トルク, 燃費);
>とかしないといけなかった
がデフォルトコンストラクタの追加が困難な理由を表してゐる、

次は>566がコピーコンストラクタやムーブコンストラクタの追加が困難な理由を説明する番なのでは…
コメント2件

558
デフォルトの名無しさん (ワッチョイ 9fc1-OGW1)[sage]   投稿日:2017/03/05 13:18:33  ID:gIuIuvFQ0.n(10)
どこの世界の普通だそれ…
Engineが仕事上触れないなら諦めてポインタで持つしか無いんじゃね
Carの初期化時点(コンストラクタ呼び出し時点)ではEngineは初期化するための情報が無いんだから、コンストラクタの中かInitialize関数かで後から初期化するしか無いでしょ
>550のラムダ式が使えればそれでも出来そうに見えるけど、initializer_listってこんな使い方できたっけ?

559
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)[]   投稿日:2017/03/05 13:39:08  ID:qOQ2PN1U0.n(6)
class Car{
static double 燃費計算();
static double トルク計算();
Engine e;
public:
Car():e(トルク計算(),燃費計算()){}
};

これだけの話じゃねえの?
コメント4件

560
デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci)[sage]   投稿日:2017/03/05 13:41:57  ID:uSZUgTTE0.n(10)
>559はCarクラスにエンジンの詳細(燃費計算()とかトルク計算())を含める設計に何の疑問も抱かないのか…
コメント2件

561
デフォルトの名無しさん (ササクッテロリ Spef-OGW1)[sage]   投稿日:2017/03/05 13:44:52  ID:rDGU9DZ0p.n(4)
>559
Engineクラスを触らない前提ならこれでいいな
コメント2件

562
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)[]   投稿日:2017/03/05 13:44:54  ID:qOQ2PN1U0.n(6)
>560
例えでしかないんだから細かいところにつっこみ入れてもしょうがないだろ?

563
デフォルトの名無しさん (ワッチョイ 5b8b-M3Ci)[sage]   投稿日:2017/03/05 13:47:42  ID:uSZUgTTE0.n(10)
Carクラスにstaticメソッドでエンジンの詳細を持たせる結果、
>561が指摘するようにCarクラスのエンジン換装を不可能にしておいて
「細かいところ」とのたまう神経の図太さは
そのうち大成するやつかもわからんね…

564
デフォルトの名無しさん (スププ Sd3f-OGW1)[]   投稿日:2017/03/05 14:06:10  ID:HN9/KcX+d.n(2)
CD-R

565
デフォルトの名無しさん (ワッチョイ 1f3c-Y1yA)[sage]   投稿日:2017/03/05 14:16:16  ID:f7+gl1ia0.n(4)
>557
頭大丈夫?
初期値が与えられていない状態にするって言うディフォルトコンストラクタなんていくらでもあるぞ
そんなのはディフォルトコンストラクタが作れない理由になんてなってない

566
デフォルトの名無しさん (ササクッテロリ Spef-OGW1)[sage]   投稿日:2017/03/05 14:25:52  ID:rDGU9DZ0p.n(4)
設計上の理由とか仕事の分担上の理由とか工数的な理由とか、その時々で選択される結果は違うから色んな案が出るのは良いと思うんだけどさ
全く案出さないでひたすら回答にケチ付けてるだけの奴は何なのよ
コメント2件

567
デフォルトの名無しさん (ワッチョイ ef1d-NqFr)[sage]   投稿日:2017/03/05 16:05:02  ID:35hcvBBa0.n(4)
このスレッドでいいのかどうかわからないのですが、
皆さんのお知恵を拝借させてください。

当方自作PCにてWindows10 Pro 64bit環境を使用しておりますが、
PCゲームでWorld of Warshipsというゲームをやっています。
ところが、先月半ばからCPUに過度の負荷がかかるようになり、
原因をいろいろと調べていたところ、起動中のCPUプロセスを詳細に調べることになり、
Process Explorerというソフトでゲーム起動中のプロセスを詳しく見てみたんですが、
動作中に「MSVCR110.dll」というファイルへのアクセスが集中し、同じプロセスが5つ以上、
それも1つにつきCPU占有率5%以上使う状態なんです。

正常稼働時↓
http://www.dotup.org/uploda/www.dotup.org1176183.jpg

以上稼働時↓
http://www.dotup.org/uploda/www.dotup.org1176184.jpg
http://www.dotup.org/uploda/www.dotup.org1176185.jpg

同じゲームをプレイしているWin7使用中の友人のPCには、
そもそもこの「MSVCR110.dll」というファイル自体が出てきませんでした。
これはOS標準搭載以外のMS製アプリが一つも入ってないからだと考えられ、
尚且つ、名前からしてVisual C++関連のファイルだと思われます。

なぜこれだけ負荷がかかるようになってしまうのか、
どなたかこの状況をご理解頂ける方いらっしゃるでしょうか?
ご意見をお伺いできれば幸いです。
よろしくお願いします。
コメント2件

568
デフォルトの名無しさん (ワッチョイ 9fc1-OGW1)[sage]   投稿日:2017/03/05 16:28:50  ID:gIuIuvFQ0.n(10)
C++ってキーワードでここに来たんだと思うけど、残念ながらスレ違い、ゲームの本スレとかで聞くのが良いんじゃないか
一応エスパーで回答するなら、セキュリティソフトに邪魔されて負荷上がってるってのが考えられるから、一旦セキュリティソフトを止めるなり例外設定するなりして試してみては
コメント2件

569
デフォルトの名無しさん (ワッチョイ ef1d-NqFr)[sage]   投稿日:2017/03/05 18:38:44  ID:35hcvBBa0.n(4)
>568

スンマセン、ゲーム本スレと質問スレで書き込んだら
「スレ違い。自作板のWindowsスレかC++スレ行け」と言われたとです(´・ω・`)
コメント2件

570
デフォルトの名無しさん (ワッチョイ ab7b-8nUV)[sage]   投稿日:2017/03/05 19:42:29  ID:hQyyoOdR0.n(2)
>569
ローカルルールくらい読みなさい
ここはプログラムを作る人のための板
プログラムを作る人になりたいのなら、まず本屋に行って入門書かって自習してから出直しなさい

571
デフォルトの名無しさん (ワッチョイ bb22-jbjN)[sage]   投稿日:2017/03/05 20:40:15  ID:N295BQKw0.n(2)
>567
visual c++を動かすためのランタイムだからそれ自体が原因ではないと思う

572
デフォルトの名無しさん (ワッチョイ 6bf2-Guy/)[]   投稿日:2017/03/05 21:59:02  ID:89WGHivw0.n(2)
署名んとこ見る限り自分ところでカスタマイズしたRuntimeDLL使ってるのか?
公式フォーラムで聞くか直接開発に問い合わせた方がいいんじゃね?普通に考えて

573
デフォルトの名無しさん (ワッチョイ dbc9-n7ZK)[sage]   投稿日:2017/03/05 22:58:25  ID:9n7ykkeL0.n(2)
>自分ところでカスタマイズしたRuntimeDLL

普通に考えるとACCSに通報ではないのか

574
デフォルトの名無しさん (ワッチョイ 1f7f-RJLO)[sage]   投稿日:2017/03/06 02:22:12  ID:sc7bChPJ0.n(4)
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0352r1.pdf
に "An implementation using Clang is being worked on." ってあるけど
どこにおいてあるのん?使いたくて震える

575
デフォルトの名無しさん (ワッチョイ 1f7f-RJLO)[sage]   投稿日:2017/03/06 02:42:26  ID:sc7bChPJ0.n(4)
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0352r0.pdf
の方に書いてあったのね……スミマセソ

576
デフォルトの名無しさん (スップ Sd3f-cA0b)[]   投稿日:2017/03/06 17:42:12  ID:/kAc8Ta7d.n(2)
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);
}
これでは駄目ですか?
コメント2件

577
デフォルトの名無しさん (ワッチョイ 5fd4-NqFr)[sage]   投稿日:2017/03/06 19:02:57  ID:qCc5lDaQ0.n(2)
どっちでもいいんじゃね

578
デフォルトの名無しさん (ブーイモ MMaf-5QEK)[sage]   投稿日:2017/03/06 20:41:36  ID:l2uOsbFVM.n(4)
仕様読んでないけど擬似乱数列じゃ毎回同じ値がかえるんじゃないの?

579
デフォルトの名無しさん (ブーイモ MMaf-5QEK)[sage]   投稿日:2017/03/06 20:43:46  ID:l2uOsbFVM.n(4)
おおっと、乱数生成器自体を渡してるのか。失礼しました

580
デフォルトの名無しさん (ワッチョイ 0f24-T7IB)[]   投稿日:2017/03/06 21:06:44  ID:DwMqYVii0.n(2)
あふぉ

581
デフォルトの名無しさん (ワッチョイ 5b30-EN75)[sage]   投稿日:2017/03/06 22:21:57  ID:CDqSwP280.n(2)
>576
distribution自体も値を返すごとに変化する内部状態を持ち
同じパラメータで構築されたものは同じ内部状態から始まるという規格の意味を考えると
一般論としては下の方はダメだろう

582
デフォルトの名無しさん (オッペケ Sref-n7ZK)[sage]   投稿日:2017/03/06 22:35:23  ID:AKQMS70er.n(2)
>同じパラメータで構築されたものは同じ内部状態から始まる

distributionがそんな仕様なら
むしろ後者の方が望ましくね?

583
デフォルトの名無しさん (ワッチョイ 8b7b-ERAc)[]   投稿日:2017/03/06 22:46:29  ID:k6KUwGnB0.n(2)
コンストラクタで渡した範囲を使わず引数に渡した範囲を使うオーバーロードもあるし、distributionに使わなかったランダムビット値とかの値を残してたら引数で毎回random_engine渡す意義が薄れてきちゃう気がするよね

584
デフォルトの名無しさん (ワッチョイ cb3c-m4jB)[]   投稿日:2017/03/07 15:47:09  ID:3Q65RUMW0.n(4)
typedef int* intPtr;
const intPtr hoge;
としたとき
const int* hogeではなくint* const hogeになるのがピンと来ません
コメント4件

585
デフォルトの名無しさん (ワントンキン MM3f-QRNW)[sage]   投稿日:2017/03/07 16:11:26  ID:q3Kp0vdwM.n(2)
>584
int*
int const*
は別の型だから

int*
int* const
は同じ型だけどconst性の違いがある
コメント4件

586
デフォルトの名無しさん (ワッチョイ 0f24-T7IB)[]   投稿日:2017/03/07 18:02:33  ID:O/JMqbZP0.n(2)
>584
そのconstはintPtrを修飾するだけで、
intPtrの内容は変更できないからだ

intPtrは「非constのintへのポインタ」となっていて
当たり前だがhogeは非constしか指せないポインタになる

おまえさんが付けたconstは*hogeではなくhoge自身を修飾するということだ

587
デフォルトの名無しさん (ワッチョイ cb3c-m4jB)[]   投稿日:2017/03/07 19:43:03  ID:3Q65RUMW0.n(4)
>585-586
マクロみたいにただキーワードを置き換えるんじゃなくて
あくまでも型の定義ってことか
なんとなくわかったようなわからないようなって感じだが
参考になったありがとう
コメント4件

588
デフォルトの名無しさん (ワッチョイ 6bf2-Guy/)[]   投稿日:2017/03/07 20:00:54  ID:JY4xO0gD0.n(2)
std::allocatorなんかでもconst_pointerの定義があるし、別途typedefしてくださいって感じなんだろうね

589
デフォルトの名無しさん (アウアウカー Sa6f-tCEH)[sage]   投稿日:2017/03/07 21:59:10  ID:GF7WqcJ3a.n(2)
>587
構文上の結合の優先順位を理解すれば、複雑な型宣言の意味も理解できるようになるよ。
コメント2件

590
デフォルトの名無しさん (オッペケ Sref-n7ZK)[sage]   投稿日:2017/03/08 00:23:57  ID:bj8U/UPWr.n(2)
typedefがただのキーワード置換でないことに気づいた>587に対して
>589は未だにただのキーワード置換と考えているように思えてならない

591
デフォルトの名無しさん (ワッチョイ 0f24-T7IB)[]   投稿日:2017/03/08 09:15:55  ID:DNe+Lf9O0.n(6)
確かにw

592
デフォルトの名無しさん (ブーイモ MMaf-x83U)[sage]   投稿日:2017/03/08 09:58:21  ID:pkIkDwj+M.n(4)
あれ、const int*とconst intPtrって同じにならなかったっけ?
コメント2件

593
デフォルトの名無しさん (ワッチョイ 0f24-T7IB)[]   投稿日:2017/03/08 10:24:26  ID:DNe+Lf9O0.n(6)
おまえもしかして intPtr a, b; が int* a, b; になるとでも思ってる?

594
デフォルトの名無しさん (ワッチョイ eb9b-x83U)[sage]   投稿日:2017/03/08 10:35:12  ID:qFksyWqq0.n(2)
それとはまた別の話じゃ?

595
デフォルトの名無しさん (ワッチョイ 1fcc-+LoG)[sage]   投稿日:2017/03/08 10:45:04  ID:EeDAfYl90.n(4)
>592
ポインタに対してのconstだからint const*
コメント2件

596
デフォルトの名無しさん (ブーイモ MMaf-x83U)[sage]   投稿日:2017/03/08 11:04:02  ID:pkIkDwj+M.n(4)
おっと勘違いして覚えてた
これは恥ずかしい、間違えて使ってたかも

でも間違えてたらコンパイルエラーが出そうなもんだけど
なんで今まで気がつかなかったんだろう…

597
デフォルトの名無しさん (ワッチョイ eb7b-2BvX)[sage]   投稿日:2017/03/08 11:14:36  ID:VyuA3yza0.n(4)
なわけで
int* a, b; じゃなくて int *a,b; だよなぁ
とここ30年w

598
デフォルトの名無しさん (ササクッテロロ Spef-prdN)[sage]   投稿日:2017/03/08 13:43:48  ID:SntjmOAop.n(2)
constは後ろに付けるのが本来なんだよ。
自信が無いなら先頭につけるのをやめれば間違わない。

>595
int *const
じゃねーの?
コメント4件

599
デフォルトの名無しさん (ワッチョイ 0f24-T7IB)[]   投稿日:2017/03/08 14:57:04  ID:DNe+Lf9O0.n(6)
あのなあ。。。
ずっこけた状態からもっとずっこけるのは苦痛を伴うんだぞ

600
デフォルトの名無しさん (ブーイモ MMaf-R7fB)[sage]   投稿日:2017/03/08 17:54:01  ID:xABa9dNGM.n(2)
int const * constでおk

601
デフォルトの名無しさん (ワッチョイ eb7b-2BvX)[sage]   投稿日:2017/03/08 18:00:06  ID:VyuA3yza0.n(4)
* の前につけるか後につけるかですな

602
◆QZaw55cn4c (ワッチョイ ab85-GPt5)[sage]   投稿日:2017/03/08 18:08:42  ID:/EX97NIO0.n(2)
int * const p
int const *p
int const * const p
のどれかは使うが
const int *p
はやらない、これっていったい上の三つのうちのどれになるの?なんでそうなるの?
コメント6件

603
デフォルトの名無しさん (ドコグロ MM2f-gAk7)[sage]   投稿日:2017/03/08 18:22:24  ID:dlE+7VUyM.n(2)

604
デフォルトの名無しさん (ブーイモ MMaf-5QEK)[sage]   投稿日:2017/03/08 18:43:43  ID:zA3nyedyM.n(2)
>603
これは分かり易いw

605
デフォルトの名無しさん (ワッチョイ 3b0e-RhaL)[sage]   投稿日:2017/03/08 18:44:03  ID:vi7wbAYy0.n(2)
>602
3番目は使わんな
参照先変えないならもう参照でいいじゃない

606
デフォルトの名無しさん (ワッチョイ 1fcc-+LoG)[sage]   投稿日:2017/03/08 21:11:05  ID:EeDAfYl90.n(4)
>598
うむ、少し間違えた

607
デフォルトの名無しさん (ワッチョイ 1fa9-sdpt)[sage]   投稿日:2017/03/08 21:28:15  ID:LYwYML6D0.n(2)
>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)

608
デフォルトの名無しさん (ワッチョイ af3c-csvI)[sage]   投稿日:2017/03/09 08:16:39  ID:P4eVvEWq0.n(2)
「cv修飾は左を修飾し、一番左に書いたときだけ例外的に右を修飾する」
という認識で10年以上問題なかった、仕様書でどうなってるかは知らんけど

609
デフォルトの名無しさん (オッペケ Sr57-Yz8R)[sage]   投稿日:2017/03/09 08:46:08  ID:nspN5S3gr.n(2)
そんなはずもなし
unsigned volatile const inline int static long *f();

610
デフォルトの名無しさん (ワッチョイ 2353-pXJL)[sage]   投稿日:2017/03/10 02:51:41  ID:DVnkldFi0.n(2)
>602
>const int *p
>はやらない、これっていったい上の三つのうちのどれになるの?なんでそうなるの?

マジか const char * なんて毎日数え切れないほど使ってるわ

611
デフォルトの名無しさん (ワッチョイ cff2-j8zu)[]   投稿日:2017/03/10 08:56:27  ID:B+GguKA+0.n(2)
const v(^・^)v const

612
デフォルトの名無しさん (ササクッテロル Sp57-f3f6)[sage]   投稿日:2017/03/10 17:04:19  ID:Pyfb9YNwp.n(2)
久々にC弄ったから何となく覗いてみたらconstの話しかしてなくて草

613
デフォルトの名無しさん (ワッチョイ 362b-2hGO)[sage]   投稿日:2017/03/10 18:09:34  ID:wy5WfeUq0.n(2)
const仙人のお出ましだぞ
彼がconstの全てを知ってるらしい

614
デフォルトの名無しさん (オッペケ Sr57-Yz8R)[sage]   投稿日:2017/03/10 18:35:53  ID:9izzFXDGr.n(8)
>585
>同じ型だけどconst性の違いがある

どこでそんなデタラメを覚えた?
コメント2件

615
デフォルトの名無しさん (ワッチョイ 72cc-hLcU)[sage]   投稿日:2017/03/10 18:47:49  ID:OJfHMNpa0.n(2)
君達、物事はコンスタントに解決することが重要だよ?わかてる?

616
デフォルトの名無しさん (オッペケ Sr57-Yz8R)[sage]   投稿日:2017/03/10 19:03:11  ID:9izzFXDGr.n(8)
>598
>constは後ろに付けるのが本来なんだよ

ソースは?
コメント2件

617
デフォルトの名無しさん (ワッチョイ f27f-uSLp)[sage]   投稿日:2017/03/10 19:23:12  ID:ZjsFj1+i0.n(2)
>614
後者では型が修飾されているんじゃなくて変数が const 修飾されている
ということを言いたかったんじゃない?実際

int * a;
int * const b = hoge();
a = b;

はちゃんと通るし。
まあたしかに「同じ型」だと言っていいのかはよくわかんないけど。
コメント4件

618
デフォルトの名無しさん (ドコグロ MMca-TLcY)[sage]   投稿日:2017/03/10 20:18:18  ID:HUvVedpnM.n(2)
>603のClockwise/Spiral Ruleに異論のある人、居る?
コメント4件

619
デフォルトの名無しさん (ブーイモ MM2b-4Oo7)[sage]   投稿日:2017/03/10 20:38:11  ID:K2NxcqGZM.n(2)
>618
1つ目の回答のほうが2つ目の回答(スパイラル)より12倍投票数が多いぞ

620
デフォルトの名無しさん (オッペケ Sr57-Yz8R)[sage]   投稿日:2017/03/10 20:56:02  ID:9izzFXDGr.n(8)
>617
>型が修飾されているんじゃなくて変数が const 修飾されている

などという空想がどこから湧いてきたのか疑問なのだが
http://ideone.com/dWfpAT
コメント4件

621
デフォルトの名無しさん (オッペケ Sr57-Yz8R)[sage]   投稿日:2017/03/10 20:59:13  ID:9izzFXDGr.n(8)
>618
まず「clockwise」と言うあたりでオツムが論理的思考に弱いことは明らか

622
デフォルトの名無しさん (ワッチョイ 72c9-qJ3d)[sage]   投稿日:2017/03/10 21:00:42  ID:6ypCkPMo0.n(2)
>617の理屈だと、
char c;
int i;

これらは同じ型で変数が修飾されてるだけだよ。
実際、

int i;
char c = 3;
i = c;

はちゃんと通るし。
などとも言える。
コメント2件

623
デフォルトの名無しさん (ワッチョイ 723c-ezmg)[sage]   投稿日:2017/03/10 22:22:44  ID:PT1UnLZa0.n(2)
>620
int const *p
int * const p
の違いもわからんアホは ROM っとけ

624
デフォルトの名無しさん (ワッチョイ 52c0-/Xhi)[sage]   投稿日:2017/03/11 00:12:59  ID:XUJAp/M10.n(2)
ROMはconst

625
デフォルトの名無しさん (ワッチョイ 138b-ldtI)[sage]   投稿日:2017/03/11 06:32:47  ID:JvHBeRgs0.n(2)
ちょっおまwwwwwwww
C++のBNFにtype-qualifierというのはあっても
variable-qualifierとかobject-qualifierとかは無いはず…
>622のは単に変数のdeclaration
(文脈によっては変数の定義にもなる

626
デフォルトの名無しさん (ワッチョイ d2d1-qBYI)[sage]   投稿日:2017/03/11 06:50:46  ID:2/ZkR35y0.n(2)
ちょっおま
って久しぶりに聞いたわ

627
デフォルトの名無しさん (ワッチョイ 7f4a-/Xhi)[sage]   投稿日:2017/03/11 09:06:46  ID:h5T3JHpB0.n(2)
>616
二度漬け禁止

628
デフォルトの名無しさん (ワッチョイ f64a-JiRs)[sage]   投稿日:2017/03/12 07:41:49  ID:nkYFQTVc0.n(6)
Visual studio express 2013において、if文以外(変数にデータを代入するとき)に==と書いた時にエラーを返すようにしたいのですが、出来ますか?
(a == 1;と書いた時にコンパイルするとエラーを返すようにするといった感じです)
if文の判定式をコピーした結果、この==を1つにし忘れたため、しばらく困ったのと
現状において、整数への代入で==を使うことが無いので、エラーを出すようにしたいのです
コメント2件

629
デフォルトの名無しさん (ワッチョイ f64a-JiRs)[sage]   投稿日:2017/03/12 08:58:04  ID:nkYFQTVc0.n(6)
すみません、スレ違いでした

630
デフォルトの名無しさん (ワッチョイ 723c-4mgA)[sage]   投稿日:2017/03/12 09:50:45  ID:6iMHIBm50.n(2)
>628
プロジェクトのプロパティ
>構成プロパティ >C/C++ >詳細設定
特定の警告をエラーとして扱う に 4553 を設定すればいい
(もしくは、コンパイルオプションの /we"4553" を指定)

そうすると
warning C4553: '==': 演算子にプログラム上の作用がありません。'=' を意図しましたか?
のエラーになる。
コメント2件

631
デフォルトの名無しさん (ワッチョイ 138b-ldtI)[sage]   投稿日:2017/03/12 12:13:57  ID:OaInj5Km0.n(2)
「警告レベル」を「Level4 (/W4)」、「警告をエラーとして扱う」を「はい (/WX)」にしたらもっと広範にやってくれてスゲー便利

632
デフォルトの名無しさん (ワッチョイ f64a-JiRs)[sage]   投稿日:2017/03/12 17:42:24  ID:nkYFQTVc0.n(6)
>630,631
本当に有難う御座いました!!
c++に明るくなく、これに気づかなかったせいで丸三日潰れて困り果てていたのですが、c++系の専門用語が分からないのと
「c++ ==」といったワードで検索しても記号系のワードが省かれるからか、ヒットせずとても困っていました

633
デフォルトの名無しさん (スプッッ Sdb2-K8Mp)[sage]   投稿日:2017/03/13 07:13:56  ID:Butu4pJYd.n(2)
MultiByteToWideCharの1つ目の引数のコード表と二つ目の引数のフラグセットの意味を教えてくれませんか
コード表の意味はなんとなくわかるんだけどそれが使用してたコード表についてなのか、それとも変換先なのかがわからない...
コメント6件

634
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd92-SsNB)[sage]   投稿日:2017/03/13 13:07:11  ID:VNPYsRzKd.n(2)
>633
WindowsのUnicodeには、UTF-16が使われている。コードページは、UTF-16以外のマルチバイト文字列の符号化の種類を表している。第2引数についてはUnicodeの基本を勉強してから用語を確認せよ(英語のMSDNページを参照)。
コメント2件

635
デフォルトの名無しさん (ワッチョイ f3c9-Yz8R)[sage]   投稿日:2017/03/13 16:29:57  ID:Kr7xjXLG0.n(4)
Unicode 9.0のCore Specification D63ではprecomposedとcompositeが同義と読めるがMSDNは異なる使い方をしているな
combining(結合)と間違えたように思える
これでは>633は理解不能

636
デフォルトの名無しさん (ワッチョイ f3c9-Yz8R)[sage]   投稿日:2017/03/13 21:12:59  ID:Kr7xjXLG0.n(4)
>633
WindowsのMultiByteToWideCharは「何らかの文字コード」をwchar_t(UTF-16)文字列に変換するもの
変換元の文字コードが何であるかを指定するのが第一引数
例えば932(シフトJIS)、65001(UTF-8)
変換の動作を指定するのが第二引数
例えばMB_ERR_INVALID_CHARSは少しでも不正なバイトシーケンスがあれば全体をエラーとする

637
デフォルトの名無しさん (ワッチョイ f27f-6H1t)[sage]   投稿日:2017/03/15 02:37:25  ID:8rrA/zgU0.n(2)
>620
ってどういう意図のレスだったの?理解がまったくできないんだけど

638
デフォルトの名無しさん (スプッッ Sdb2-K8Mp)[sage]   投稿日:2017/03/15 17:59:26  ID:wfaQCMr9d.n(2)
>634-636
たすかりもうした
おかげでコード上手くかけたので助かりました

639
デフォルトの名無しさん (ワッチョイ 133c-v8EU)[]   投稿日:2017/03/16 18:08:57  ID:KOsUwnSu0.n(4)
テンプレートの特殊化を勉強しているんだけど
https://ideone.com/Z7enCI
これがなんでエラーになるのか教えてください
コメント2件

640
デフォルトの名無しさん (ワッチョイ ef6c-i8cA)[sage]   投稿日:2017/03/16 18:18:50  ID:ZMIdRLMQ0.n(2)
>639
intのHogeのFoo関数のtemplate<>が余計
Hoge<int>が特殊化されていることはクラス側でわかっているため
コメント2件

641
デフォルトの名無しさん (ワッチョイ 133c-v8EU)[]   投稿日:2017/03/16 19:00:18  ID:KOsUwnSu0.n(4)
>640
なるほど、サンクス

642
デフォルトの名無しさん (ワッチョイ 133c-v8EU)[sage]   投稿日:2017/03/17 09:32:55  ID:OqtFMBfF0.n(4)
関数のアドレスを取得するときに
クラスのメンバじゃない普通の関数は&をつける必要がないのに
メンバ関数は&をつけないといけなくなる理由を教えて
コメント4件

643
デフォルトの名無しさん (ワッチョイ 5319-v8EU)[sage]   投稿日:2017/03/17 09:40:10  ID:Wd4E8hAa0.n(4)
ideoneで書いてると急に初期化されて初めの状態のコードに戻ってしまうのですが
わたくしだけでしょうか?

644
デフォルトの名無しさん (スップ Sddf-8YZg)[sage]   投稿日:2017/03/17 11:36:52  ID:c9xwv7oqd.n(2)
>642
言ってる意味がよくわからん

645
デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)[]   投稿日:2017/03/17 13:16:36  ID:AO+9LJwo0.n(2)
>642
ドライに言うと、規格でそう決まっているから

なんでそう決まっているかというと、
メンバポインタ(関数に限らない)取得は特殊な行為で、
インスタンス内のメンバの絶対アドレスを取得するが一般的な行為*1なので、
特殊な行為は明示的*2に書こうということになっている

struct asshole
{
void sonofabitch(int) { }
void dipshit()
{
auto jerk = sonofabitch;
}
};
↑は現実にはコンパイルエラーだが、もし通すとしたら
おまえ的にはjerkには何が入るべきだと思う?
ちなみに俺はbind(&asshole::sonofabitch, this, _1)に見えちまう

*1 俺じゃなく禿がそう思っている
*2 アドレス演算子とスコープ演算子が必須
コメント6件

646
デフォルトの名無しさん (ワッチョイ bf27-tpgq)[sage]   投稿日:2017/03/17 13:48:45  ID:l8NCqXAU0.n(2)
どこをどうひねるとそういう煌びやかな単語が出てくるのかが謎
コメント2件

647
デフォルトの名無しさん (ワッチョイ 5319-v8EU)[sage]   投稿日:2017/03/17 16:09:10  ID:Wd4E8hAa0.n(4)
ダブルヂスパッチってwikipediaだと2つのオブジェによってヂスパッチ
する意味ってかいてあるけれどwikipedia以外のホムペには2回ヂスパッチすること
って書いてあるばあいもありますね。

648
デフォルトの名無しさん (ドコグロ MMb7-3fK7)[sage]   投稿日:2017/03/17 18:32:57  ID:dpI1G6OFM.n(2)
>645
日本語がまともに書けるようになってからレスしなよ
コメント4件

649
デフォルトの名無しさん (ワッチョイ bfda-8FG5)[]   投稿日:2017/03/17 19:46:28  ID:sgxnbWig0.n(2)
>648
おまえは批判がまともに書けるようになるまでROMってろ

650
片山博文MZ ◆T6xkBnTXz7B0 (スププ Sddf-W8JT)[sage]   投稿日:2017/03/17 19:54:05  ID:+s8GChIVd.n(2)
批判

651
デフォルトの名無しさん (ワッチョイ bf3c-5NuA)[sage]   投稿日:2017/03/17 19:59:12  ID:KNcySIzq0.n(2)
>648
俺は普通に理解できたんだが、逆になにが悪いのか教えて欲しい。

652
デフォルトの名無しさん (ブーイモ MM37-nFTW)[sage]   投稿日:2017/03/17 21:49:19  ID:YstDK/amM.n(2)
メンバー関数のアドレス取得も絶対アドレスだと思うんだけど

653
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/17 22:10:36  ID:Kkd83n1s0.n(2)
>646
○○がマイブームな年頃

うんち:3さい
カンチョー:6さい
サノバビッチ:14歳←英語使ってる俺カッコイイ

とかじゃね?


ところで脱線するが、>645でbindがC++にあることを初めて知ったのだが、
thisをバインド出来ているがこれって意味あるのか?
JavaScriptみたいな動的ダックタイピングなら継承関係なくbind出来るので意味があるのだが、
C++なら継承してないとbind出来ないよな?
だったら最初からインスタンスのポインタを管理して普通にメンバ呼んだ方が楽だと思うが。
(継承してないとbind出来ないのなら管理対象のポインタが
関数ポインタになるかインスタンスになるかだけ。
実質的なプログラミングコストは変わらない)
コメント4件

654
デフォルトの名無しさん (ワッチョイ 133c-v8EU)[]   投稿日:2017/03/17 22:24:44  ID:OqtFMBfF0.n(4)
>645
ごめん、bind関数の理解があいまいなんだが
要するにインスタンス先のsonofabitchメンバ関数になるように見えるって言いたいんだよね
俺は(も?)そう思った
でも規格で決まってるって一言で言ってもらえてなんとなく割り切れた

ひとつだけ
「インスタンス内のメンバの絶対アドレスを取得する」のが特殊な行為って部分をkwsk
他のポインタは相対アドレスなの?

655
デフォルトの名無しさん (ワッチョイ 3398-jYbd)[sage]   投稿日:2017/03/17 22:41:33  ID:pMlN+j4d0.n(2)
いやでも、原文には
>インスタンス内のメンバの絶対アドレスを取得するが「一般的」な行為
って書いてあるし

656
デフォルトの名無しさん (オッペケ Sr97-w0Gz)[sage]   投稿日:2017/03/17 23:23:01  ID:p3X8pgmur.n(2)
>auto jerk = sonofabitch;

ここは話の流れでは
auto jerk = asshole::sonofabitch;
とすべき所を、勝手に「asshole::」を取って話をすり替えるとは

657
デフォルトの名無しさん (ワッチョイ a342-W3uL)[sage]   投稿日:2017/03/17 23:23:58  ID:lHYxcE7d0.n(2)
>653
transformみたいなアルゴリズム系の関数に渡すときにバインドするしかないだろ
コメント2件

658
デフォルトの名無しさん (ワッチョイ 3fd1-h49x)[sage]   投稿日:2017/03/17 23:46:36  ID:KqZX+Igl0.n(2)
継承してなくてもbindできるでしょ
コメント2件

659
デフォルトの名無しさん (ワッチョイ 537b-gO1F)[]   投稿日:2017/03/17 23:48:26  ID:RKn5d9hw0.n(2)
継承とbindがどう関係すんのか解らんわ

660
デフォルトの名無しさん (オッペケ Sr97-w0Gz)[sage]   投稿日:2017/03/18 09:12:06  ID:QtoorQPlr.n(2)
>653
>C++なら継承してないとbind出来ないよな?

継承の意味もわからないレベルはすっこんでた方がいい
http://ideone.com/Wl7A59
コメント2件

661
デフォルトの名無しさん (ワッチョイ f3e7-ajdi)[sage]   投稿日:2017/03/18 09:44:46  ID:g4V8rpJk0.n(4)
ふえーん。VC++でW系のこーどがわからないよ〜。

662
デフォルトの名無しさん (ワッチョイ f3e7-ajdi)[sage]   投稿日:2017/03/18 09:54:09  ID:g4V8rpJk0.n(4)
C++のバグかと思ったら、いじってるHTMLのバグだった。悲しい。

663
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 11:02:56  ID:waR+gchT0.n(42)
>657
std::transformならbindいらんだろ。イテレータを渡してる。
> https://cpprefjp.github.io/reference/algorithm/transform.html
そしてこの場合、(someClass->*someMethod) と書けるしそれで十分だろ。

>660
ここでbindも継承もないソースを上げてくることにびっくりだわ

>658-659
関数内でのthis.someFieldへのアクセスは継承してないと無理でしょ。
静的型ではポインタを生成出来ない。(動的ダックタイピングなら可能)
http://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03057.html
http://www.ibm.com/support/knowledgecenter/ja/SSGH3R_12.1.0/com....

継承してない物をbindして、その関数内からthis.someFieldにアクセス出来る例があるか?
あればよろしく。
コメント4件

664
デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]   投稿日:2017/03/18 11:43:31  ID:YXP7lJmh0.n(14)
ていうか仮想関数(による多態性)とテンプレート(によるfunctor)がどっちも使える状況で
どうしてもメンバ関数のアドレスをとる必要があるというシチューエーションとは一体、
ちなメンバ関数のアドレスをとる構文は覚えていない
主記憶にございません

665
デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]   投稿日:2017/03/18 11:45:58  ID:YXP7lJmh0.n(14)
誤:テンプレート(によるfunctor)
正:テンプレート(へのfunctorとかクロージャ渡し)

666
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/18 12:01:44  ID:TmvAgLdoM.n(22)

667
デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]   投稿日:2017/03/18 12:41:56  ID:YXP7lJmh0.n(14)
f.calc(x, 2)をfunc(x)として呼びたいためだけにstd::bind()を使うのはメリット感に欠ける…
コメント2件

668
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/18 12:43:09  ID:TmvAgLdoM.n(22)
>667
できるできないの議論だから

669
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 12:48:15  ID:waR+gchT0.n(42)
>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無しで書ける)
というか内部的には同じ事をやっていると思っているんだが。
コメント6件

670
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 12:48:34  ID:waR+gchT0.n(42)
それで話を戻すと、
「継承関係無しで、自分自身でもないクラス G をbind出来るか?」
というのが俺の問いね。
お前は日本語にもこだわるタイプのようだから、「自分自身でもない」と明記しておく。
(これは普通に分かると思いたかったが)

要するに俺は、
「静的型であるC++に於いてthisのバインドって意味あるのか?」
と問うている。
動的型ならバインド後にメンバ追加して実行時に揃っていればダックタイピング可能だから意味がある。
静的型はバインドする時点でメンバが揃っていることを確定出来ないといけない。
それって要するに継承関係がないと無理だよね?という話。
コメント2件

671
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 12:51:40  ID:waR+gchT0.n(42)
× 静的型はバインドする時点で
○ 静的型はバインドが使われているソースをコンパイルする時点で

一応訂正しとくわ。分かる範囲だとは思うが。

672
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/18 13:01:24  ID:TmvAgLdoM.n(22)
何が言いたいのか全然わからん
とりあえず、そのJavaScriptでできると主張しているコードを晒せ

第一引数にthisをバインドする意味って、内部的にはメンバメソッドはオーバーロード(+マングリング)で解決されるんだから、バインドしとかないと動かねーだろがよ
コメント2件

673
デフォルトの名無しさん (ワッチョイ 2322-ghbJ)[sage]   投稿日:2017/03/18 13:17:03  ID:WJ1Bgcsq0.n(6)
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の場合継承は関係ないと思う
コメント6件

674
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 13:31:02  ID:waR+gchT0.n(42)
>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)
コメント2件

675
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 13:31:20  ID:waR+gchT0.n(42)
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 もメンバになる)

676
デフォルトの名無しさん (ワッチョイ 537b-gO1F)[]   投稿日:2017/03/18 13:32:09  ID:ux+WuUO90.n(8)
>670
thisに限らずbindするメリットは呼び出し側が(bindで引数を合わせることにより)実際に呼び出される物がどんな関数のか気にせずに呼び出せることっていうのは解るよね?
それで、thisのbindだけ疑問視する理由は?
コメント2件

677
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 13:38:41  ID:waR+gchT0.n(42)
>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)でもコンパイル通るんだよ。(まあコンパイル自体がないんだが)
そして実行も出来る。(ただし実行時にメンバが揃ってない時にはお察しで)
コメント2件

678
デフォルトの名無しさん (ワッチョイ 537b-gO1F)[]   投稿日:2017/03/18 13:48:07  ID:ux+WuUO90.n(8)
>677
つまり
>callbacks.push_back(a->*func))
と書けるようにしたらbindでthis使う必要ないって話?
そうなのであれば
callbacks.push_back([&]{a.func();});
と書けるから別に要らない
コメント4件

679
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 13:53:42  ID:waR+gchT0.n(42)
>676
見やすさの為に、というのはいい。

> thisのbindだけ疑問視する理由は?
プログラミングコストが減ってないから。
auto a_func = std::bind(&A::func, &a) なら、
a を管理するか a_func を管理するかで、何も隠蔽出来てないし減ってない。

ただ>673みたいな使い方だと、
型を揃えた結果、同じ記述で実行出来るから、この点は確かにメリットはある。
これを言いたかったのか?
コメント4件

680
デフォルトの名無しさん (ワッチョイ 537b-gO1F)[]   投稿日:2017/03/18 13:59:12  ID:ux+WuUO90.n(8)
>679
bindを使う利点なんてそれしか無いと思うんだけど…

681
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/18 14:02:09  ID:TmvAgLdoM.n(22)
>674
C++では、お前があとからやってるインスタンス構築を先にやっとけよってだけの話
コメント2件

682
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/18 14:03:34  ID:TmvAgLdoM.n(22)
>679
type_erasureの話がしたかっただけ?
C++のこと知らねーなら議論の余地がなさすぎ
JavaScriptスレいけよ

683
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 14:04:04  ID:waR+gchT0.n(42)
>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));
で全く問題なくね?
コメント2件

684
デフォルトの名無しさん (ワッチョイ 2322-ghbJ)[sage]   投稿日:2017/03/18 14:06:49  ID:WJ1Bgcsq0.n(6)
正直
std::function<...> f[] = a.func;
で書けるなら書きたい
書けないからbind使ってる
コメント2件

685
デフォルトの名無しさん (ワッチョイ 2322-ghbJ)[sage]   投稿日:2017/03/18 14:07:07  ID:WJ1Bgcsq0.n(6)
[]いらない

686
デフォルトの名無しさん (ワッチョイ a30e-BL3h)[sage]   投稿日:2017/03/18 14:10:17  ID:JpaAP8SC0.n(4)
今時bind使わずlambdaで済ますよね

687
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/18 14:10:36  ID:TmvAgLdoM.n(22)
>683
aをキャプチャする必要が有るだろうが
まじでclassとインスタンスの違いをもう少し学んでくれ
コメント2件

688
デフォルトの名無しさん (オッペケ Sr97-w0Gz)[sage]   投稿日:2017/03/18 14:11:31  ID:2lr6MuOgr.n(2)
なんだ、継承の意味を知らないんじゃなくて
std::bindを見てECMAScriptのbindingと同じものだと勘違いしていただけか。
これでは話が噛み合うはずがない
コメント2件

689
デフォルトの名無しさん (ワッチョイ 537b-gO1F)[]   投稿日:2017/03/18 14:14:40  ID:ux+WuUO90.n(8)
>687
新しい文法追加してa->
*func って書いたらaを参照キャプチャしてfuncを呼び出す関数オブジェクトを返すようにしてほしいらしいよ。
コメント4件

690
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/18 14:17:30  ID:TmvAgLdoM.n(22)
>689
関数を一級オブジェクトにしろという主張??
別の言語でやれとしかいいようがないな…

691
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 14:20:22  ID:waR+gchT0.n(42)
>681-682
> インスタンス構築
それはインスタンス構築ではなく、使う物だけとりあえず入れてるんだよ。
a を構築しているのではなく、 a.func の数式 k*x+a を使いたいから、
とりあえず a と k に値を入れて使っているだけ。
数式を間借りしているだけなんだ。

もっと a が複雑で、100個くらいメンバを持っているベクトル値だったとして、
calcも calc_0 〜 'calc_100 とかあったとして、そのうち1個だけ丁度いい数式があったら、それを借りる感じ。
このデタラメっぷりはC++にいると理解不能だが、JavaScriptに慣れるとC++が色々面倒で仕方ない。
そもそもテンプレートも型消去も最初からvarだとやらなくていいんだよ。
(その分デバッグが辛いが)
コメント2件

692
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 14:24:47  ID:waR+gchT0.n(42)
>689
いやその文法はすでにC++0xにあるとの理解だが、これが間違いか?
既に>663にURL上げたが。
> メンバーを指すポインター演算子 .* および ->* は、特定のクラス・オブジェクトのメンバーを指すポインターをバインドする際に用いられます。
コメント2件

693
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/18 14:26:29  ID:TmvAgLdoM.n(22)
>691
> それはインスタンス構築ではなく、使う物だけとりあえず入れてるんだよ。
>とりあえず a と k に値を入れて使っているだけ。
>数式を間借りしているだけなんだ。
それをインスタンス構築っていうんだよ、覚えとけばか

>もっと a が複雑で、100個くらいメンバを持っているベクトル値だったとして、
>calcも calc_0 〜 'calc_100 とかあったとして、そのうち1個だけ丁度いい数式があったら、それを借りる感じ。
そういう場合はお前の言うとりあえずだけを入れられるコンストラクタ作るんだよ
まぁ普通の感性ならその部分はサブクラスとして切り出すけどね

>このデタラメっぷりはC++にいると理解不能だが、JavaScriptに慣れるとC++が色々面倒で仕方ない。
>そもそもテンプレートも型消去も最初からvarだとやらなくていいんだよ。
面倒ならjsで書いとけばいいんじゃないですかね

694
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/18 14:27:43  ID:TmvAgLdoM.n(22)
>692
間違い

695
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 14:43:08  ID:waR+gchT0.n(42)
>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++も同じく糞なのか?
コメント4件

696
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/18 14:55:00  ID:TmvAgLdoM.n(22)
>695
classとインスタンスの違いがわかってないうちはマジで理解できないだろうからもう諦めろ

JavaScriptのbind一通り調べたよ
jsは関数型に依っててインスタンスって考え方がないんだな
コメント2件

697
デフォルトの名無しさん (ワッチョイ a30e-BL3h)[sage]   投稿日:2017/03/18 15:03:41  ID:JpaAP8SC0.n(4)
最悪一部menberの参照だけ取られる表記と同じで、それがメンバ関数だとインスタンス全部が人質になるとか怖すぎ。

698
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 15:44:12  ID:waR+gchT0.n(42)
>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で出来るのだから、
何故これを出来ないようにしたのかは謎だが。

699
デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]   投稿日:2017/03/18 15:49:31  ID:YXP7lJmh0.n(14)
JavaScript…
あれはインスタンスしかないみたいな似非^2オブジェクト指向じゃん?
あまりの酷さに批判が高まったのか、エッセンス6とかでprototypeキーワードが導入されたが
それぐらいのもん

ちなC++の話として、クロージャはあんま継承関係無い
f.calc(x, 2)をfunc(x)の如く扱いたければfの所有でおk
コメント2件

700
デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]   投稿日:2017/03/18 15:55:28  ID:YXP7lJmh0.n(14)
個人的にはstd::bind(&F::calc, f, _1, 2)ですらF::calcの直接callに最適化されずに、
間接メモリアドレッシング後のcall止まりになるんではないかと危惧してゐる
テンプレートを使える環境にありながら
関数へのポインタなど使うのは教育上によろしくない
コメント2件

701
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 16:02:10  ID:waR+gchT0.n(42)
なお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 が呼ばれました。
> http://ufcpp.net/study/csharp/sp_delegate.html

702
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 16:02:29  ID:waR+gchT0.n(42)
そしてC++でも出来そうなんだが、、、
> Human alice;
> printf("Alice");
> (alice.*pf5)();
>
> // おまけ
> int Human::*x = &Human::age;
> alice.age++;
> printf("age = %d (%d)", alice.*x, &(alice.*x));
> http://qiita.com/Ted-HM/items/282785fcdcd06fb59642
コメント2件

703
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 16:27:36  ID:waR+gchT0.n(42)
>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するようには出来ないだろ。
というかテンプレートと関数ポインタの使う範囲は被らないと思うが。(代替出来ない)

704
デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]   投稿日:2017/03/18 16:35:15  ID:YXP7lJmh0.n(14)
>> 個人的にはstd::bind(&F::calc, f, _1, 2)ですらF::calcの直接callに最適化されずに、
>というかこれを期待するのがC++なのか?
>それはさすがに厳しいとは思うが、確かに無理ではないが。
できる
F:calc()は仮想関数では無いし、
表記の例では&F:calc自体が(F::calc()と同じシグネチャを持つ別名の関数とかに)差し替えられはしないので
本質的には直接callとなるべきもの
コメント2件

705
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 16:38:53  ID:waR+gchT0.n(42)
ああ分かった。
>702はこちらの解釈間違い、これは出来ているわけではないね。
.* と ->* はあくまでその場で呼んでいるだけであって、
bind済みの関数を返してくれるわけではないのね。

706
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/18 16:42:00  ID:TmvAgLdoM.n(22)
もういいよ
jsスレでやれよ

707
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 17:00:49  ID:waR+gchT0.n(42)
>704
> 本質的には直接callとなるべきもの
それを言いだしたら全部だろ。そうなってないから色々問題なわけで。
ただこれに関してはスタックイメージを揃えればいいだけだから、やる気だけだね。

最初からスタックイメージを揃える呼び出しを用意してもいいし、
一旦>669の形式で2段階呼び出しにして、インラインにしてもいい。
(ただしインライン展開対象は外側関数なので従来最適化ルーチンは使えない)
いずれにしても難しくはないよ。やる気だけの問題だね。

708
デフォルトの名無しさん (ワッチョイ c353-PkJR)[sage]   投稿日:2017/03/18 17:01:39  ID:U4KC6daQ0.n(2)
知識がないのに何故語ろうとする

709
デフォルトの名無しさん (ワッチョイ 838b-UnlH)[sage]   投稿日:2017/03/18 17:59:03  ID:YXP7lJmh0.n(14)
>それを言いだしたら全部だろ。そうなってないから色々問題なわけで。
std::bind(&F::calc, f, _1, 2)という記述を見たコンパイラはポインタが関係するのでF::calc()を直接呼出しして良いものか迷うかもしれないが、
std::bind(<F::calcを表す関数オブジェクト>, f, _1, 2)なら
std::bind()自体の書き方や関数オブジェクトの書き方がよほどアレでない限りはF::calc()直接呼出し相当のコードになる
全部一緒というなら一緒なんだろう藻前の中では(ry
コメント4件

710
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 20:18:06  ID:waR+gchT0.n(42)
>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)はどこか遠いところで代入されており、
通常はその関数外から与えられる。
だから最適化は難しいんだよ。
コメント2件

711
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 20:18:41  ID:waR+gchT0.n(42)
ローカル関数内でfが分かりやすく代入されている場合は完全に最適化出来る。
同様の方法で外部から与えられた場合でも常に最適化する為には、
fに代入される可能性のあるポインタを全て精査する事が必要だが、一般的にこれは無理。
(書いた本人には何が入る可能性があるか簡単に列挙出来るが、
ソースコードから抽出するのはかなり無理)
したがって、次案としては、
f自体に「第○引数を第△引数に入れ替え、第●引き数は▲で固定」という情報を持たせ、
対応することになる。(なおこの操作を別関数として行うのが「2段呼び出し」になる。)
もっとも、C++のメンバポインタはintサイズでなくてもいいみたいなので、
この方法でも出来なくもないが、VC++ではやってないね。
> VC++で試したところ、普通は4、多重継承していれば8、仮想継承していれば12となりましたが、
> http://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03058.html
これをやっていれば通常でも4では済まない。
多重で増えているのはポインタのずれを補正する分だね。
> https://www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/featur...

712
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/18 20:19:09  ID:waR+gchT0.n(42)
分かるか?
完全に「直接呼び出し」にするには動的データとして「メンバ関数オブジェクト」みたいな物を作り、
それの展開ルーチンをインラインで埋め込まないといけないんだよ。
(サブルーチンで呼び出すと結局2段呼び出しになるだけ無駄)
だったらそのままその「展開ルーチン」→「ターゲットメンバ関数」の2段呼び出しでもいいや、ってことになるだろ。
それがVC++でこの部分の直接呼び出し最適化をしていない理由だと思うよ。
多分さほど効果がないんだよ。(やる事自体は難しくない)

表面的な原因は、「第1引数がbindされた関数ポインタ」「第2引数がbindされた関数ポインタ」が
同じ型になってしまうことだよ。だからといって、これらが別型なのは言語として糞だろ。
明示的に分かりやすくその場で代入されている場合は、
これらを別扱いすればいいだけだから比較的楽に対応出来る。
だけど一旦ポインタとして受けられた場合、どれになるかは分からなくなるので無理になる。
それで、ポインタ自体にその情報を与えて動的モドキで対応するよりも、
単純に2段呼び出ししたほうがマシ、という判断が為された、ということだよ。VCでは。
ただ、2段呼び出しは「継承したクラス」を自分で書いた場合で、
std::bindってevalするわけではなくて、静的なライブラリ(=データしか作成出来ない)だよな?
だったら内部的に上記「メンバ関数オブジェクト」方式になっている可能性が高く、
2段呼び出しで汎用ルーチンで展開=一番遅いパターンだと思うけどね。
まあここら辺はそっちの方が詳しい気がするが。

で、改めて聞くが、何が言いたいんだ?
俺はCコンパイラを作っているわけではないし、俺に文句言われても知らんがな。

結論としては、
> std::bind()自体の書き方や関数オブジェクトの書き方がよほどアレでない限りはF::calc()直接呼出し相当のコードになる
は間違いだね。理由は上記、完全精査はかなり難しいからだ。
(もし出来てるのならスゲーとは思うけど)

713
デフォルトの名無しさん (ワッチョイ 3fe5-eT6H)[sage]   投稿日:2017/03/18 20:25:58  ID:vEAnzxNk0.n(2)
std::hashのconstexpr版って標準に入る予定とかないの?

714
デフォルトの名無しさん (ワッチョイ 738b-UnlH)[sage]   投稿日:2017/03/19 00:13:07  ID:F98WB86R0.n(4)
>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)的なコードにしかできない
コメント2件

715
デフォルトの名無しさん (スプッッ Sddf-8YZg)[sage]   投稿日:2017/03/19 00:17:51  ID:UQylyHTkd.n(2)
お前らのおすすめのデザインパターんおしてて
コメント4件

716
デフォルトの名無しさん (ワッチョイ 738b-UnlH)[sage]   投稿日:2017/03/19 00:18:40  ID:F98WB86R0.n(4)
訂正
誤: F::calc()というシンボルのアドレスがコンパイル時に決まるから、直接呼出しのコードにできる
正: F::calc()というシンボルの呼び出しであることがコンパイル時に確定するから、直接呼出しのコードにできる

717
デフォルトの名無しさん (オッペケ Sr97-w0Gz)[sage]   投稿日:2017/03/19 00:38:21  ID:rBaNXWYpr.n(2)
>715
とりあえずRAIIは使っとけ
ナマポをnewする奴は殺害されても犯人に情状酌量の余地が残る
コメント2件

718
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/19 00:38:32  ID:Sogj9z7eM.n(2)
>715
expression template
コメント2件

719
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 01:10:03  ID:7dJ8iAqk0.n(28)
>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段階呼び出し
}
コメント2件

720
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 01:10:33  ID:7dJ8iAqk0.n(28)
(L)は必ず直接呼び出しになる。アセンブラなら push, push, push, call
(M)はソース上を精査すれば同型呼び出ししかないことが分かるので
技術的には(L)と同程度まで最適化可能ではあるが、一般的には無理だと思う。
2段階呼び出し時は push, push, push, call, mov, jmp
(N)は異なる形の呼び出しが与えられているので、
技術的に(L)と同じコスト(アセンブラ4命令程度)の直接呼び出しは不可能。
無理にcmpとかやるより普通に2段階呼び出しの方がいいと思う。
だからVCもそうしていると見ている。

それで、std::bindについては詳しい奴が以下見れば実装の見当が付くはずだが、
俺はC++用語に詳しくないので分からん。
http://ja.cppreference.com/w/cpp/utility/functional/bind
俺が実装するなら、ありがちなのをテンプレートで実装するが、
その場合はポインタサイズはsizeof(int)*2になる。
(メンバ関数へのポインタと、bind済みの値をstructで持つ=内部的な匿名クラスにするから)
VCがなぜ4に出来るのかは分からん、というか計測間違いじゃないかと思う。
(バインド済みの値の分を入れてない)

721
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 01:11:05  ID:7dJ8iAqk0.n(28)
俺が言いたかったのは、上記(L),(M),(N)ということ。
君の主張は、すべてbind時で確定して、上記(M)(N)も(L)と同じコストで呼べるという主張だと読める。
それは無理。
確かにアドレス自体は確定はするが、
引数をbindしているのだからスタックをその形にしてやらないといけない。
上記(N)の呼び出し、アセンブラ4命令ではどうやっても書けないだろ。
cmp使って書くくらいなら2段階呼び出しで6命令(2分岐)の方がマシ。

cmp使って無理に直接呼びにしたら、
そこに来る可能性のある呼び出し型を全部そこに書かなければならなくなる。
そしてx86はプレディケートを持ってないので、cmpで分岐しないといけない。(ARMは持っている)
それって完全に本末転倒だろ。

それで、std::bindと関数オブジェクトをどう組み合わせたら、
(L),(M),(N)について上記通りアセンブラ4命令程度で呼び出せるのかよろしく。

722
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 01:17:42  ID:7dJ8iAqk0.n(28)
すまん、重要なところを間違えていたので訂正。
>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

ただ結局、変な引っかけみたいになっているだけで意味は同じかな?
まあ訂正しとくけど。

723
デフォルトの名無しさん (ワッチョイ bfcc-UNkP)[sage]   投稿日:2017/03/19 01:31:51  ID:i6MRGbY60.n(2)
まだJAVAガイジ張り付いているのか…

724
デフォルトの名無しさん (ワッチョイ 8330-PVeP)[sage]   投稿日:2017/03/19 01:41:06  ID:I9SbzQA70.n(2)
あんだけ無能な醜態をさらしておいて
ボクはレベルが高いけどちょっと知らなかっただけちょっと間違えただけで済んで
まだ自分のいうことに説得力がある聞いてくれる人がいると思ってるところがもうね…

725
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 01:44:23  ID:7dJ8iAqk0.n(28)
bindの説明読む限り、やっぱこれかなり汎用に作っていて遅いと思うぞ。
ただ一般的にはそこが見えるほど使うことはないと思うが。
アセンブラ的には、

f->func(): 4命令程度(分岐1回)
std::bind経由での呼び出し: 10-50命令程度か?(分岐2回以上)
内部オブジェクト作成方式: 6命令程度(分岐2回)

じゃないかな。
コメント2件

726
デフォルトの名無しさん (ワッチョイ 537b-gO1F)[]   投稿日:2017/03/19 01:49:16  ID:jcDR9uoj0.n(20)
まぁ、別にスレ違いというわけでもないからいてもいいんじゃない?付き合いたい人が付き合えば。
俺はレスしないけど。

727
デフォルトの名無しさん (ワッチョイ 537b-v8EU)[sage]   投稿日:2017/03/19 01:59:32  ID:jcDR9uoj0.n(20)
と、言ったものの、我慢しきれないので撤回します。

>725
https://godbolt.org/g/SFtHQt

こうなる意味を考えて。
もう一つヒントあげるとstd::function<int()>で受けるとどうなるか見てみたらいいよ。
コメント6件

728
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 02:14:29  ID:7dJ8iAqk0.n(28)
誰かと思えば>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++っぽくない。
コメント2件

729
デフォルトの名無しさん (ワッチョイ 537b-gO1F)[]   投稿日:2017/03/19 02:17:00  ID:jcDR9uoj0.n(20)
>728
C++なら無駄ではない
終了
コメント2件

730
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 02:19:33  ID:7dJ8iAqk0.n(28)
>727
俺には計算済みとしか見えないが、何か操作必要?
-O3外せとかか?

> fn(int):
> lea eax, [rdi+rdi]
> ret
> bind():
> mov eax, 4
> ret
> direct():
> mov eax, 4
> ret

731
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 02:28:44  ID:7dJ8iAqk0.n(28)
>727
というかな、根本的に間違ってると思うぞ。

一般的に関数ポインタを使う場合、それは外部から与えられるんだよ。
自分の内部で作って使うって事はない。
(ここでは単純なソースで議論するからそうなるだけで、一般的にはそうではない。
つか、それじゃ関数ポインタの意味がないし)

典型的にはcallbackだよ。外部から与えないと全く意味無いだろ。
で、その場合は当然この手の事前計算とかでの最適化は出来ないんだよ。
コメント2件

732
デフォルトの名無しさん (ワッチョイ 537b-v8EU)[sage]   投稿日:2017/03/19 02:33:33  ID:jcDR9uoj0.n(20)
>731
一時一句同じじゃないと理解できない人だったか。

https://godbolt.org/g/o73pz4

これで理解できますか?
コメント6件

733
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 02:51:38  ID:7dJ8iAqk0.n(28)
>732
あーお前がアホだということはよく分かったわ。

まともに議論する気なら、お互いが見ているものが同一であることを確認しないといけない。
>727を見たらアホかと思うのは道理だろ。

そして>732もアホかと思うよ。関数内部で何を作ってもそれは最適化されるよ。
それは一時変数を除去すればいいだけなのだから。
そうではなくて、例えば以下にしないといけない。

int main(){
auto f = std::bind(&something::func,ptr);
bind(f);
}

int bind(std::function<...> f){
return f(); // bind済みのfを呼ぶコストをここで計測する
}

再度言うが、関数ポインタは外部から与えないと意味無いんだよ。
てかお前ら実は全く関数ポインタ使ってないだろ。
だから使い方自体を知らないんだよ。

これで、bind/関数オブジェクト/クロージャで呼び出しコストを比べてみなよ。
当たり前だが上記だとbind呼んで終わりになるけど、
もちろんその先のターゲット(something::func)が呼ばれるまで見るんだよ。
つまりstd::bind内部のコードもね。それが呼び出しコストなんだから。
それで、あらかじめ計算済みとかいうアホなオチはマジで止めてくれ。
一般的にポインタを与えた場合、それが無理なことくらい分かるだろ。
コメント6件

734
デフォルトの名無しさん (ワッチョイ 537b-v8EU)[]   投稿日:2017/03/19 03:14:07  ID:jcDR9uoj0.n(20)
>733
注文の多いやつだなぁ。

https://godbolt.org/g/R1ljMl

関数ポインタを外から渡すようにかえてやったぞ。
自分で言ってることをC++で書く能力ぐらいあるよね?
次から自分で書けよ。


std::bindに余分なコストなんてない。std::functionの方にある。
ヒントあげたのに全く考えようとしなかったのかな?
コメント4件

735
デフォルトの名無しさん (ワッチョイ 537b-v8EU)[sage]   投稿日:2017/03/19 03:24:22  ID:jcDR9uoj0.n(20)
>733
なぜか一時変数だから最適化できると信じてるみたいだけど、そう思うなら

int std_function(something* ptr,fn_ptr_type fptr){
std::function<int()> f = std::bind(fptr,ptr);
return f();
}

と書いてみればいい。

>そして>732もアホかと思うよ。関数内部で何を作ってもそれは最適化されるよ。
>それは一時変数を除去すればいいだけなのだから。
がバカな発言だったと理解できると思うから。
コメント2件

736
デフォルトの名無しさん (ワッチョイ 0f59-Rjy3)[sage]   投稿日:2017/03/19 03:38:13  ID:xwQyhAst0.n(2)
ああ、Javaだと〜とか言ってた人か

737
デフォルトの名無しさん (ワッチョイ cf6b-8YZg)[sage]   投稿日:2017/03/19 08:10:18  ID:oCYtEhVi0.n(4)
>717
調べても出てこない....
コンストラクタとデストラクタでNewとかするやつだっけ??

>718
数式を渡して分かりやすくするってのはなんとなくわかったんだけど
逆にごちゃごちゃしすぎてる気がするって印象を受けた
コメント4件

738
デフォルトの名無しさん (ワッチョイ ef6c-i8cA)[sage]   投稿日:2017/03/19 08:15:20  ID:gWCLtiPs0.n(2)
>737
デストラクタでdeleteやで

expression templateは効果がどうなの?って思い始めてる
普通にコンパイラの最適化に任せた場合とそんなに変わるんかな
コメント4件

739
デフォルトの名無しさん (ワッチョイ cf6b-8YZg)[sage]   投稿日:2017/03/19 08:18:02  ID:oCYtEhVi0.n(4)
>738
すまん
とかにまとめた
scope抜けたときに必ず処理させるってやつよね
確かに必要なやつだな

コード見やすくってやって逆に色々と設定があると逆に見にくくなるんじゃないか?って疑問が残った
今はあとシングルトンパターンぐらいしかわかんないや

740
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 08:46:03  ID:7dJ8iAqk0.n(28)
訂正ね。
>733
× std::bind内部のコードもね。
○ std::functionのoperater()の内部のコードもね。

処理系の実行コードも、という意味で書いたが、
std::bindはstd::functionを返すので今回についてはoperator()のコードになるのだよな?
まあ間違っていたら適宜訂正してくれ。分かる範囲だと思う。

>734
> std::bindに余分なコストなんてない。std::functionの方にある。
これが上記について言っているのならその通り。
ただそれは揚げ足取りだと分かるだろ。それがやりたかったのならどうぞ、おめでとう。
それが分からないのなら君にはこの話は無理だね。
というわけでいずれにしてもこの話は終わりでいい。

741
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 08:47:04  ID:7dJ8iAqk0.n(28)
一応中身は確認した。
>734については呼び出し側は全部同じコードが出るという事ね。ここまではいい。
問題はその先だ。それは君も分かってるんだろ?だったら何故それをしない?

>735
> なぜか一時変数だから最適化できると信じてるみたいだけど、そう思うなら
これについては相変わらずそちらが間違いだね。
事前計算済みのコードをドヤ顔で出してきたのはそちらだろ。
それはコンパイル時に「事前計算が出来る」ということがコンパイラにも分かったから。
とはいえ、君みたいな奴も沢山いるのも事実だよ。

> と書いてみればいい。
書いてみたらstd::functionのコードが出た。
中身は今の俺にぱっと分かるようなものではないね。
が、まあ、100命令弱増えているからその分遅いと言える。
だから結論は、直接=ファンクタ<<<<bindになるのかな?
ファンクタは正直ピンとこない。
あとは>729で無駄がないとドヤ顔のラムダがどこまで速いかだね。
まあ頑張って。

いずれにしても、この話は終わりでいい。
俺が確認したい範囲はもう分かった。
コメント2件

742
デフォルトの名無しさん (ワッチョイ 537b-gO1F)[]   投稿日:2017/03/19 08:51:40  ID:jcDR9uoj0.n(20)
>std::bindはstd::functionを返すので今回についてはoperator()のコードになるのだよな?

ここまで書いても理解出来ないのかよ…

743
デフォルトの名無しさん (ワッチョイ 537b-gO1F)[]   投稿日:2017/03/19 09:00:02  ID:jcDR9uoj0.n(20)
>741
俺はただ知識がないやつをバカとは思わないが、お前みたいな自分が理解出来ないのを相手のせいにしてアホなんて言う奴は本当にバカだと思うよ。

書いておかないと理解しなさそう(=出来なさそう)だから一応書いておいてあげるよ。

std::bindの返りの型はstd::functionでは”ない”
コメント2件

744
デフォルトの名無しさん (オッペケ Sr97-w0Gz)[sage]   投稿日:2017/03/19 09:08:50  ID:EshC/yEQr.n(2)
>ID:7dJ8iAqk0
コストは 直接=ラムダ=bind <<< std::function
bindとstd::functionは関係無い
functionにbindを重ねればfunctionのコストがそのまま残る
コメント2件

745
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 09:17:50  ID:7dJ8iAqk0.n(28)
>743
だから俺はそこら辺までは詳しくないのさ。
繰り返しているとおり、std::bindの説明を読んでも全てを今すぐ理解する知識はないんだよ。
俺はC+JavaScriptだからね。C++はbetterCとして使ってきてるが、
VC++(=CLI)だからSTLを使ったことはなく、.NETだし。

C++特有のテンプレートとか型消去については
「動的型なら何も考える必要ないのに」で飛ばしてきたし、
RAII+スマポについても「そこまで言うならGC言語使えよ」としか思ってない。

だから今、型消去とかも読んでるけど、これを理解するには時間がかかるし、
上記の通りSTLについてもほぼ知らないから、これまたインストールに時間がかかるんだよ。


> std::bindの返りの型はstd::functionでは”ない”
まあそれはさておき、std::bindは何が返るんだこれは?
型消去で無理矢理格納出来るだけなのか?
ただ、実行時はstd::functionのoperator()が呼ばれると思うが、これも違うのか?
コメント2件

746
デフォルトの名無しさん (ワッチョイ 537b-gO1F)[]   投稿日:2017/03/19 09:26:27  ID:jcDR9uoj0.n(20)
>745
知らないなら想像で実行時コストとか決めつけるなよ

auto f=std::bind(func);
f();

std::function<int()> f=std::bind(func);
f();

で出力されるコードが違うんだから違うと解るもんだとおもってstd::function版を書かせたんだけど、何が解らなかったのかな?

747
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 09:41:13  ID:7dJ8iAqk0.n(28)
>744
あー何となく分かってきた。以下ページ、
http://ja.cppreference.com/w/cpp/utility/functional/bind
の「メンバ関数 operator()」ってとこが呼ばれるのか。つか英語版見るべきだったかも。
じゃあ当初の「std::bind内部のコードもね」でも十分通じる気もするが、まあこれはいい。

いずれにしても俺はこの通り、cppreferenceの見方もよく分かってない。
だから君らに追いつくのは時間がかかる。

> コストは 直接=ラムダ=bind <<< std::function
ラムダは最高に最適化された状態でbindと同じ。
bindもoperator()の内部でプレースホルダ引数の配置をするのなら、
同様に最高に最適化された状態で直接と同じ。
結果、直接=<bind=<ラムダ じゃないか?
まあこれについてはそちらの方が詳しいだろうし、こちらも引き続き詳細確認中だが。

748
デフォルトの名無しさん (ワッチョイ f35b-tpgq)[sage]   投稿日:2017/03/19 09:49:17  ID:7dJ8iAqk0.n(28)
ちなみに誰かと確認してみたが、
> std::bindを見てECMAScriptのbindingと同じものだと勘違いしていただけか。(>688)
なるほど、その通りだ。俺が思っていたbindとはだいぶ違う。

749
デフォルトの名無しさん (ワッチョイ 5319-v8EU)[sage]   投稿日:2017/03/19 09:52:16  ID:/fHKNSq50.n(2)
直接<間接=関数ポインター<λ<バインド
なぜならバインドは内部で関数ポインターを使うしかないから
ラムダは言語で実装されてるから。

750
デフォルトの名無しさん (ササクッテロル Sp97-q0jq)[sage]   投稿日:2017/03/19 17:47:12  ID:SFAOW7ATp.n(2)
関数呼び出しのコストでここまで議論できるって凄いな
普段C++で何作ってんだろ
コメント4件

751
デフォルトの名無しさん (ワッチョイ 537b-gO1F)[]   投稿日:2017/03/19 18:17:17  ID:jcDR9uoj0.n(20)
>750
議論ではなく出来の悪い生徒の補習してただけだから。

752
デフォルトの名無しさん (ワッチョイ f37b-12+v)[sage]   投稿日:2017/03/19 18:21:02  ID:V1EWIlT/0.n(4)
ギリギリ迫るのも楽しいものです

753
デフォルトの名無しさん (ワッチョイ 2302-nFTW)[sage]   投稿日:2017/03/19 18:49:00  ID:6JgBGVv40.n(2)
>750
え、Hello worldだよ?

754
デフォルトの名無しさん (ワッチョイ 7302-12+v)[sage]   投稿日:2017/03/19 20:26:30  ID:fEuC6OUR0.n(2)
ある時系列データにフィルタを通した任意の範囲のデータを扱うクラスを作るんだが
今だとイテレータよりRangeの方が良いのか?

755
デフォルトの名無しさん (ワッチョイ f37b-12+v)[sage]   投稿日:2017/03/19 22:20:21  ID:V1EWIlT/0.n(4)
もう少し具体的に と思います

756
デフォルトの名無しさん (ワッチョイ 8330-PVeP)[sage]   投稿日:2017/03/20 00:26:19  ID:V0m6X4Gc0.n(2)
基本的にレンジはイテレータのペアのラッパでしかなく
イテレータが無くなるわけでもないからとりあえずはイテレータを前提に作っておけばよかろ

757
デフォルトの名無しさん (ワッチョイ f33c-u6wT)[sage]   投稿日:2017/03/20 12:05:47  ID:OlwkB3mR0.n(12)
>737
expression templateは遅延評価による高速化のために使うんやで
速度が必要無いなら要らんのやで

>738
実測してみた?
二項演算子(または結果を戻り値で返す関数)を多用する場合、
x, y, zを持つベクトルなんかだと明らかに効果ある
組み込み型だと全く効果ない
コメント2件

758
デフォルトの名無しさん (ワッチョイ ef6c-i8cA)[sage]   投稿日:2017/03/20 13:05:30  ID:ZNh1GxS+0.n(2)
>757
いつか実装して確かめてみようとは思うんだけど
・数学的に簡略化が可能な場合は当然事前にできるだけ簡略化する
・計算途中の値もよく使うので=が出てきて評価が頻繁
な場合、あんまり効果なさそうだなあというところで二の足
コメント4件

759
デフォルトの名無しさん (ワッチョイ 5319-v8EU)[sage]   投稿日:2017/03/20 13:17:35  ID:hOjZeIpo0.n(2)
expression templateってコンビネーターのことじゃね?

760
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/20 13:29:36  ID:o1Hy6TV3M.n(4)
>758
計算途中の値もよく使うって、それ途中と違うがな
函数という考え方について、もう少し勉強した方がいい

761
デフォルトの名無しさん (ワッチョイ f33c-u6wT)[sage]   投稿日:2017/03/20 14:06:32  ID:OlwkB3mR0.n(12)
>758
あーまだ実装してないのね
自分の実用するコード(4次元までのベクトル、4x4までの行列)だと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使えないので注意
コメント2件

762
デフォルトの名無しさん (ワッチョイ f33c-u6wT)[sage]   投稿日:2017/03/20 14:14:14  ID:OlwkB3mR0.n(12)
訂正
Xxがy, zに干渉するような計算
○各要素を複数回評価するような計算
a = cross(b, c);
なら大丈夫だけど
a = cross(b, c) * d;
とかやると乗算の回数が増えるし計算結果が狂ったりする
コメント2件

763
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/20 14:25:46  ID:o1Hy6TV3M.n(4)
>762
横から補足
ublasなんかは複数回評価を前提としてて、そのまま使うと遅い
なので、noaliasというものが用意されてる

764
デフォルトの名無しさん (ワッチョイ cf6b-8YZg)[sage]   投稿日:2017/03/20 16:40:52  ID:d0t0+ba+0.n(6)
なるほど
よくわからん

765
デフォルトの名無しさん (ワッチョイ bf0b-8YZg)[sage]   投稿日:2017/03/20 17:28:44  ID:lZKrgjvb0.n(2)
結論
expression templateは科学系数値計算にしか効果はない
そういうのは既にライブラリーが存在する
よって自分でexpression templateを実装する必要に駆られる場面はほぼない
コメント2件

766
デフォルトの名無しさん (ワッチョイ f33c-u6wT)[sage]   投稿日:2017/03/20 18:08:39  ID:OlwkB3mR0.n(12)
>765
>科学系数値計算にしか効果はない
ではなくて、「速度が必要な場面でも、実装する優先度は低い」ならわかる

自分が以前調べた限りでは、ETとSIMDを同時に使ってるものは無かった
はっきり言って、速度が重要な局面かつSIMDが使えるマシンなのにまずSIMDを使わないというのは有り得ない
けなすわけではないが、SIMD命令がある一般的なマシンにおける数値計算には、今あるETのライブラリはまともに使えんのじゃないか
ていうか科学計算ならETより、SIMDやGPGPUを使う方が先

自分の場合はゲームでの計算なんで、CPUかつヒープじゃなくスタックを使う必要があるので
その時点でuBlasやBlitzは選択肢から外れるんだわ

767
デフォルトの名無しさん (ワッチョイ 7302-12+v)[sage]   投稿日:2017/03/20 18:31:45  ID:E6+3UOyx0.n(2)
あらゆる面で最適化したオープンソースな数値計算ライブラリを作るような人なんて世界でもほぼ居ないだろ
数学と物理や化学とC++での数値計算に関する造詣が深くて、処理系やユースケースを想定して形にできなければいけない
金にならないし趣味にするには地味すぎる
論文が書ければいいけどライブラリ開発自体をメインにすることはできるのかどうかよくわからんし

768
デフォルトの名無しさん (ワッチョイ f33c-u6wT)[sage]   投稿日:2017/03/20 19:35:01  ID:OlwkB3mR0.n(12)
そういうライブラリはかなり難しいだろうね・・・
だから結局自分で作る必要があるんだわ(ETは労力やバグ回避がアレだけど、効果が無いわけではない)

769
デフォルトの名無しさん (ワッチョイ cf6b-8YZg)[sage]   投稿日:2017/03/20 19:39:51  ID:d0t0+ba+0.n(6)
お前らの作成したライブラリを配布したらさいつよじゃね?

770
デフォルトの名無しさん (ワッチョイ 537b-gO1F)[]   投稿日:2017/03/20 19:44:06  ID:+YHRRlIg0.n(2)
Eigenがexpression templateもSIMDも実装してたと思うけど
コメント2件

771
デフォルトの名無しさん (ワッチョイ cf6b-8YZg)[sage]   投稿日:2017/03/20 19:47:48  ID:d0t0+ba+0.n(6)
お前らってコード書くとき明示的にスコープ使う??
コメント2件

772
デフォルトの名無しさん (ワッチョイ f33c-u6wT)[sage]   投稿日:2017/03/20 20:52:21  ID:OlwkB3mR0.n(12)
>770
あーー、そういえばあった・・・・w
すまん大嘘こいてた

https://ja.wikipedia.org/wiki/C%2B%2B_AMP
ちなみにマイナーながらこんなんもある

>771
stdならstd::つけて、それ以外ならusing宣言でよく使うやつだけ取り込むかなぁ

773
デフォルトの名無しさん (ワッチョイ ef8c-h49x)[]   投稿日:2017/03/21 00:17:02  ID:ooaEszBV0.n(4)
Expression templateって右辺値参照ある今でも必要なの?

774
デフォルトの名無しさん (ワッチョイ a38a-GEdz)[sage]   投稿日:2017/03/21 00:34:26  ID:WRmS2jUL0.n(2)
式テンプレートって遅延評価やそれを利用した最適化が主な目的だとおもうのだけど、それがなんで右辺値参照があるからいらなくなるの?

775
デフォルトの名無しさん (ワッチョイ ef8c-h49x)[]   投稿日:2017/03/21 00:42:40  ID:ooaEszBV0.n(4)
a = b + c + d の形式の時のコピー数減らすのが式テンプレートの主な功績だとしたら右辺値参照で同じように減らせると思ったんだけど、実際それ以上の最適化ってされてるの?
コメント4件

776
デフォルトの名無しさん (ワッチョイ 7302-12+v)[sage]   投稿日:2017/03/21 00:59:40  ID:/NjqKBkb0.n(4)
アセンブラで書くのが一番速い

777
デフォルトの名無しさん (ワッチョイ f3e7-ajdi)[sage]   投稿日:2017/03/21 01:12:11  ID:3hTmI8gX0.n(2)
KoDaIJiN

778
デフォルトの名無しさん (ワッチョイ bf3a-lir9)[sage]   投稿日:2017/03/21 01:44:12  ID:2crVP7Yr0.n(2)
石を焼いてしまうのが、一番早い気がする
コメント2件

779
デフォルトの名無しさん (ワッチョイ f33c-u6wT)[sage]   投稿日:2017/03/21 02:23:03  ID:wE8b83TD0.n(10)
>775
ヒープに確保するようなクラスの演算なら、コピーのコストはそうだね(推測だけど
ただし>761に書いたようなレジスタ効率(a.f[0]の代入が終わったらストアして以降f[0]を無視できる)もある
コメント2件

780
デフォルトの名無しさん (ワッチョイ 33e6-8FG5)[]   投稿日:2017/03/21 03:29:49  ID:+DL1LwCN0.n(2)
>778
それ速いけど早くない

781
デフォルトの名無しさん (ササクッテロレ Sp97-GEdz)[sage]   投稿日:2017/03/21 11:41:46  ID:Ub2NtCH4p.n(2)
>775
たとえばeigenなんかは必要な要素だけ計算されるような工夫があるようだけど

782
デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]   投稿日:2017/03/21 12:20:28  ID:ovrpZx5v0.n(12)
全く理解してないし、今日初めて知ったんだけど

遅延評価といっても所詮静的なものだから
こんなものはコンパイラが最適化を超がんばれ、って思う
たぶん事の本質は演算の順番を変えることで
(縦に計算するか、横に計算するか、みたいな?)
最適化がかかりやすくなったり速く動いたりできるかもね
って事なんじゃないかと俺は勝手に思った
ただ愚直に演算の順番を変えると記述性に問題が出てくるから
それを防ぐテクニックなのかなーと
よくわからないけど

783
デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]   投稿日:2017/03/21 12:35:09  ID:bH1u/9cj0.n(12)
Expression templateの一時変数問題は
ムーブコンストラクターで解決された問題だよね。

784
デフォルトの名無しさん (ワッチョイ 737a-12+v)[sage]   投稿日:2017/03/21 12:36:27  ID:/NjqKBkb0.n(4)
プログラムが扱いやすいように初期値を設定してやるのは人間の仕事

785
デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]   投稿日:2017/03/21 12:54:01  ID:ovrpZx5v0.n(12)
全く理解していない俺が言うのもなんだけど
ムーブコンストラクタは関係ないと思う
演算順序を変えないことには何処かに一時的に計算結果を保存しておかないと
ダメなことには変わりないのでは?

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使うし、要素数の多い配列はループ回すし
コメント2件

786
デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]   投稿日:2017/03/21 13:04:15  ID:bH1u/9cj0.n(12)
a[0] += b[0];
a[0] += b[1];
c[0] += a[0];
c[1] += a[1];
r[0]=c[0]
r[1]=c[1]
ムーブコンストラクターを使うとこうなる

787
デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]   投稿日:2017/03/21 13:13:33  ID:ovrpZx5v0.n(12)
やだー
それ、aとcが破壊されているじゃないですかーー
r=a+b+c; と同等のコードになりませんよ?
あなたのは a+=b; c+=a; r=c;ですが
そもそも「+=」で破壊していく方針なら、何にも新しくコンストラクトしないんだから
これまたムーブコンストラクタ関係ないじゃないですかーー
どこからムーブコンストラクタが出てくるんですか?
もっとC++勉強してくださいよー

788
デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]   投稿日:2017/03/21 13:23:51  ID:ovrpZx5v0.n(12)
r = a + b + c を計算しようと思うと、これはr = (a + b) + c に分解されるだろうから
根本的に(a + b)の結果を保存しておく一時変数がいる
レジスタに配置されるかもしれないとかそういうことはおいておいて
とりあえず一時変数がいる
で、a,b,c,rがベクトルだった場合、一時変数もベクトルになる
これはあまり美味しくない場合がある、ということで
各要素にばらして要素ごとにr = (a + b) + cを実行する
そうすると一時変数はスカラーになる
しかし記述性に難が出るので、それを何とかしようとした

↑これが基本的な要点かと

789
デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]   投稿日:2017/03/21 13:29:00  ID:bH1u/9cj0.n(12)
間違えた
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個だ
コメント2件

790
デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]   投稿日:2017/03/21 13:30:57  ID:bH1u/9cj0.n(12)
また間違えた、aかbが右辺値なら0個だ

791
デフォルトの名無しさん (ワッチョイ f33c-u6wT)[sage]   投稿日:2017/03/21 13:32:10  ID:wE8b83TD0.n(10)
>全く理解していない俺が言うのもなんだけど
どこが全く理解していないのかと小一時間w

ただムーブ代入演算子やコンストラクタがあれば、”ヒープに要素を確保するクラス”限定で
ヒープ確保や代入命令のコストがポインタのすげ替えだけで済むのはある(>779

でもスタックに確保するような固定長のベクトルとかだと、>785の通り代入命令の回数が
バカにならないので結構差が出てくる
「C++の演算子オーバーロードは遅い」なんて言われることがあるけど、その理由がこれだと思う
演算子オーバーロードが遅いんではなく、計算結果を戻り値で返す関数が遅い
(これは計算結果を保証するためなのかどうしようもないんだろうけど)

なのでそれを回避するために算術代入使おう、という論もある

ただし遅いと言ってもFortranとC/C++の差のレベルなんでアレだけど・・・・
多分愚直な演算子で書いても、全てインライン展開されれば最適化でベストなコードになると思うんだけど・・・(誰か知ってる人頼む

792
デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]   投稿日:2017/03/21 13:32:18  ID:bH1u/9cj0.n(12)
もう一個訂正tmp =temp,tem,tmp

793
デフォルトの名無しさん (ワッチョイ f33c-u6wT)[sage]   投稿日:2017/03/21 13:37:29  ID:wE8b83TD0.n(10)
>789
右辺値についてだいぶ誤解してないか?
ムーブコンストラクタ/代入演算子は引数が右辺値である場合の実装を分けられるだけやで

794
デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]   投稿日:2017/03/21 13:41:08  ID:bH1u/9cj0.n(12)
実際に
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回に計算するわけじゃないよ

795
デフォルトの名無しさん (ワッチョイ f33c-u6wT)[sage]   投稿日:2017/03/21 13:41:36  ID:wE8b83TD0.n(10)
訂正
Xヒープ確保や代入命令のコストがポインタのすげ替えだけで済む
○最後の代入演算子で発生するヒープ確保や代入命令のコストがポインタのすげ替えだけで済む
a, b, cの演算結果は依然としてコストあるね

796
デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]   投稿日:2017/03/21 15:17:50  ID:ovrpZx5v0.n(12)
そーゆーことでしょうな
むしろ内部でstd::vectorとか使ってベクトル表現している方が
要素ごとにバラして計算するメリットが出るだろうね
計算途中の一時変数がstd::vectorになるのとスカラになるのとでは
全然違うというか話にならないからね

あと
> ○最後の代入演算子で発生するヒープ確保や代入命令のコストがポインタのすげ替えだけで済む
だけど、たぶんだけどstruct vec{ int x,y,z; };みたいなやつだと
最後の代入はコンパイラの最適化で消えてなくなるだろうから気にしなくてもよいはず
C++にmoveホゲホゲが出来る以前からあった古来からの基本的な最適化だったはず
まぁoperator=を定義して余計なことしてたらその限りじゃないかもしれんが
コメント2件

797
デフォルトの名無しさん (スプッッ Sddf-8YZg)[sage]   投稿日:2017/03/21 16:21:56  ID:rDA5FTfNd.n(2)
umdhの結果でleak検索して出てこなかったらメモリリークしていないって判断して問題ない??

798
デフォルトの名無しさん (ワッチョイ f33c-u6wT)[sage]   投稿日:2017/03/21 18:56:32  ID:wE8b83TD0.n(10)
>796
RVOのことかな?そういえば完全に忘れてた・・・
確かoperator =を定義していようが副作用があろうが、コンパイラは勝手に
コンストラクタや代入演算子の呼び出しを減らしていい、って感じだったと思うんだけど
もしかして同じ機能のコンストラクタがあるならoperator =は無駄??

799
デフォルトの名無しさん (ワッチョイ bf90-tpgq)[sage]   投稿日:2017/03/21 22:33:32  ID:QxtkUNUp0.n(4)
map<T,U> map;
とか
for (auto pair : map)
というのをつい手癖でやってしまうのですが
こういう名前の付け方はやめたほうがいいですか?
コメント4件

800
デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]   投稿日:2017/03/21 22:47:54  ID:ovrpZx5v0.n(12)
大前提としてチームで開発しているならチームのリーダーに質問してください

自分一人で書いてるなら変数名なんかなんでもよいよ
自分で書いたコードでも一年たったら他人が書いたコードのように読めない
っていう人もいるけど、実際には普通に読めるから変数名は思い付きのテキトーでよい
型名をもじってそのまま変数名にするってのは俺もよくやる

実際変数名は本当に何でもよくて
なぜならスコープが狭かったり、クラスのプライベートメンバだったりして
ごちゃごちゃになったりしないから
問題はクラス名と関数名で、こちらはいつも悩む
コメント2件

801
デフォルトの名無しさん (ワッチョイ bfcc-UNkP)[sage]   投稿日:2017/03/21 22:53:34  ID:BqDV4BtF0.n(2)
やめたほうがいい
あとあと混乱するから

802
デフォルトの名無しさん (スップ Sddf-Ma5U)[sage]   投稿日:2017/03/21 22:53:51  ID:chOyeLILd.n(2)
あとはインタフェースの一部としての引数名かな。
総じて.cppファイルにだけ書かれる名前はテキトー

803
デフォルトの名無しさん (ワンミングク MM5f-W3uL)[sage]   投稿日:2017/03/21 23:38:01  ID:XhVovTkQM.n(2)
>799
mapはデータ構造だろ
変数名はそれが何を格納してるかを表してなきゃダメだと思うけど
コメント2件

804
デフォルトの名無しさん (ワッチョイ 03b4-w0Gz)[sage]   投稿日:2017/03/21 23:45:02  ID:5oluTi0x0.n(2)
>803は健常者

805
デフォルトの名無しさん (ワッチョイ bf90-tpgq)[sage]   投稿日:2017/03/21 23:57:16  ID:QxtkUNUp0.n(4)
>800-804
ありがとうございます。くだらぬ質問でしたね、すみません
とりあえず狭いスコープの一時変数用途では
map<T,U> m;
for (auto p : m)
みたいにしておきます

806
デフォルトの名無しさん (ワッチョイ 3fd1-q0jq)[sage]   投稿日:2017/03/21 23:59:23  ID:eniBTwk40.n(2)
やめた方がいいですか?なんて聞いてる時点で本人の中でも既に答えは出ているのでは

807
デフォルトの名無しさん (ワッチョイ 737a-12+v)[sage]   投稿日:2017/03/22 00:10:41  ID:kq8u5G9J0.n(4)
使い捨てならアンダーバー付けろ

808
デフォルトの名無しさん (ドコグロ MM57-3fK7)[sage]   投稿日:2017/03/22 06:47:53  ID:svIchgSfM.n(4)
>799
どちらもスコープが狭ければいいと思う
特に pair の方は for 文でよく使われる i みたいなもんだから俺もよくやる
map の方はたいていスコープも広いし中身を表す名前にした方が分かりやすいと思う
型名と同じ名前はどうよ?
って話なら俺個人的には問題ないでしょって思うけどそう思わない人の方が多いような気がする

809
デフォルトの名無しさん (ワッチョイ f384-ajdi)[sage]   投稿日:2017/03/22 07:01:10  ID:2VeNeFOl0.n(2)
for(auto&o : c)て感じでやってるなぁ。
oはobjectのo。

810
デフォルトの名無しさん (スップ Sddf-rwfr)[]   投稿日:2017/03/22 07:36:14  ID:BzP+Rc7Ad.n(2)
変数名に型情報をのせるなマイクロソフトじゃあるまいし

811
デフォルトの名無しさん (オッペケ Sr97-w0Gz)[sage]   投稿日:2017/03/22 07:43:37  ID:l4RQ+gMQr.n(2)
別にのせてもいいけど、型でしかその概念を捉えられない人にマトモな設計は難しい
int intTypeVar=-1;

812
デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]   投稿日:2017/03/22 08:29:35  ID:IQHE94uk0.n(4)
変数名に型を載せないほうがカッコいいと思ってるの?
それって逆にカッコ悪いと思う。

813
デフォルトの名無しさん (スプッッ Sddf-8YZg)[sage]   投稿日:2017/03/22 08:42:36  ID:rgAwiSmKd.n(4)
変数名に型情報いるか?って話だな
そんな情報載せようとするぐらいなら変数名や関数名に拘れ

814
デフォルトの名無しさん (スプッッ Sddf-rwfr)[]   投稿日:2017/03/22 08:52:48  ID:gPjbW80sd.n(2)
メンバのm_
と同じくらい無意味というか害悪
コメント2件

815
デフォルトの名無しさん (ワッチョイ 53bf-tW1y)[]   投稿日:2017/03/22 08:59:06  ID:iUoKjy2X0.n(2)
>814
m_ は好きだけどな。
手で握られてる感じが。

816
デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]   投稿日:2017/03/22 09:01:02  ID:IQHE94uk0.n(4)
違いの分かる男 (スプッッ Sddf-rwfr)

817
デフォルトの名無しさん (スプッッ Sddf-8YZg)[sage]   投稿日:2017/03/22 12:11:09  ID:rgAwiSmKd.n(4)
フルページヒープしようとしてるがうまくつかえんぞなんだこれ
gflag設定して対象ファイル実行するだけでなんとかなるんちゃうのか

818
デフォルトの名無しさん (ワッチョイ 3392-8YZg)[sage]   投稿日:2017/03/22 18:09:01  ID:dqBQr4XV0.n(16)
メモリ管理ってどうやってしてる?
テスト設計で必要なのだが調べても情報が少なくて使い方もあやふやで困ってる
自分のコードならまだしも人のコードだから品質保証するために必要なので困ってる助けて
コメント2件

819
デフォルトの名無しさん (ドコグロ MM1f-vDuW)[sage]   投稿日:2017/03/22 19:28:52  ID:6SOT+CpTM.n(2)
c++の場合、設計段階できっちりメモリ管理しないと死ぬ。
テスト段階だとどうだろ?どんなツールがおすすめかね?
コメント2件

820
デフォルトの名無しさん (ワッチョイ 3392-8YZg)[sage]   投稿日:2017/03/22 19:40:51  ID:dqBQr4XV0.n(16)
>819
昔からのコードだから俺にはなんとも言えないんだなぁ...
タスクマネージャー開いて無限ループさせてたら地味にメモリ増えていくからたぶんリークなりメモリ破壊なりなんかしてそうなんだ
コメント2件

821
デフォルトの名無しさん (ワッチョイ f3c8-tpgq)[sage]   投稿日:2017/03/22 19:50:51  ID:E1Td5RgZ0.n(8)
>820
どこでリークが発生していて、どこでfreeするべきかをツールで発見したいって事?
そりゃ無理だろ。

それが出来ないからGC言語に逃げているわけだし、
それが出来ればRAIIすらゴミになるでしょ。
コメント2件

822
デフォルトの名無しさん (ワッチョイ cf1f-9jmm)[]   投稿日:2017/03/22 19:54:38  ID:0C1B3gPp0.n(8)
メモリ管理はPHPとかのほうがムズい。
設計時でもコード書くときでも実動時でもメモリ消費を制御するのはムズい。正常動作でも想定外が起こる。
消費量が判ったところで実働時に減らすことはムズい。
"php  メモリ 画面 真っ白 メモリ"とか定番ネタ

823
デフォルトの名無しさん (ワッチョイ 3392-8YZg)[sage]   投稿日:2017/03/22 20:09:07  ID:dqBQr4XV0.n(16)
>821
いやそこまでは出来なくても良い
ただ品質として確保したいだけ
リークがあるかないかを判断できればおけおけ

824
デフォルトの名無しさん (ドコグロ MM57-3fK7)[sage]   投稿日:2017/03/22 20:13:28  ID:svIchgSfM.n(4)
>818
環境がわからんからアドバイスのしょうがないんだが
ソースがあってビルドできるならとりあえず valgrind とかで調べたら?
http://valgrind.org/
コメント2件

825
デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]   投稿日:2017/03/22 20:15:04  ID:i8R0t7KQ0.n(6)
それならプログラム終了時にすべてのメモリが解放されたかチェックすればOK

826
デフォルトの名無しさん (ワッチョイ 3392-8YZg)[sage]   投稿日:2017/03/22 20:15:57  ID:dqBQr4XV0.n(16)
>824
ふぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉまた英語か...

環境と言えるのはなんだろ
visualstudio2008
Windows7
テストしたいのはdll
コメント4件

827
デフォルトの名無しさん (ワッチョイ bf67-lir9)[sage]   投稿日:2017/03/22 20:25:44  ID:rzLKjPpj0.n(6)
>826
昔だったら、ぴゅりふぁい っていうツールがあったけど。
コメント2件

828
デフォルトの名無しさん (ワッチョイ 737a-12+v)[sage]   投稿日:2017/03/22 20:26:09  ID:kq8u5G9J0.n(4)
まともな開発環境なら名前以外から変数のスコープと型情報くらい分かるはずだよね

829
デフォルトの名無しさん (ワッチョイ f3c8-tpgq)[sage]   投稿日:2017/03/22 20:26:35  ID:E1Td5RgZ0.n(8)
>826
> テストしたいのはdll
それって単にdllの呼び方間違えているだけじゃね?
dll呼んだ直後で片っ端からfreeしてみたら直るんじゃね?

なおVS2008にはプロファイラが付いてないが、最新VSには付いていたはず。
(俺は使ったこと無いけど)
だからとりあえず最新VSでコンパイル通るか試して、そっちでデバッグするのも手だよ。
コメント2件

830
デフォルトの名無しさん (ワッチョイ cf1f-9jmm)[]   投稿日:2017/03/22 20:31:15  ID:0C1B3gPp0.n(8)
メモリ確保をすべて乗っ取って動作させてログ吐き出すやつでいいのでは?

831
デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sabe]   投稿日:2017/03/22 20:35:57  ID:i8R0t7KQ0.n(6)
お前ら意地悪だな
VisualStudioならプログラム終了時にすべてのメモリが解放されたか
チェックしてくれるDebug版お便利mallocがあるだろ
_CrtSetDbgFlag
で検索してみるとよい
あと、ヒープ破壊を心配しているようだが
Debug版mallocにはヒープ破壊検出機能もついてる
もしオーバーランしていたりしたらfree時に怒られる
コメント2件

832
デフォルトの名無しさん (ワッチョイ cf1f-9jmm)[]   投稿日:2017/03/22 20:36:51  ID:0C1B3gPp0.n(8)
これとか

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)をそれぞれ置き換える作業だけです。
http://linuxc.info/memory/gc/
コメント2件

833
デフォルトの名無しさん (ワッチョイ 3392-8YZg)[sage]   投稿日:2017/03/22 20:37:32  ID:dqBQr4XV0.n(16)
>827
可愛らしいな聞いたことない

>829
dllの呼び方間違えてるとは?
呼び出すドライバについては片っ端からのfreeはちゃんとしてあるぜ
新しい環境については会社での統一環境だから移行できんな...

834
デフォルトの名無しさん (ワッチョイ 3392-8YZg)[sage]   投稿日:2017/03/22 20:41:03  ID:dqBQr4XV0.n(16)
>831
ちょっと調べてみる
一応確認だけどもdll呼び出すドライバの最後にちょろっとやればええんかな

>832
なんぞこれ

835
デフォルトの名無しさん (ワッチョイ bf67-lir9)[sage]   投稿日:2017/03/22 20:41:15  ID:rzLKjPpj0.n(6)
dllのソースもってるのかな?
コメント2件

836
デフォルトの名無しさん (ワッチョイ 336e-8FG5)[sage]   投稿日:2017/03/22 20:45:10  ID:i8R0t7KQ0.n(6)
ああ、dllのソースがないとだめだよ
dllのソースがないのにメモリリークが有るか無いかしらべるのは
さすがにムリゲーだよ

837
デフォルトの名無しさん (ワッチョイ 3392-8YZg)[sage]   投稿日:2017/03/22 20:45:12  ID:dqBQr4XV0.n(16)
>835
持ってる
むしろそのdllを今書き換えてるところかな
んでテストする段階で悩んでるところです
コメント2件

838
デフォルトの名無しさん (ワッチョイ f3c8-tpgq)[sage]   投稿日:2017/03/22 21:00:54  ID:E1Td5RgZ0.n(8)
>837
とりあえず仮定を確認しよう。
1. dll以外の部分では今のところリークしていない
2. dllと組み合わせるとリークする
んだよな?
そして書き換えているのは本体ではなく、dllなのか?
(これは俺の想定と逆だった)

だったらお前がバグ入れただけじゃん。
コメント2件

839
デフォルトの名無しさん (ワッチョイ 3392-8YZg)[sage]   投稿日:2017/03/22 21:06:53  ID:dqBQr4XV0.n(16)
>838
1 2 両方とも正しい
んでもって俺が加えたのは型を修正しただけだからたぶん関係ない
と言うか関係ない
おそらく以前からある現象で以前のdllを利用しても同じ感じになる
2については組み合わせるとと言うよりテストのための実行ファイルを適当に作っただけかな

今回触れてない部分が大半なんだけどバージョンアップするから
メモリ破壊なりも調べる観点が必用で
umdhやらcrtデバッグやらページヒープやら調べてるんだけど...ってところ
コメント4件

840
デフォルトの名無しさん (ワッチョイ cf1f-9jmm)[]   投稿日:2017/03/22 21:34:34  ID:0C1B3gPp0.n(8)
Boehm GCはオールCのはずでwindowsでもその他でも動作するし昔から定番だったはず。
だれもこれだしてないが・・

841
デフォルトの名無しさん (ワッチョイ 5375-gO1F)[]   投稿日:2017/03/22 21:38:38  ID:sj71GTBZ0.n(2)
Linux上でWine+valgrindやろ
やったこと無いけど。

842
デフォルトの名無しさん (ワッチョイ f3c8-tpgq)[sage]   投稿日:2017/03/22 22:27:39  ID:E1Td5RgZ0.n(8)
>839
それは業務でやってるんだろ?
だったらまず、「以前の本体と以前のdllの組み合わせで、今のテスト」を行って、
リークしているようなら上司にどうするか聞いた方がいい。
このリークを直せというのは確実に手こずる。
そして逆に言えば、今それで出荷出来ているんならそれでも使い物になるんだよ。
だからリークがある状態で新機能付けて出荷も出来るはず。

ちなみに64bitアプリか?だったらリークはとりあえず無視する手もあるぞ。
コメント2件

843
デフォルトの名無しさん (ワッチョイ bf67-lir9)[sage]   投稿日:2017/03/22 23:03:40  ID:rzLKjPpj0.n(6)
期末のこの時期に、メモリリーク。。こわい。。
UMDH調べてるなら、方向はいいとおもうけど。
上に、あげといた方がいいだろな。
時間食うかもしれん。
メモリ壊してると、動作不定になるからな。

844
デフォルトの名無しさん (ワッチョイ 63b7-rEFK)[sage]   投稿日:2017/03/23 00:17:11  ID:oAoB0YCS0.n(2)
https://vld.codeplex.com
なんかで調べてたときはこれ使ってたな。
めちゃくちゃ遅くなるけど。
コメント2件

845
デフォルトの名無しさん (ブーイモ MM4a-TrMc)[sage]   投稿日:2017/03/23 03:06:19  ID:52JJY4k+M.n(2)
>839
バグ修正は「おそらく」「たぶん」とかいう自信のない根拠を持たずに
チマチマ地道に調べて積み重ねると早く解決するよ
コメント2件

846
デフォルトの名無しさん (ワッチョイ 9375-iMo4)[]   投稿日:2017/03/23 03:37:19  ID:mYb1ScGd0.n(6)
Linuxでも動かせるならvalgrindが最も簡単かつ実効速度以外最強なんだけどね。
Windowsのメモリエラー検出ツールはコレっていうのがない。

847
デフォルトの名無しさん (ドコグロ MMe2-hXJm)[sage]   投稿日:2017/03/23 06:43:06  ID:HovpjxiMM.n(4)
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.)
ということなのね、残念

848
デフォルトの名無しさん (スプッッ Sde3-2Cpe)[sage]   投稿日:2017/03/23 07:14:51  ID:ne+fmuh4d.n(10)
>842
後だしばかりですまんが32→64bitアプリへの移行中
64bitにしたさいにメモリ破壊なりがないかを確認するためにumdhやらを使おうってなってる
あくまでリークしてるかも?ってのは俺がタスクマネージャー見ただけでの予測である
コメント2件

849
デフォルトの名無しさん (スプッッ Sde3-2Cpe)[sage]   投稿日:2017/03/23 07:19:49  ID:ne+fmuh4d.n(10)
おお...途中で送ってしまった

>845
それはわかってるんだけどどうにしろ
移行した影響があるかないかも含めて確認するために必要なこととしてツールで保証したいってのがある
んで調査中でオススメのないかな?←今ここ

ページヒープってのを見付けたんだがあからさまにメモリ破壊してるやつでも検出できないしこれ使ってる人居たら何に対応できるか教えてくれんか....
コメント2件

850
デフォルトの名無しさん (ワッチョイ fe1f-sIi0)[]   投稿日:2017/03/23 08:52:11  ID:UkDqG0iw0.n(2)
ソースコードがあるなら汎用的なBoehm GCでいいだろうと
コメント4件

851
デフォルトの名無しさん (ワッチョイ 9375-iMo4)[]   投稿日:2017/03/23 09:19:11  ID:mYb1ScGd0.n(6)
俺はつかったことないけど
http://dynamorio.org
とか
金出せるなら
Insure++ってやつとか


>850
メモリリークしか検出出来ないでしょ

852
デフォルトの名無しさん (ワッチョイ aa67-QN42)[sage]   投稿日:2017/03/23 09:23:00  ID:63eMbsST0.n(8)
>849
ツールで保証したい
っていうなら、>850が正しいかと。。

853
デフォルトの名無しさん (ワッチョイ 2b6e-72yv)[sage]   投稿日:2017/03/23 13:57:08  ID:FwJwtm3q0.n(16)
ツールでメモリリークがないことを保証したいってだけなら
VC++のランタイム付属のやつで十分だろ
メモリ破壊が有ったかどうかも調べてくれるし
こういったものが標準でついていて
みんな空気のように標準的に使っているから
実際問題メモリリークはめったに起きないんだよ
もしあったらプログラム終了時に教えてくれるからね
だからメモリリークに対してはそんなに騒がれない
付属のやつで十分な品質を保証できるから
たまーにしか通らないパスでメモリリークが発生していた場合など
メモリリークの発見が遅れることはあるけど
まぁ通ってないパスがある時点でテストが十分でないということだし
一か月に一回ほどの頻度でメモリリークするぐらいは別に問題ないという考え方もある
・・・っていうのもあって、まぁ付属の検出ツールで大体の品質は出る

それよりはハンドルやGDIなどのOSリソースのリークが怖くて
こちらは如何なるツールを使っても検出不可能で
タスクマネージャなどで変にハンドルが増えてないかなど
地道に調べるしか方法がない
だからハンドルなどは生で使わずにクラスにラップして使うのが通常だが
題意のDLLがどういう風になっているかは俺は知らん
もしリークが発生してしまったらメモリリークより深刻な事態になる
メモリよりもOSのリソースの方が貴重で制限が厳しいから
むしろこっちのほうを気にすればよいのにと思ってしまう
メモリリーク対策などVC++付属のやつに任せてしまってさ
コメント2件

854
デフォルトの名無しさん (ワッチョイ be6b-72yv)[]   投稿日:2017/03/23 14:02:35  ID:xx3Et9SY0.n(14)
ツールに依存しきって分岐網羅とかやらなくなってるとしたら
それはツールによって腐ったとしか言いようがない

855
デフォルトの名無しさん (ワッチョイ 2b6e-72yv)[sage]   投稿日:2017/03/23 14:11:13  ID:FwJwtm3q0.n(16)
ちなみにリソースリークが発生していて
結果としてメモリ使用量がどんどん増えていくってのは有りうるよ
タスクマネージャで調べたら使用メモリが増えていってる感じだったってことだけど
それだけだと何が原因か、はたまた問題ないのか、難しいよ
メモリ使用量を見るだけじゃダメで、ハンドル使用量etcも確認しないとね
これはマナーとしてWindowsソフト開発者は絶対するよ
リソースリークなんかしてたらむちゃくちゃ恥ずかしいし迷惑だから
あと、リソースリークはメモリリーク検出ツールでは検出できないからね
それから、もしリソースリークが発生していることが分かっても
どこで発生しているか突き止めるのはメモリリーク以上に難しい、とは言っておく

856
デフォルトの名無しさん (ワッチョイ 2b6e-72yv)[sage]   投稿日:2017/03/23 14:26:25  ID:FwJwtm3q0.n(16)
テストを走らせるときにVC++のメモリリーク検出機能をONにしておくと
テスト終了時にメモリリークが発生したかどうか知らせてくれるというだけで
メモリリーク検出ツールを使うことと
テストの網羅が不十分なこととは関連性がないよ
メモリリーク検出ツールを使ったから、何か油断して
テストの網羅が不十分になるっていう理論の展開は
一般的におこらないというか、無理がある
むしろテストを網羅しないとメモリリークを検出できないわけで

857
デフォルトの名無しさん (ワッチョイ 9375-iMo4)[]   投稿日:2017/03/23 14:28:17  ID:mYb1ScGd0.n(6)
valgrindではunixシステムの主要リソースであるfile descriptorのリークも検出出来るけどな

858
デフォルトの名無しさん (ワッチョイ be6b-72yv)[]   投稿日:2017/03/23 14:29:11  ID:xx3Et9SY0.n(14)
おまえさっき、こう言ってたじゃん
> たまーにしか通らないパスでメモリリークが発生していた場合など
> メモリリークの発見が遅れることはあるけど

859
デフォルトの名無しさん (ワッチョイ 2b6e-72yv)[sage]   投稿日:2017/03/23 14:43:08  ID:FwJwtm3q0.n(16)
それはテストが不十分ゆえに発生した問題であって
メモリリーク検出ツールを使った事とは全く関係がない

>まぁ通ってないパスがある時点でテストが十分でないということだし

と書いておいただろ
コメント2件

860
デフォルトの名無しさん (スプッッ Sdea-QN42)[sage]   投稿日:2017/03/23 15:03:37  ID:ixe949V5d.n(4)
無いことを保証するってのは、こわい文言だね。
dll内で、メモリ確保、解放してるところを、共通の関数に置き換えて、その上で、gcにおきかえかなぁ。

861
デフォルトの名無しさん (ワッチョイ be6b-72yv)[]   投稿日:2017/03/23 15:45:13  ID:xx3Et9SY0.n(14)
>859
関係大ありだよ
通ってないパスのバグが検出できないツールを使っているのに
たまーにしか通らないパスをテストしないのは
ツールを過信してる証拠だろうが

862
デフォルトの名無しさん (ワッチョイ 2b6e-72yv)[sage]   投稿日:2017/03/23 16:33:59  ID:FwJwtm3q0.n(16)
いや、意味不明なんだが
通ってないパスのメモリリークが検出できないのは当たり前で
そんな変な勘違いする人はいないし
テストの網羅度が下がる理由はもっと別要因の別問題の別観点であり
メモリリーク検出ツールを過信したからとか意味不明
「俺はメモリリーク検出ツールを使っているからテストの網羅度が低くてもOKだぜ」
ってシナリオがもうありえないっつーか、前提がおかしいだろ
メモリリークしかテストしないかのような前提はおかしい
メモリリークさえなければ出力が間違っててもOK、とはならないだろ
となれば当然テストするだろ、リーク検出ツールの有無に関係なく
むしろ、リークの有る無しより、出力のほうが大事だろ、そっち優先
そのためのテストであり、パスの網羅度が高ければ結果的にリーク検出度も高いというだけ
どのぐらい完璧なテストをするか、すべてのパスを網羅できるか、は
メモリリーク検出ツールを使うかどうかとは関係ない、また別の現実問題

863
デフォルトの名無しさん (スプッッ Sdea-QN42)[sage]   投稿日:2017/03/23 16:44:15  ID:ixe949V5d.n(4)
お、おまいら、そうおこるなよ。
>849
から、つづきもないし、上手く行っていることを祈ろう。
コメント2件

864
デフォルトの名無しさん (ワッチョイ be6b-72yv)[]   投稿日:2017/03/23 17:00:53  ID:xx3Et9SY0.n(14)
> 通ってないパスのメモリリークが検出できないのは当たり前で

だったらツールでは防げないバグの話にツールを持ち出すこと自体が大間違いだな

865
デフォルトの名無しさん (ワッチョイ 2b6e-72yv)[sage]   投稿日:2017/03/23 17:33:17  ID:FwJwtm3q0.n(16)
ツールで防げないバグってのは
一度も通ったことのないパスのメモリリークの事を指しているんだろうけど
それをどうにかしてほしいって話は無かったはずだが、どっから出てきたんだ?
そんな話してたか?
リーク検出ツールを使ってもテストの網羅度が完璧じゃなくて漏れてしまうこともある「が」
それでも一定の効果はあるので有用である
という話はしたが
テストのパスの網羅度が不十分で漏れてしまうメモリリークバグを
ツールでどうにかする、とは俺は言ってないんだが、初めからな

866
デフォルトの名無しさん (ササクッテロル Spd3-yqOs)[sage]   投稿日:2017/03/23 17:35:51  ID:argEiYvxp.n(2)
>853読んでそんなトンチンカンな理解をする方が大間違いだろう
メモリリークが大して騒がれない、ってことに対するオマケの補足情報にどんだけ突っかかるんだ

867
デフォルトの名無しさん (ワッチョイ be6b-72yv)[]   投稿日:2017/03/23 18:00:16  ID:xx3Et9SY0.n(14)
おまえ853で開口一番こう言ったぞ
> ツールでメモリリークがないことを保証したいってだけなら
> VC++のランタイム付属のやつで十分だろ
どっから出てきたって、おまえの口からだよ
コメント2件

868
デフォルトの名無しさん (スッップ Sd4a-ejJz)[]   投稿日:2017/03/23 18:26:51  ID:pJ6fwoOxd.n(2)
また言った言わないの揚げ足取り合戦かよくだらねえ

869
デフォルトの名無しさん (ワッチョイ be6b-72yv)[]   投稿日:2017/03/23 18:34:26  ID:xx3Et9SY0.n(14)
話の本題を無視して言葉尻にだけ突っかかる誰かさんのようなのを揚げ足取りというんだよ

870
デフォルトの名無しさん (スプッッ Sde3-2Cpe)[sage]   投稿日:2017/03/23 18:54:08  ID:ne+fmuh4d.n(10)
>863
ありがとう
とりあえずでboehmでメモリリーク監視することになった
思いきりリークしてるみたいだからどうしようかと悩むが...

別件なのだけどvc6環境のC++とvc9環境のC++で差分の出る演算ってあるかな?
for文のスコープの範囲が変わるぐらいしかわからんくて
大きな演算の違いはないのだろうけどもそれぞれの環境でのモジュールで
本当に微々たる差が出ているみたいで...
基本的には結果に差分がなく、特定のパラメータファイルの時だけ差分が出てしまう。その差も30mb中の0.1%も満たないぐらい
やってることとしてはvc6→vc9環境へプロジェクトファイルの移行
コメント8件

871
デフォルトの名無しさん (スプッッ Sde3-2Cpe)[sage]   投稿日:2017/03/23 19:11:57  ID:ne+fmuh4d.n(10)
パラメータファイルって書くと設定値みたいに見えるね
特徴抽出したやつに演算かけてます

872
デフォルトの名無しさん (ワッチョイ 1bc8-VHv+)[sage]   投稿日:2017/03/23 19:20:15  ID:Ei+8urX30.n(4)
>848
32→64bit移行の安全性を実行時ツールで検出、というのはかなり無理じゃないか?
だからみんなソースコードをチェックしているわけだし。
http://sgry.jp/pgarticles/64.html
http://yukinarit.blog11.fc2.com/blog-entry-27.html
http://qiita.com/izmktr/items/59085ca70a6c11b0b352

>870
> 思いきりリークしてるみたいだからどうしようかと悩むが...
32→64bit移行ではリーク自体は発生しないぞ。
それは結果的に症状がリークなだけで、根本的に駄目なところがあるんだよ。
まずは32bitの旧バイナリと新テストパターンで足場を固めないと駄目だと思うぞ。

数値演算結果の誤差ならSSEとx87の精度の違いかもしれん。
ただしVC9(VS2008)は演算にはSSEを出せなかったはずだから関係ないとは思うが。
コメント2件

873
デフォルトの名無しさん (スプッッ Sde3-2Cpe)[sage]   投稿日:2017/03/23 19:36:37  ID:ne+fmuh4d.n(10)
>872
長々とサンクス
思いきりリークしてるから..ってのは元々からリークしていただろうから
対処をどうしようか悩むなぁって意味でした

SSEとx87についてちょっと調べてくる
コメント2件

874
デフォルトの名無しさん (ワッチョイ 7b7a-7HKf)[sage]   投稿日:2017/03/23 19:50:33  ID:CpsZOT5F0.n(6)
浮動小数点の丸めモードが違うとかあるか?

875
デフォルトの名無しさん (ドコグロ MMe2-7Y/j)[sage]   投稿日:2017/03/23 20:04:25  ID:8W2HqVqhM.n(2)
>870
vc6って標準準拠してたっけ?
c++のような何かだったような気がするけど。
コメント2件

876
◆QZaw55cn4c (ワッチョイ a6ff-nbIt)[sage]   投稿日:2017/03/23 20:26:53  ID:qM4EW3hi0.n(2)
>870
ベームGCか,なかなか息がながいライブラリだね

877
デフォルトの名無しさん (ワッチョイ 7b7a-7HKf)[sage]   投稿日:2017/03/23 20:32:55  ID:CpsZOT5F0.n(6)
>875
当時は標準規格というもの自体が無かった

878
デフォルトの名無しさん (ワッチョイ 1bc8-VHv+)[sage]   投稿日:2017/03/23 20:37:31  ID:Ei+8urX30.n(4)
>873
あと、FMACの最適化がどこかであったはず。
(ただしググッても出てこないので、俺がGPUの話と混同して勘違いしているだけかも)
内容は、FMACの中間結果を精度が高い状態で保持しておき、FADDに突っ込むというもの。
これに該当した場合は、結果がハードウェア依存になる。
(旧ハードと新ハードでFMACの結果が微妙に異なる)
だから同一ハードでの新旧バイナリでの結果をdiffしているのなら、これは該当しない。
環境移行が面倒等で、旧マシンで結果だけ作って新マシンと比べている場合、当たるかもしれない。
ただし再度言うが、GPUの話だったかもしれんのでよろしく。

879
デフォルトの名無しさん (ドコグロ MMe2-hXJm)[sage]   投稿日:2017/03/23 20:40:17  ID:HovpjxiMM.n(4)
>870
> 別件なのだけどvc6環境のC++とvc9環境のC++で差分の出る演算ってあるかな?
正しいプログラムだとそんなに変更はないと思うけど、例えば引数の評価順に依存しているプログラムの動きが変わるって言うのはC言語あるあるだから
要するにバグの顕在化って奴ね
なのでコンパイラ替えたら一通りテストした方がいい
コメント2件

880
デフォルトの名無しさん (ワッチョイ aa67-QN42)[sage]   投稿日:2017/03/23 21:06:58  ID:63eMbsST0.n(8)
幸いなことに、再現性のあるバグだ。
メモリ関連にしては、ましな方。
画像データなんだよな?
当時だと、特徴抽出前にグレースケールにしてたもんだが。。
そのデータだけ、サイズが縦横違うとかないかな。
どっかで、メモリの取り方(x方向、y方向のピクセル値)間違えてるとか。
あるいは、メモリを取り直してたりしてないかな。
reallocとか。

実務的なとこでは、仕事の落とし所も考えといた方がいいかも。今回は、調査だけなのか、移植までなのか。。
コメント4件

881
デフォルトの名無しさん (ワッチョイ 2b6e-72yv)[sage]   投稿日:2017/03/23 21:15:40  ID:FwJwtm3q0.n(16)
>867
もうあんまり話したくないけど、最後に言っておくと
実用上問題ないレベルで保証できればそれでよいだろってこと
100%バグがないことを保証するのはどうやっても何やってもどんなツール使っても
無理なのは当たり前の常識だろ
VC++付属の検出ツールでも実用上問題ないレベルでのメモリリークの検査はできるし
コードに2,3行追加するだけで、壮大にメモリリークしているかどうかぐらいは
直ぐにでもチェックできるから、とりあえず試してみろって話をしたんだよ
というか、普通はONにした状態で開発しているものなんだよ
あえてOFFにしとく理由は何もないからな、邪魔になるわけでもなし
質問者が何であえてOFFにした状態で開発していたのかは定かではないが
知らなかったってことなら今日からONにしとけばよいだけだろ

で、実用上云々の説明がそのあとに続く「稀に漏れることがある」って話で
>たまーにしか通らないパスでメモリリークが発生していた場合など
>メモリリークの発見が遅れることはあるけど
>まぁ通ってないパスがある時点でテストが十分でないということだし
>一か月に一回ほどの頻度でメモリリークするぐらいは別に問題ないという考え方もある
と書いたんだよ
そのどうでも良いところにかみついて揚げ足取りしたのはお前だろ

882
デフォルトの名無しさん (ワッチョイ 7b7a-7HKf)[sage]   投稿日:2017/03/23 21:24:27  ID:CpsZOT5F0.n(6)
>880
計算部分だけブレークポイント使って一行ずつ実行しながら見比べてみろよ
コメント4件

883
デフォルトの名無しさん (ワッチョイ aa67-QN42)[sage]   投稿日:2017/03/23 21:33:57  ID:63eMbsST0.n(8)
>882
そだな。データが特定されてるんだもんな。

884
デフォルトの名無しさん (ワッチョイ 2b6e-72yv)[sage]   投稿日:2017/03/23 21:38:04  ID:FwJwtm3q0.n(16)
boehmは詳しくないが、普通メモリリーク検出ツールは
どこで確保したメモリがリークしたのかわかるようになっている物が多いはずだぞ
その周辺を漁ればメモリリークの箇所を特定することはそう難しくないハズ
VC++付属のツールの場合は
http://yukinarit.blog11.fc2.com/blog-entry-38.html
↑のようにしておくとリークしたメモリを確保した箇所の
「ソース名」「行数」「ダンプ」がわかる
あとはちょっとソースコード追いかければリーク箇所を特定できるはず

885
デフォルトの名無しさん (ワッチョイ aa67-QN42)[sage]   投稿日:2017/03/23 21:47:32  ID:63eMbsST0.n(8)
memcpyとかも、解放、抜けたりしがち。

886
デフォルトの名無しさん (ワッチョイ be6b-72yv)[]   投稿日:2017/03/23 22:20:42  ID:xx3Et9SY0.n(14)
> 実用上問題ないレベルで保証できればそれでよいだろってこと

実用上問題あるかどうか、おまえ勝手に決めてるのか?

887
デフォルトの名無しさん (ワッチョイ 2b92-2Cpe)[sage]   投稿日:2017/03/23 22:36:32  ID:ViT7/D1o0.n(2)
すまん
めっちゃレスもらってるから全部に逐一は答えられんわ
まず答えてくれてる人ありがとう助かる

>879
俺もそうは思うんだけどもVC6時代のテスト項目とか残っていない
さらに言えば仕様書や設計書すらなく困り果ててる

>880
サイズ自体が異なっていたから何かしらの処理で変な取り方をしているのだろうとは考えてる
実務のことだからほぼほぼ影響を与えないのであればコストと相談してスルーってのもありだけど...そこは要相談なんだろうな

>882
俺もそうはしたいんだがVC6環境がないから対比で比べられないんだわ
コメント6件

888
デフォルトの名無しさん (ワッチョイ 2fb4-QntA)[sage]   投稿日:2017/03/23 23:14:34  ID:v1/Wdv6U0.n(2)
valgrind自体はともかくvalgrindという単語を見て
以前このスレに現れたキティガイを思い出した

889
デフォルトの名無しさん (ワッチョイ fe75-i4+Q)[sage]   投稿日:2017/03/24 00:06:32  ID:8SSjzg+S0.n(4)
漏れも、仕様書や設計書がない、DLLからエラーが返ってくるから、
そのDLLをデバッグしてくれとか、
1月150万円で、上場企業から請け負ったこともあるけど、

こういうのは直しても、切りがない。
違うタイプのデータが来ると、またエラーになる

無理だと断っても、また見てくれって言う。
そのDLLが何をやっているのか分からないし、仕様書もないから、
新規に作り直すことは無理だから

C/C++で解析できる人なんて、まず見つからないから
コメント2件

890
デフォルトの名無しさん (ワッチョイ 7b7a-7HKf)[sage]   投稿日:2017/03/24 00:16:13  ID:DhGI6SB10.n(2)
ハッカーに1000万払おう

891
デフォルトの名無しさん (ワッチョイ 1bc8-VHv+)[sage]   投稿日:2017/03/24 00:17:14  ID:RtKD05ZR0.n(8)
>889
マジカヨ?ちょっとその仕事試しに受けてみたいかも。
それってどれくらいの規模だった?
コメント2件

892
デフォルトの名無しさん (ワッチョイ 63b7-rEFK)[sage]   投稿日:2017/03/24 00:18:51  ID:9w5lj4S/0.n(2)
>887
めっちゃスルーされてるけど
>844
は結構良かったよ。リーク箇所のスタックトレースまで出力される。
あとVC++標準のは誤検知する場合がある。
googleのv8でリークが誤検知されてた。
コメント4件

893
デフォルトの名無しさん (ワッチョイ 9375-iMo4)[]   投稿日:2017/03/24 01:09:06  ID:DlmXd06I0.n(4)
>892
VC標準の貶すと顔真っ赤にして怒り出すやつ居るから気を付けろ

894
デフォルトの名無しさん (ワッチョイ 9375-iMo4)[]   投稿日:2017/03/24 01:23:02  ID:DlmXd06I0.n(4)
彼にとってはリーク箇所のスタックトレースなんか要らないし、誤検出は使い方が悪いし、リークするコードなんて書かないから高機能は必要ないらしい。
挙げ句の果てに(自分の書いたコードに対して使うとも言ってないのに)そもそもリークするコード書いてる低脳と煽ってくる。

895
デフォルトの名無しさん (ワッチョイ 1bc8-VHv+)[sage]   投稿日:2017/03/24 01:25:52  ID:RtKD05ZR0.n(8)
>887
ついでにこんなんが出てきたので貼っておく。
> サイン、コサインをインテルの CPU で計算すると少しバグっているらしい
> http://tomeapp.jp/archives/1282

要するに、x87のアセンブラ命令 FSIN, FCOS 等には誤差が出る場合があって、
これを嫌うコンパイラの場合は自前で計算しているらしい。
だからコンパイラを変更した場合、sin,cosの値が微妙にずれる事があり得る。
VC6->VC9でどうなのかは知らん。
コメント6件

896
デフォルトの名無しさん (ワッチョイ 1b84-rs+5)[sage]   投稿日:2017/03/24 01:39:49  ID:uwgr9JVd0.n(2)
FPUのPIの値がちょっと誤差持ってるって話じゃなかったっけ?
コメント2件

897
デフォルトの名無しさん (ワッチョイ 1bc8-VHv+)[sage]   投稿日:2017/03/24 01:58:41  ID:RtKD05ZR0.n(8)
俺はこれは初耳だったからよくは知らない。

> 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.
> http://notabs.org/fpuaccuracy/index.htm
主張としては、sinXのXが無駄にでかい時は仕方ないとして、
pi/2の倍数のところに誤差があるのは駄目だろ、ということらしい。
つっても仮数部が10bit多いし、doubleに丸めるなら見えなくなると思うが。

正直なところ、浮動小数点の演算結果比較はこの手の落とし穴が大量にあるから、
完全一致は諦めて、4bit位の誤差までは見逃すようにしないと現実的に無理だと思う。

898
889 (ワッチョイ fe75-i4+Q)[sage]   投稿日:2017/03/24 02:13:33  ID:8SSjzg+S0.n(4)
>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
これは、除数・被除数ともに誤差があるから、時々おかしくなる
コメント2件

899
デフォルトの名無しさん (ワッチョイ 1bc8-VHv+)[sage]   投稿日:2017/03/24 02:49:48  ID:RtKD05ZR0.n(8)
>898
いやその話じゃない。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
が成立しない時も、それは浮動小数点計算による誤差であり、仕様。

900
デフォルトの名無しさん (ワッチョイ aa67-QN42)[sage]   投稿日:2017/03/24 03:00:17  ID:GqbwU5RX0.n(2)
>887
ソフトウェアとして、ライフサイクル切れてるのではないか。。
仕様がないのでは、検査できないではないか。

来期別案件で、再構築も提案していいかもな。只、お客さんから見ると機能がふえるわけではないから、なかなか首を縦に降ってもらえないのだが。
コメント2件

901
デフォルトの名無しさん (スプッッ Sdea-2Cpe)[sage]   投稿日:2017/03/24 07:12:58  ID:pzB5kBTUd.n(2)
>892
すまん
スルーしてるつもりはない
全レスすると全レスやつ〜って煽られたことあるから数多いときは一部にしてた...

>895
これの可能性ある気がする
VC6時代のは別コンパイラでもコンパイルしてた〜みたいな話聞いてたから
今リリースされているのが別環境で用意ができるのであれば探してみるよありがとう

>900
だよね
設計者や仕様書が如何に大事かがわかったよ

902
デフォルトの名無しさん (ワッチョイ aa1e-t8fU)[sage]   投稿日:2017/03/25 03:58:44  ID:D917NA3h0.n(2)
設計者: 私が辞めても代わりはいるもの

903
デフォルトの名無しさん (ワッチョイ be8c-72yv)[]   投稿日:2017/03/25 18:13:50  ID:2Y4XLGXL0.n(2)
プロとしての規律を大事にお仕事してるんですね

904
デフォルトの名無しさん (ワッチョイ aa90-VHv+)[sage]   投稿日:2017/03/26 15:26:40  ID:pwPfsDuW0.n(2)
>895
こんなのあるんだ・・・誤差という言い方は語弊があるような
立派なバグじゃないですかインテルさん
というかハードウェアって直せないの?
コメント2件

905
デフォルトの名無しさん (ワッチョイ 1b84-rs+5)[sage]   投稿日:2017/03/26 15:50:44  ID:rQp0RVJN0.n(2)
ソフトウエア資産的に修正ると多大な影響がある。

906
デフォルトの名無しさん (ワッチョイ 7b7a-7HKf)[sage]   投稿日:2017/03/26 15:52:58  ID:r1GdkURH0.n(4)
特定のプロセッサが生産時期で結果が変わるとか地獄しかない
コメント4件

907
デフォルトの名無しさん (ワッチョイ 1bc8-VHv+)[sage]   投稿日:2017/03/26 16:15:08  ID:Uwt+/Suh0.n(2)
>904
多分原因は>896からみのPI等の桁落ち(桁不足)だろうから、
修正自体は簡単で、増やせばいいだけ。

ただし、既存ソフトへの影響が大きすぎるのと、
そもそもx87の仮数部は10bit多くて、doubleに格納した場合は丸められるわけだから、
顕在化する確率はかなり低い。
この問題もx87(1980年)からなら30年以上経って発見されたわけだし。
また現在の科学技術計算ではdoubleが主流でx87は使われなくなりつつあるし。

だから、当面は無視するのが常策だよ。

908
デフォルトの名無しさん (ワッチョイ fe1f-sIi0)[]   投稿日:2017/03/26 18:22:41  ID:Ntld20FG0.n(4)
>906
浮動小数点ではよくある、気にならないとおもうが・・
浮動小数点の演算は誤差、ケタ落ちを考慮するのが普通。

909
デフォルトの名無しさん (ワッチョイ fe1f-sIi0)[]   投稿日:2017/03/26 18:27:34  ID:Ntld20FG0.n(4)
誤差の問題よりソフトウェアの速いからという回答になってるが・・


なんでハードウエアサポート使わないの?

この質問に対する回答によると、「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

910
◆QZaw55cn4c (ワッチョイ a6ff-nbIt)[sage]   投稿日:2017/03/26 19:45:11  ID:KxYPtDxZ0.n(2)
テイラー展開/マクローリン展開(x=0) を中心から遠くに適用しようとすると誤差はでるね
周期で割って近場で代入するのが普通だが,それを嫌ったのかな?

911
デフォルトの名無しさん (オッペケ Srd3-QntA)[sage]   投稿日:2017/03/26 21:51:40  ID:fl4IudC1r.n(2)
浮動小数点計算で精度が足りないとか言ってる奴は
たいていは精度じゃなくてオツムが足りない

912
デフォルトの名無しさん (ワッチョイ 8ac3-Cbvv)[sage]   投稿日:2017/03/26 21:53:51  ID:5/5Va2U30.n(2)
最近の大学では実用数学やらんのか

913
デフォルトの名無しさん (ワッチョイ 7b7a-7HKf)[sage]   投稿日:2017/03/26 22:32:47  ID:r1GdkURH0.n(4)
64bitで精度が足りなくなるのは原子力か宇宙か暗号くらいじゃないのか
コメント2件

914
デフォルトの名無しさん (オッペケ Srd3-QntA)[sage]   投稿日:2017/03/26 22:40:07  ID:pnqG1H1Or.n(2)
精度の問題と>906の様にロジック自体がおかしいアホの問題を一緒にしてしまっているような

915
デフォルトの名無しさん (ワッチョイ b71f-Oq8d)[sage]   投稿日:2017/03/26 22:49:30  ID:+0YN82z50.n(2)
>913
分布を扱う業種だったら足りなくなるだろ
tail riskの話になると64bitじゃ全然足りない

916
デフォルトの名無しさん (ワッチョイ 6f92-kvyc)[]   投稿日:2017/03/27 03:12:54  ID:om6iAVJe0.n(2)
浮動小数点の精度の問題と特定のsin実装の誤差の問題をごっちゃにしてるのがいるな

917
デフォルトの名無しさん (ワッチョイ 7b59-BXGz)[sage]   投稿日:2017/03/27 19:37:51  ID:DcY7c9jX0.n(2)
三角関数とか測量や透視投影関連の画角計算するようなごく一部の連中しか使わないだろJK
しいて言えば機械学習する人らがまれにacos()を使うかな〜ぐらい
ニッチすぎてハードウェア演算だろうがソフトウェアーエミュだろうが大して問題になんね
コメント4件

918
デフォルトの名無しさん (ワッチョイ aa67-QN42)[sage]   投稿日:2017/03/27 19:47:44  ID:iyhdhEhz0.n(6)
話の元としては、特徴抽出だったから、フーリエ変換かな。。。

919
デフォルトの名無しさん (ワッチョイ 2b92-2Cpe)[sage]   投稿日:2017/03/27 20:48:32  ID:iw91puSD0.n(2)
ソフトウェア開発工程に実装設計が必要なんじゃないかなって思い始めたんだけど
そんなことしてるひといるかな?
コメント2件

920
デフォルトの名無しさん (ワッチョイ aa6b-VHv+)[sage]   投稿日:2017/03/27 20:59:26  ID:+nINF5LH0.n(2)
ニッチな数学関数は社会インフラのクリティカルな部分に使われるからひやひやする
でもそんくらいの些細な誤差なら数百億かけたお天気衛星が落ちるくらい
うみほたるがいきなし潰れたりスカイツリーがいきなり倒れたりはしない

921
デフォルトの名無しさん (ワッチョイ aa67-QN42)[sage]   投稿日:2017/03/27 21:12:17  ID:iyhdhEhz0.n(6)
>919
LLDのことじゃなくて?
具体的には、どんな感じ?
コメント2件

922
デフォルトの名無しさん (ワッチョイ 7b7a-7HKf)[sage]   投稿日:2017/03/27 21:48:32  ID:cEFtoidy0.n(2)
cmathのよくわからない関数は誰か使ってんのか?

923
デフォルトの名無しさん (ワッチョイ be8c-72yv)[]   投稿日:2017/03/27 22:03:40  ID:gdZSPxyQ0.n(2)
C++17でspecial math functionsが追加される件のことか?

924
デフォルトの名無しさん (ササクッテロル Spd3-yqOs)[sage]   投稿日:2017/03/27 22:16:03  ID:9PqnwE37p.n(2)
LLDって何の略?

925
デフォルトの名無しさん (ワッチョイ be8c-N8vi)[sage]   投稿日:2017/03/27 22:17:37  ID:YTkDzohr0.n(2)
long long decimal

926
デフォルトの名無しさん (ワッチョイ aa67-QN42)[sage]   投稿日:2017/03/27 22:52:15  ID:iyhdhEhz0.n(6)
Lower Level Design

927
デフォルトの名無しさん (スプッッ Sdea-2Cpe)[sage]   投稿日:2017/03/28 00:29:07  ID:wYvZd6LUd.n(4)
>921
はじめて聞く

俺の中のイメージだと
要件定義・基本設計・詳細設計の次に実装設計が合ってもいいと思うんだ
詳細設計って機能とかだからそれをどう実現するかとかの関数の中のサブ関数レベルの話
コメント2件

928
デフォルトの名無しさん (ワッチョイ b7f4-Vb+v)[sage]   投稿日:2017/03/28 00:57:49  ID:0r7X/qmQ0.n(2)
>917
いや、普通にPC使ってたら三角関数位使うだろ
コメント2件

929
926 (ワッチョイ aa67-QN42)[sage]   投稿日:2017/03/28 01:17:13  ID:EZ0E4K7B0.n(2)
>927
詳細設計=LLDね。
詳細設計をやると、実装の設計までいきませんか?
データの持ち方、関数のフローチャートまで書くとおもうのですが。。
単体検査で、分岐追えなくなってしまうし。。
なんか、思い違いしてますかね。
コメント2件

930
デフォルトの名無しさん (ワッチョイ 9375-iMo4)[]   投稿日:2017/03/28 01:21:00  ID:r9lg9pov0.n(2)
>928
GUI使ってたらグラフィックスライブラリが間違いなく使ってるよね

931
デフォルトの名無しさん (ワッチョイ 0aed-yqOs)[sage]   投稿日:2017/03/28 01:35:15  ID:7ttxV7Jp0.n(2)
その辺の言葉って仕事の分野とか規模とかによってまちまちな気がして面倒臭い
結局のところブレークダウンして行ってるだけだし、文書のメンテする手間とか勘案した上でやった方が良いと判断したならやれば良いんじゃないか

あとスレチじゃね
コメント2件

932
デフォルトの名無しさん (ドコグロ MM4a-hXJm)[sage]   投稿日:2017/03/28 06:57:20  ID:+hgLXPeGM.n(2)
> 詳細設計=LLDね。
俺も初めて聞いた
英語で低レベルな糞設計は何て言うんだろ?

933
デフォルトの名無しさん (スプッッ Sdea-2Cpe)[sage]   投稿日:2017/03/28 07:09:38  ID:wYvZd6LUd.n(4)
>931
スレチかすまん
ちょっと探してくる

>929
規模によるとは思うが事細かな処理内容は記載されなくないか
分岐処理とかの内部のやつとか

934
デフォルトの名無しさん (ワッチョイ eb37-72yv)[]   投稿日:2017/03/28 10:52:55  ID:JfwQ0DgC0.n(2)
crappy design

935
デフォルトの名無しさん (ワッチョイ 6f92-kvyc)[]   投稿日:2017/03/28 17:59:50  ID:lUbwlPy10.n(2)
>917
三角関数がニッチすぎるだとかwさすがですね

936
デフォルトの名無しさん (ガックシ 0626-0VlJ)[sage]   投稿日:2017/03/28 20:42:08  ID:Woa0lIQR6.n(2)
まあ数学はなるたけ使わずにプログラムできるようにいろんなライブラリが整備されてるわけだから、三角関数不要と思ってる奴がいるのはむしろライブラリ作成者が成功している証といえる
コメント2件

937
デフォルトの名無しさん (ワッチョイ eb5e-72yv)[]   投稿日:2017/03/28 23:53:38  ID:mX0+s2UE0.n(2)
>936
おまえシャブでも食ってんのか? 今日は何グラム?

938
デフォルトの名無しさん (オッペケ Srd3-QntA)[sage]   投稿日:2017/03/29 08:00:31  ID:vWDDuFOJr.n(2)
double型は使う分野と使わない分野の差が激しい
少なくとも誰でも使う訳ではない

939
デフォルトの名無しさん (ワッチョイ 5739-6tpp)[]   投稿日:2017/03/29 09:05:07  ID:Ysl+RBZV0.n(2)
シャブシャブなら

940
デフォルトの名無しさん (ワッチョイ 1b84-rs+5)[sage]   投稿日:2017/03/29 17:29:03  ID:5uJ1HJ780.n(8)
http://ideone.com/jWckMu
誰か助けて。
constexprクラスの練習してるけど、うまく動かない。
なんで?

941
デフォルトの名無しさん (ワッチョイ 1b84-rs+5)[sage]   投稿日:2017/03/29 17:52:07  ID:5uJ1HJ780.n(8)
http://ideone.com/oXM2RE
これも無理だった。
もしかして、std::arrayのイテレータってconstexpr対応してない??

942
デフォルトの名無しさん (ワッチョイ 1b84-rs+5)[sage]   投稿日:2017/03/29 18:50:14  ID:5uJ1HJ780.n(8)
http://ideone.com/QBggO4
VCで動くけどGCCで動かない魔法のコード。
もういやー。

943
デフォルトの名無しさん (ワッチョイ 5728-TrMc)[sage]   投稿日:2017/03/29 18:50:40  ID:Bb2qhsdR0.n(2)
C++14からループとか使えるようになってたのか
「std::array constexpr」でググると知りたいことに辿り着けるかと

944
デフォルトの名無しさん (ワッチョイ 1b84-rs+5)[sage]   投稿日:2017/03/29 19:16:10  ID:5uJ1HJ780.n(8)
http://d.hatena.ne.jp/yohhoy/20160328/p1
これか。今策定中やんけ・・・。
俺には早かったな。もうちょっと環境がそろわないとむりだー。

945
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd4a-qegt)[sage]   投稿日:2017/03/29 20:18:49  ID:uG+6tdKud.n(8)

946
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd4a-qegt)[sage]   投稿日:2017/03/29 20:27:00  ID:uG+6tdKud.n(8)
typenameを削っただけだ。

947
デフォルトの名無しさん (オッペケ Srd3-QntA)[sage]   投稿日:2017/03/29 21:16:39  ID:sErT1Yizr.n(2)
C++17のドラフトはライブラリのtypedefがusing宣言に修正されて見やすくなった
typedefが老害と言われる日も遠くない

948
デフォルトの名無しさん (ワッチョイ cff9-72yv)[]   投稿日:2017/03/29 21:24:13  ID:NU8Q9yFr0.n(4)
typedefはもういらんな

949
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd4a-qegt)[sage]   投稿日:2017/03/29 21:38:57  ID:uG+6tdKud.n(8)
テンプレートの型を使うときに、typenameが要る場合と要らない場合があって、使い分けないといけない。

950
デフォルトの名無しさん (ワッチョイ 2b92-2Cpe)[sage]   投稿日:2017/03/29 22:53:40  ID:RGihPrn00.n(2)
質問なんだが二台構成のPC間(LANで直接繋ぐ)のソフトウェア同士で通信するときは
相手方のIPアドレス指定してその次にポートを指定するだけで良い?
そんなことC++でできる??
コメント2件

951
デフォルトの名無しさん (ワッチョイ cff9-72yv)[]   投稿日:2017/03/29 22:54:03  ID:NU8Q9yFr0.n(4)
いま酔っ払ってて思考能力がないが
それ規格のバグちゃうの?
まさか特定のコンパイラでどうたらって話じゃねえだろな?

952
片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd4a-qegt)[sage]   投稿日:2017/03/29 23:10:32  ID:uG+6tdKud.n(8)
酔っぱらいは機械の操作をしてはなりません

953
デフォルトの名無しさん (ワッチョイ 7b59-BXGz)[sage]   投稿日:2017/03/29 23:32:23  ID:AoD4FYay0.n(2)
型なのか変数なのかまぎらわいし依存名の解決に使う

954
デフォルトの名無しさん (オッペケ Sr17-bOuD)[sage]   投稿日:2017/03/30 00:08:17  ID:POGQ4vF/r.n(2)
規格のバグではなく「テンプレートの型」などという意味不明な言葉を使う奴のオツムのバグか
エラーにしなければならないのにコンパイルを通してしまう特定のコンパイラーのバグ

955
デフォルトの名無しさん (ワッチョイ cf1f-jsM4)[sage]   投稿日:2017/03/30 00:32:16  ID:gILJOuVy0.n(3)
>950
できるかどうかなら、出来ると言うことに
詳しく聞きたいなら、こちらの方が良いかも

ネットワークプログラミング相談室 Port30
コメント3件

956
デフォルトの名無しさん (ワッチョイ 53c1-Fkbu)[sage]   投稿日:2017/03/30 01:52:01  ID:igjKpMzz0.n(4)
funcっていう関数があったときに
func(char* a) と func(char *a)って違う?
コメント2件

957
デフォルトの名無しさん (ワッチョイ b392-8ugA)[sage]   投稿日:2017/03/30 01:53:25  ID:T78D8oTL0.n(2)
>956
ポインタの位置が違うだけ?一緒だよ

>955
できるか
そこも見てたんだけどログの流れ遅くてこっちに来てしまった
コメント2件

958
デフォルトの名無しさん (ワッチョイ f37a-QmV0)[sage]   投稿日:2017/03/30 01:58:51  ID:Qgxuh/pI0.n(3)
ぐぐればわかることを

959
デフォルトの名無しさん (ワッチョイ 53c1-Fkbu)[sage]   投稿日:2017/03/30 02:00:30  ID:igjKpMzz0.n(4)
>957
同じか
ありがとう

960
デフォルトの名無しさん (ワッチョイ bf3c-agmj)[]   投稿日:2017/03/30 02:32:10  ID:sHIKu4vn0.n(3)
>14
プログラムのローダーがやるんだろう。
http://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初期化の処理を埋め込むことになる。
コメント1件

961
デフォルトの名無しさん(ワッチョイ dfcf-HvS5)[sage]   投稿日:2017/01/09 14:49:27  ID:p96WJVyd0.n(2)
次スレを立てる時は本文の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
コメント1件

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

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

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

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

#include <stdafx.h>
後死ね。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

異論反論は勿論認める。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1071
デフォルトの名無しさん (ワッチョイ b2cf-YL17)[sage]   投稿日:2017/01/15 16:26:13  ID:6tnmROhD0.n(8)
>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

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

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

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

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

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

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


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

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

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

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

http://d.hatena.ne.jp/yohhoy/touch/20120309/p1

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

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

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

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

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

これは最初から言っている(>24)

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

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

って書いてるからそれに騙されてる人が居ないか心配で書いただけだよ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Yes

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

これでいけない?

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

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

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

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

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

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

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

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

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

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

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

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

1164
デフォルトの名無しさん (ワッチョイ 23c9-mcUU)[sage]   投稿日:2017/01/22 15:53:04  ID:7mC+0LM10.n(10)
mainがvoidなレベルの人にそんな突っ込みをしても…

1165
デフォルトの名無しさん (ワッチョイ cf24-RK9q)[]   投稿日:2017/01/22 20:43:26  ID:LwmXYJhf0.n(4)
戻らないmainについてもガタガタ言っちゃう人がねえ

1166
デフォルトの名無しさん (ワッチョイ 037b-rTuY)[]   投稿日:2017/01/22 22:57:58  ID:gigvK4EO0.n(6)
mainのreturnは省略したら0が返ることが保証されている

1167
デフォルトの名無しさん (ワッチョイ 23c9-mcUU)[sage]   投稿日:2017/01/22 22:59:58  ID:7mC+0LM10.n(10)
>206
当たり前のことを言い出して、いきなりどうした

1168
デフォルトの名無しさん (ワッチョイ 037b-rTuY)[]   投稿日:2017/01/22 23:01:08  ID:gigvK4EO0.n(6)
>207
戻らないmain(?)へ宛

1169
デフォルトの名無しさん (ワッチョイ 23c9-mcUU)[sage]   投稿日:2017/01/22 23:14:20  ID:7mC+0LM10.n(10)
>208
なるほど理解した
『戻らないmain』は[[noreturn]]のことだと思ったので理解できずスルーしていた
人に『リスパダールちゃんと飲めとあれほど』と言って自分が飲み忘れたのかと

1170
デフォルトの名無しさん (ワッチョイ 23c9-mcUU)[sage]   投稿日:2017/01/22 23:26:22  ID:7mC+0LM10.n(10)
>203
CStringは知らないが、stringは恐らく同じ
sizeof(STR()[0])
 →sizeof (char &型の左辺値)
 →sizeof (char)と同じ
sizeof(decltype(STR()[0]))
 →sizeof (decltype(char &型の左辺値))
 →sizeof (char &型)
 →sizeof (char)と同じ

1171
191 (アウアウカー Sac7-/Qox)[sage]   投稿日:2017/01/23 09:48:36  ID:SwVOU3U8a.n(2)
>203
vc++2015で deltype をぬくと、関数に[] は出来ません、みたいなエラーで通りませんでした。
STR()をコンストラクタではなく、関数と思ってるんだと思います。

1172
デフォルトの名無しさん (オッペケ Sr87-mcUU)[sage]   投稿日:2017/01/23 17:40:29  ID:oJYEiyR6r.n(2)
宣言に解釈できるときは宣言として解釈
みたいなルールだっけ

1173
デフォルトの名無しさん (ワッチョイ ff9f-tc54)[sage]   投稿日:2017/01/23 18:40:50  ID:FReCyx8S0.n(2)
コンストラクタ ⊆ 関数

1174
デフォルトの名無しさん (アウアウカー Sac7-WqDQ)[sage]   投稿日:2017/01/23 19:40:02  ID:Ij4EmhsFa.n(2)
アンダーバー要らなくね?

1175
デフォルトの名無しさん (ワッチョイ ffcc-DOWB)[sage]   投稿日:2017/01/24 03:03:03  ID:ch78KtiL0.n(2)
MFCとか何処のバカが設計したんだろうな
とっくに絶滅しているもんだとおもっていたぜw

1176
デフォルトの名無しさん (ワッチョイ 037b-rTuY)[]   投稿日:2017/01/24 03:50:21  ID:nvNd8iP10.n(2)
それより優れたものを設計してから言えよな

1177
デフォルトの名無しさん (ワッチョイ f302-JQ1R)[sage]   投稿日:2017/01/24 03:56:08  ID:Af36V4kC0.n(2)
>216←今日のバカ

1178
デフォルトの名無しさん (ワッチョイ 137b-Eksc)[]   投稿日:2017/01/24 11:11:02  ID:dVVoZ7Su0.n(2)
MFCが作られた時代を考えられないやつのほうがバカなんだよなあ
あれはWin32APIの薄いラッパでしかないから
文句あるなら別のライブラリを使えばいいだけの話、それも出来ないならやっぱりお前が無能でバカ

1179
デフォルトの名無しさん (スップ Sd1f-xrkK)[]   投稿日:2017/01/24 11:33:11  ID:9X3I9Jqtd.n(4)
int (*func)(int) = &hoge;
func = nullptr;

funcへの代入をできないようにconst付けたいのですが
どう書けばいいですか。
usingやtypedefは使わない方法でお願いします。

あとメンバ関数への参照はどう記述すればいいですか
int (hage::*func)(int) = &hage::test;
の参照版です

1180
デフォルトの名無しさん (アウアウカー Sac7-WqDQ)[sage]   投稿日:2017/01/24 11:41:16  ID:GCEfrzc1a.n(2)
益のない煽りはよしなよ(・ิω・ิ)

1181
デフォルトの名無しさん (ワッチョイ 7330-J7L1)[sage]   投稿日:2017/01/24 12:11:20  ID:ekWjtoGq0.n(2)
>219
int (* const func)(int) = &hoge;

int (piyo::* mf0)(int) = &piyo::test;
int (piyo::* & mf1)(int) = mf0;

int (piyo::* const & mf2)(int) = &piyo::test;

1182
デフォルトの名無しさん (ワッチョイ ffcf-JQ1R)[sage]   投稿日:2017/01/24 12:13:02  ID:NfDXKGen0.n(4)
>211
そっか sizeof だと式と型の曖昧さが問題になるけど decltype なら式しか取らないから曖昧さを消せるのか。

1183
デフォルトの名無しさん (ワッチョイ ffcf-JQ1R)[sage]   投稿日:2017/01/24 12:13:28  ID:NfDXKGen0.n(4)
>219
[dcl.mptr]/3 (Note) "There is no "reference-to-member" type in C++."

1184
デフォルトの名無しさん (スップ Sd1f-xrkK)[]   投稿日:2017/01/24 12:19:40  ID:9X3I9Jqtd.n(4)
>221
それだとメンバ関数のポインタの参照になってませんか
int (&func)(int) = hoge;
のメンバ関数版はできないでしょうか

constの件はうまくいきました

1185
デフォルトの名無しさん (ワッチョイ ffd9-iijN)[sage]   投稿日:2017/01/24 13:24:18  ID:kmpgWA440.n(2)
>224
thisが必要になるから無理なんじゃないの
それよりクラス内でメンバ関数へのポインタを書くとthisが必要になる

1186
デフォルトの名無しさん (ワッチョイ 6f5b-OQjX)[sage]   投稿日:2017/01/24 21:23:55  ID:GIi5sfFU0.n(2)
一生こういう些末なところに引っかかって
中身を書けない人生を送るんだろうな〜

1187
デフォルトの名無しさん (ワッチョイ cf42-Wde1)[sage]   投稿日:2017/01/25 00:27:17  ID:I9ZrCxSQ0.n(2)
uint8_tとbasic_ifstream組み合わせるといろいろ面倒なんだけど、みなバイナリファイル読み込むときどうしてんの?普通にchar使っ使う?

1188
デフォルトの名無しさん (オッペケ Sr87-mcUU)[sage]   投稿日:2017/01/25 00:35:21  ID:KGxAJ6V6r.n(2)
バイナリでchar使うのは30年前の老人の発想

1189
デフォルトの名無しさん (ササクッテロレ Sp87-Taza)[sage]   投稿日:2017/01/25 00:51:14  ID:/+qbj4+Vp.n(2)
fopenでおk

1190
デフォルトの名無しさん (ワッチョイ 037b-rTuY)[]   投稿日:2017/01/25 01:30:42  ID:5KwEWhG70.n(2)
他の型をバイト列として解釈するときは(unsigned )charしか許されてないから普通にchar使う

1191
デフォルトの名無しさん (ワッチョイ ff17-SmTw)[]   投稿日:2017/01/25 02:33:17  ID:LUWqNFoa0.n(2)
fgetc() の戻り値を直接 char 変数に代入して EOF(=-1)判定するヘマ。あるある

1192
デフォルトの名無しさん (ワンミングク MM9f-cBXx)[sage]   投稿日:2017/01/25 04:12:15  ID:nJO+CT7AM.n(4)
ねぇよ

1193
デフォルトの名無しさん (アウアウウー Sa67-OTU1)[sage]   投稿日:2017/01/25 15:31:39  ID:uJriqNlza.n(2)
fopen、fgets系は使わないな。処理をFILE*依存にしたくない

>230
>228が言ってるのはそういう意味のcharじゃないでしょ

1194
デフォルトの名無しさん (ワッチョイ cf24-RK9q)[]   投稿日:2017/01/25 21:44:43  ID:gbQNFS3L0.n(2)
FILE*に依存しないとしてじゃあ何を使うんだ?
intにも依存したくないのか?

1195
デフォルトの名無しさん (ワンミングク MM9f-cBXx)[sage]   投稿日:2017/01/25 22:01:41  ID:nJO+CT7AM.n(4)
fileno して read/writeかな

1196
デフォルトの名無しさん (ワッチョイ aacc-X95Y)[sage]   投稿日:2017/01/26 00:52:19  ID:GN6UrdAH0.n(2)
おまいら相変わらず抵レベルな話題しているな

1197
デフォルトの名無しさん (ワッチョイ 6f02-FuHd)[sage]   投稿日:2017/01/26 02:07:00  ID:cRvsGxqc0.n(2)
高レベルな人が2ch何か見てるわけないからな

1198
デフォルトの名無しさん (ワッチョイ 2613-AZYz)[sage]   投稿日:2017/01/26 06:24:12  ID:XBNxNxvo0.n(2)
>237
FILE * を使う人はどうして2chをみないのか?iostream な人はどうなるのか?

1199
デフォルトの名無しさん (スップ Sdca-kwgD)[]   投稿日:2017/01/26 08:04:45  ID:fFyxUIyid.n(2)
プログラミングにはCBDオイルというのが有効だそうです。アイデアが治療に有効するので安倍内閣総理大臣も持病に使っているそうです。
ビル・ゲイツもこれで億万長者になれました

1200
デフォルトの名無しさん (JP 0H16-T3y8)[sage]   投稿日:2017/01/26 13:11:34  ID:lD0mvySBH.n(2)
低レイヤーな釣りですね

1201
デフォルトの名無しさん (ワッチョイ 3e24-XYXB)[]   投稿日:2017/01/26 18:22:33  ID:A9/xu7Tb0.n(2)
物理層?

1202
デフォルトの名無しさん (ワッチョイ aacc-X95Y)[sage]   投稿日:2017/01/29 15:48:31  ID:Hm/zwJzS0.n(2)
この処理低レベルだねぇと言われてムキーっとなるヤツ→素人童貞
この処理低レベルだねぇと言われて得意げにほくそ笑むヤツ→玄人

1203
デフォルトの名無しさん (ワッチョイ af7b-FuHd)[sage]   投稿日:2017/01/29 16:07:03  ID:K+/fnyLa0.n(2)
すみません 低レベルな処理がが好きなんで

1204
デフォルトの名無しさん (ワッチョイ 1bc9-kHcU)[sage]   投稿日:2017/01/29 16:12:04  ID:2ZaFXkbr0.n(2)
環境・処理系固有の事情やバグに悩まされてばかりで
幸せな顔をして仕事をしている人を見たことがない

1205
デフォルトの名無しさん (アウアウカー Sa5b-seiz)[sage]   投稿日:2017/01/29 16:31:19  ID:sujTTxNda.n(2)
低レイヤって言えばいいのよ

1206
デフォルトの名無しさん (ワッチョイ 0ac0-H6k8)[sage]   投稿日:2017/01/29 22:01:55  ID:F8NpKYaN0.n(2)
コスプレイヤーの仲間かな

1207
デフォルトの名無しさん (ワッチョイ 3e24-BAqL)[]   投稿日:2017/01/30 21:07:15  ID:P5tJpKPw0.n(2)
>228
std::fstream::readの引数が【なぜ】charなのか
理解できないアフォ?

1208
デフォルトの名無しさん (ワッチョイ 6fc9-a+zf)[sage]   投稿日:2017/02/01 22:16:18  ID:zf0e/zUB0.n(2)
30年前の設計だからだ!

1209
デフォルトの名無しさん (ワントンキン MM1a-9Rjx)[]   投稿日:2017/02/01 22:52:40  ID:mWAIN14mM.n(2)
むしろバイナリでchar以外何使うんだ?

1210
デフォルトの名無しさん (ワッチョイ 137b-1ST5)[sage]   投稿日:2017/02/02 00:40:35  ID:kju30PyH0.n(2)
いやバイナリならどう読もうが書こうがいいと思うが。
てか疑問の意味がわからん。

1211
デフォルトの名無しさん (ワッチョイ 7fcf-1ST5)[sage]   投稿日:2017/02/02 01:35:32  ID:FXYEZ0RW0.n(2)
>250 そんなんじゃ type based aliasing rule に殺されるよ

1212
デフォルトの名無しさん (ワッチョイ 1302-1ST5)[sage]   投稿日:2017/02/02 01:58:08  ID:hMTSyXzS0.n(2)
何か動作がおかしいときになってから考えれば良いんだよ
標準的な環境では考える必要は無いこと

1213
デフォルトの名無しさん (ワッチョイ cf24-1aN8)[]   投稿日:2017/02/02 22:10:32  ID:1pIxEkoa0.n(2)
真性アフォが早くも三名か。嘆かわしい。

1214
デフォルトの名無しさん (オッペケ Sra7-dUno)[sage]   投稿日:2017/02/03 08:10:44  ID:HxuiJzZXr.n(2)
真性のアフォの内の二人くらいは
たいてい片山の自演

1215
デフォルトの名無しさん (スップ Sd9f-aC2u)[sage]   投稿日:2017/02/03 13:51:28  ID:+x5EsLXNd.n(4)
新卒一年目で過去のコードをバージョンアップさせる業務についてるんだけど
会社のコードってなんであんなにdefine切ったりtypedefしまくってるんだ?
可読性低くない?始めて作った人には良いだろうけど後のこと考えるとデメリットなんではって思うんだけど...

1216
デフォルトの名無しさん (ワッチョイ 6f6c-i1/f)[sage]   投稿日:2017/02/03 13:57:14  ID:Fv/X2f+d0.n(2)
場合によるからなんとも

1217
デフォルトの名無しさん (ワッチョイ 7f7b-1ST5)[sage]   投稿日:2017/02/03 15:21:22  ID:cyynpkXi0.n(2)
一年目か凄いね

1218
デフォルトの名無しさん (アウアウカー Sae7-mIyn)[sage]   投稿日:2017/02/03 16:26:23  ID:oWJS3iiDa.n(2)
スマン、片山って誰ンゴ?

1219
デフォルトの名無しさん (スップ Sd9f-aC2u)[sage]   投稿日:2017/02/03 17:44:58  ID:+x5EsLXNd.n(4)
>256
それを言っちゃあおしまいだよ...と言いたいけどまさにそうか
windowsapiが絡んでくると本当にわけがわからなくなる
MSDNも読みにくいし

1220
デフォルトの名無しさん (ブーイモ MMc7-plQq)[sage]   投稿日:2017/02/03 19:35:01  ID:8SRwU46KM.n(2)
参考までに、どんなdefIneやtypedefなん?

1221
デフォルトの名無しさん (ワントンキン MM1f-fOGj)[sage]   投稿日:2017/02/03 21:14:55  ID:DgoKILm5M.n(2)
>255
情報が増えるtypedefは正義
たとえば、
typedef std::vector<int> personal_id_array_type;

減るtypedefはゴミ
たとえば、
typedef std::vector<int> array_type;

1222
デフォルトの名無しさん (ワッチョイ a3a6-0MWP)[sage]   投稿日:2017/02/03 21:24:44  ID:2s9sq5BM0.n(2)
>261
情報の増減がどこにあると?

1223
デフォルトの名無しさん (ワッチョイ 937b-aC2u)[sage]   投稿日:2017/02/03 21:43:49  ID:flkT/o5k0.n(2)
>260
>261の前者・後者両方ともある
あと色々な名前で__stdcallが切られてたりして読むのがきつい

1224
デフォルトの名無しさん (ワッチョイ a37b-jpzQ)[]   投稿日:2017/02/03 22:05:00  ID:ubtIaYbs0.n(2)
ちなみにお前らの思うきれいなソースって具体的にどれよ

1225
デフォルトの名無しさん (スッップ Sd9f-oUAv)[]   投稿日:2017/02/03 22:11:40  ID:7t2mdctmd.n(2)
glm

1226
デフォルトの名無しさん (ワッチョイ cf24-1aN8)[]   投稿日:2017/02/03 22:55:16  ID:aXFSiqlm0.n(2)
261が言ってるのは
システムハンガリアンとアプリケーションハンガリアンてことだ
ハンガリー記法に限らず意味づけと言うまでもないことを
どう位置づけるべきかってこと

1227
デフォルトの名無しさん (ワッチョイ c35b-0MWP)[sage]   投稿日:2017/02/03 23:39:20  ID:CYbB7nGp0.n(2)
>255
変更しやすくする為じゃないの?
一箇所でそれ関連を纏めて変更したいんでしょ。
今は偶々同じ std:vector<int> なだけで。

1228
デフォルトの名無しさん (ワッチョイ 1302-1ST5)[sage]   投稿日:2017/02/04 00:17:30  ID:DV7gEIN40.n(4)
m_ulDataCntとか全く意味を持たない変数名が多用されてて辛いわ
コメントも無い

1229
デフォルトの名無しさん (ワッチョイ ffc0-Sup+)[sage]   投稿日:2017/02/04 05:48:10  ID:/r5Uxr2+0.n(2)
>264
ソースは俺

1230
デフォルトの名無しさん (ワッチョイ 937b-aC2u)[sage]   投稿日:2017/02/04 06:49:15  ID:JWHU8o9P0.n(2)
>267
なんか小難しい
定義されたものをさらに定義して
さらにさらに定義してってのをやってるのも同じなんかな?
見たことない型を追うだけで何ヵ所も追わないといけなくて大変
コメントもないし

1231
デフォルトの名無しさん (ワッチョイ d3dc-0e9Z)[sage]   投稿日:2017/02/04 07:32:17  ID:uizo/+L30.n(2)
>268
字面だけで推測するなら m_ulDataCnt は
m_ クラスのメンバ変数である
ul unsigned long
DataCnt データの個数
てな感じに見えるね。

元のソースファイルが一貫した命名規則を使ってれば
それがどんな規則であれ、見てるうちに慣れてくると思うよ。

1232
デフォルトの名無しさん (ワッチョイ 7fcc-ysPd)[sage]   投稿日:2017/02/04 07:39:17  ID:6QMeFViK0.n(4)
クソみてぇな命名規則

1233
デフォルトの名無しさん (ワッチョイ c35b-0MWP)[sage]   投稿日:2017/02/04 08:42:25  ID:UEIbCXwH0.n(6)
>270
基本的にはそうでしょ。
ある物をdoubleにするかfloatで済ますかという場合、系統毎にtypedefをしてそれを使うしかない。
クラスの継承も同じだと思うけど。

というか読み方間違ってるだろ。まずは縦に読まずに横に読めよ。
そしてそれ以前に上司に聞けよ。
どのみちソースは出せないのだろうから、ここでいくら聞いてもかなり憶測を含んだ回答しか得られない。

コメントが無いのを問題に思うのなら、コメントを付けるのもお前の仕事だろ。
ただ正直言って、m_ulDateCntは>271の言うとおりだろうし、そんなところにコメントがあっても嬉しくない。
多分君とそのソースでコメント作成基準に大幅にずれがある。
それは上司と打ち合わせしないと駄目だ。
最近の傾向としては、「コード読めば分かることをコメントするな!」みたいなのがあるが、
君はまさにその類のコメントを付けようとしている。
ただ逆に、何事であってもコメントを付けて二重化し「間違っていない」事を示す文化の所もある。
いずれにしても合わせるしかないんだから上司に聞け。

1234
デフォルトの名無しさん (ワッチョイ a37b-jpzQ)[]   投稿日:2017/02/04 08:49:53  ID:XS0fIkHD0.n(6)
とりあえずシステムハンガリアンは糞

1235
デフォルトの名無しさん (ワッチョイ cf24-1aN8)[]   投稿日:2017/02/04 10:35:39  ID:BOsvOfBI0.n(2)
doubleかfloatかに迷いがあるときはtemplateだろjk

1236
デフォルトの名無しさん (ワッチョイ cf6b-aC2u)[sage]   投稿日:2017/02/04 20:11:06  ID:tL9rMbFt0.n(4)
>271
こういうの読めるようになりたい
アンダーバーとかなんか特徴あるんかね?

1237
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK67-DkDD)[sage]   投稿日:2017/02/04 20:13:21  ID:sK4bvJ1nK.n(2)
>276
MFCのソース見れば時代遅れのハンガリアンが見れる。

1238
デフォルトの名無しさん (ワッチョイ 7fcc-ysPd)[sage]   投稿日:2017/02/04 20:29:05  ID:6QMeFViK0.n(4)
MSのバカ社員が勘違いしてシステムハンガリアンが出来た

1239
デフォルトの名無しさん (ワッチョイ c35b-0MWP)[sage]   投稿日:2017/02/04 20:32:51  ID:UEIbCXwH0.n(6)
>276
むしろどこが読めないんだ?
271以外の解釈はないだろ。

1240
デフォルトの名無しさん (ワッチョイ 7f3c-ZDta)[sage]   投稿日:2017/02/04 20:36:47  ID:pJMir97a0.n(4)
>276
パターン認識って言うか慣れでしょ
いろんなソース見てりゃだんだんなれてくるよ

1241
デフォルトの名無しさん (ワッチョイ cf6b-aC2u)[sage]   投稿日:2017/02/04 20:37:44  ID:tL9rMbFt0.n(4)
ハンガリアンってなんだ
ってレベルで初めて見るわ

>279
それは規則とか法則とか知ってるから読めるんだろ
大まかに言えば経験が違いすぎる
なら読めよって話だけどさ

1242
デフォルトの名無しさん (ワッチョイ 1341-qcXh)[]   投稿日:2017/02/04 20:41:51  ID:URlnQv8F0.n(2)
場合によってはハンガリアン記法にすべきものもあるかもしれないけど
全ての変数に対してやるのはどうなんでしょ?

1243
デフォルトの名無しさん (ワッチョイ 1302-1ST5)[sage]   投稿日:2017/02/04 21:08:08  ID:DV7gEIN40.n(4)
クラスの先頭にCを付けるのだけは全くの無駄だからやめて

1244
デフォルトの名無しさん (ワッチョイ a37b-jpzQ)[]   投稿日:2017/02/04 21:13:17  ID:XS0fIkHD0.n(6)
>282
それでもulとか環境によってサイズが変わる名前付けるのイミフだけどな

1245
デフォルトの名無しさん (ワッチョイ c35b-0MWP)[sage]   投稿日:2017/02/04 21:14:27  ID:UEIbCXwH0.n(6)
>281
いや多分、そのソース見たらそんなんばっかだから大体分かると思うぞ。

一応説明しておくと、
m_: method_ の略。(member_かも?)
頭に付けたらインテリセンスでソートされて便利とか言っていた奴もどこかのスレにいたはず。
(メソッドなのかフィールドなのか一目瞭然ということらしい。既に出ているが頭のCもそういう理由)
他でもルール的に「頭に」何か付けるのはよくある話。
MSのVC++のローカル拡張なら __int64 とか、頭に __(二重アンダースコア) がついている。
googleだとprivateは頭に _ だったかな?
(なおgoogleはメソッドは動詞、フィールドは名詞を使えとか言っていたはず)
サフィックスはユーザーが勝手に使い、プリフィックスはシステム側でルールとして使う。

ulはそのまま unsigned long の略。Cなら元の型は数種しかないから想像はつくだろ。
DataCntはDataCountの略。短くする時には母音(aiueo)を抜く。(子音だけでも何となく分かるから)

そんなに経験の差って程の物でもないと思うが。
もっとも俺は無駄に頭に付けたり略したりしないので、このルールなら嫌いだが。

1246
デフォルトの名無しさん (ワッチョイ a37b-jpzQ)[]   投稿日:2017/02/04 21:24:54  ID:XS0fIkHD0.n(6)
補足
* グローバルスコープでアンダースコアで始まる
* アンダースコアで始まって大文字が続く
* 二重アンダースコアを含む
に合致する名前は規格で処理系によって予約されてるからコンパイラとそれに付属する標準ライブラリーを実装する人以外は使っちゃダメ

1247
デフォルトの名無しさん (ワッチョイ 7f3c-ZDta)[sage]   投稿日:2017/02/04 21:42:33  ID:pJMir97a0.n(4)
>285
> m_: method_ の略。
そんなわけないだろ...

1248
デフォルトの名無しさん (ワッチョイ ffc0-Sup+)[sage]   投稿日:2017/02/05 00:12:45  ID:NucUcCyo0.n(2)
グーグルはメンバ変数の最後に_
クソ過ぎわろた

1249
デフォルトの名無しさん (ワッチョイ 7fc1-AkR4)[sage]   投稿日:2017/02/05 00:14:15  ID:nBEZPMY50.n(4)
>288
結構あるくね?
インスタンスに付けるてのもよく見る

1250
デフォルトの名無しさん (ワッチョイ 3342-fOGj)[sage]   投稿日:2017/02/05 00:41:54  ID:mLcywPgQ0.n(4)
>288
え、なんで?
this->でもいいけど

1251
デフォルトの名無しさん (ワッチョイ cf6b-aC2u)[sage]   投稿日:2017/02/05 00:56:14  ID:6qCMRDqV0.n(6)
アンダーバーを変数に付けるのは慣れないと気持ち悪く見えるな
今は慣れたけどなんでついてるかなんて考えたことがない