[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2ch.scのread.cgiへ]
Update time : 03/25 20:45 / Filesize : 142 KB / Number-of Response : 589
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part123



1 名前:デフォルトの名無しさん mailto:sage [2016/02/21(日) 16:36:27.08 ID:jZESqUY+.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part122
peace.2ch.net/test/read.cgi/tech/1453557975/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】
peace.2ch.net/test/read.cgi/tech/1439849418/

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

116 名前:デフォルトの名無しさん mailto:sage [2016/02/27(土) 22:26:19.05 ID:TnvXsjWd.net]
>>113
あのさ、ここは2チャンネルであって、基本的に初心者が集まる場所なんだよ?
昔とは違うんだ。わかるか?

117 名前:デフォルトの名無しさん mailto:sage [2016/02/27(土) 23:38:42.62 ID:bRJMsBK5.net]
>>116
馬鹿の無根拠な妄言ktkr

118 名前:デフォルトの名無しさん mailto:sage [2016/02/27(土) 23:53:52.62 ID:TnvXsjWd.net]
もともとは>>109の発言

119 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 09:01:53.38 ID:p5UOgBYD.net]
昔ってなんだ? ネットニュースか?

120 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 09:51:52.96 ID:sxXcnRPc.net]
>>100
14歳からはじめるC言語オンラインゲームプログラミング
15歳からはじめるDirectX9 3Dゲームプログラミング教室
14歳からはじめるシリーズ~ あと二冊

121 名前:デフォルトの名無しさん [2016/02/28(日) 10:59:04.87 ID:yeDT/yDi.net]
Compositeデザインパターンでcomposite1のchildlenの型をcomponentの配列ではなくcomposite2の配列に限定し、composite2のchildrenはleafのみの配列に限定したいのですが、どのようにしたらいいのでしょうか?

122 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 13:29:41.30 ID:w64tNJjH.net]
それはコンポジットパターンなのか?

123 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 13:48:26.49 ID:5n5R60tK.net]
それだけじゃ型を明示しろよとしか思えんが

124 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 14:19:39.94 ID:tz1QY8TO.net]
そういうふうに組めばいいとしか言いようがない。
組む際に何がネックになってるのかね。



125 名前:デフォルトの名無しさん [2016/02/28(日) 17:19:18.45 ID:yeDT/yDi.net]
>>123
>>124
Compositeでchildrenの型としてComponentを用い、それを継承してComposite1とComposite2を作ったら
これらのchildrenの型が自動的にComponentになってしまうのでどこでどうやって型を明示すればよいのか困っております

126 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 17:35:13.98 ID:emPXsfmM.net]
型を限定したいとか明示したいとか言ってる時点でCompositeパターンを使うのは間違いなんじゃない?

127 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 18:05:44.76 ID:jJK+500Y.net]
配列要素の型を限定したい(componentの配列ではなくcomposite2の配列に限定したい)というのはいかんともし難い
配列要素の型を明示したいだけなら多態性がわかっていれば問題なくできるはず…

ただし、インスタンスの配列で多態性をやるには配列要素の型は基底クラスでなく派生クラスにする必要があり、
派生クラスが2種類(以上)あるcomponentパターンはできない

この場合の配列は基底クラスを指すポインタの配列であるべきなのでは…

※ 個人の感想です。

128 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 18:27:33.71 ID:fFRYdAaf.net]
配列を持つコンポーネントにして、visitorと組み合わせるってのはダメなのかな

129 名前:デフォルトの名無しさん [2016/02/28(日) 18:28:25.88 ID:yeDT/yDi.net]
>>122,>>126
Compositeパターンじゃなくてもいいのですが、childrenに対する操作は同じ操作がたくさんあるので継承したいのです。
しかしcomposite1はcomposite2にしかないメソッドを呼び出すこともあり、この時ダウンキャストするのを出来れば避けたいと思っております。
>>127
やはり限定するのは難しいですか……
すみません、
>配列要素の型を明示したいだけなら多態性がわかっていれば問題なくできるはず
というのは何を使って明示することを想定されているのか教えていただけないでしょうか?

130 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 19:11:55.42 ID:c40FCrwk.net]
登場人物がComposite1とComposite2とLeafだけなら、普通にComposite1::getChild()は
Composite2を返してComposite2はLeafを返せばいいだけだろ。

131 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 19:52:22.72 ID:PMSRihXY.net]
>>125
「これらのchildrenの型が自動的にComponentになってしまう」
↑ここが何かおかしい。んなわけねーだろ、と。
ほんとうにそんなところまで Composite が制約を加えてるなら、そこが問題。

>>129
ダウンキャストして済むならそれで済ませればいいだろうとも思う。
「避けたい」の具体的な理由があるのかと。

132 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 20:57:13.19 ID:gim467qR.net]
>>129
childrenに対する操作の一部を共通化したいだけなら、
こんな感じでCompositeに共通処理を集めるだけじゃ駄目かね。

template<class Child> class Composite { /* 共通処理 */ };
class Leaf { };
class Composite2 : public Composite<Leaf> { /* Leafだけの処理 */ };
class Composite1 : public Composite<Composite2> { /* Composite2だけの処理 */ };

133 名前:デフォルトの名無しさん [2016/02/28(日) 21:20:23.21 ID:yeDT/yDi.net]
>>131
class composite{
vector<shared_ptr<component> > children;
}

class composite1:public composite{
}

の形で実装したらcomposit1のchildrenはcomponentになると思っていましたが、違ったでしょうか?
ダウンキャストを避けたいのは単に私が管理しきれなくなりそうだからです

>>132
おっしゃる通りの実装で解決しました。
たしかにtemplateを使えば私の望む動きをしてくれます。
分かりやすく素晴らしい回答大変ありがとうございました。

134 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 21:27:42.44 ID:emPXsfmM.net]
妙に早いな



135 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 21:33:54.60 ID:PMSRihXY.net]
>>133
配列実体の持ち方を composite で決めてしまっているところが問題だということ。

class composite{
virtual component& nth_child(int n) = 0;
}

class composite1:public composite{
vector<shared_ptr<compisite2> > children;
}

こうしておけばよかったんじゃないかと思うんだけど >132 で解決したならいいかな。

136 名前:デフォルトの名無しさん mailto:sage [2016/02/28(日) 22:12:35.00 ID:jJK+500Y.net]
お禿げ様はインターフェースは一般に最初の基底クラスに全て集まる傾向にあるとはどっかに書いてたが
実装まで最初の基底クラスに集約するのが良い設計なのかどうか…

Cmposite1、Comosite2だけならまだしも
Cmposite3、Comosite4、…と増えていった場合に都度Compositeクラスのソースコードが編集され、肥大化していくんやで〜

137 名前:デフォルトの名無しさん mailto:sage [2016/02/29(月) 05:58:03.54 ID:j6jzPb2d.net]
Mixin的な使い方に限るなら問題ないでしょう。
継承が嫌なら、Compositeをメンバ変数にするとか、
vectorを受け取る関数テンプレート群にしてしまうとかすればいいし。

138 名前:デフォルトの名無しさん [2016/03/02(水) 23:08:12.47 ID:g3p9uXMc.net]
C++の質問です。

ウィンドウハンドルHWND型を数値化する方法をご教授下さい。

何をしたいのかというと、VisualStudio付属のspy++を使用して、
色々な事をしています。

spy++の各ウィンドウの「ウィンドウ」文字列の右にウィンドウハンドルID?のような、
ウィンドウ毎に一意につけられたIDが表示されています。
このIDを取得したいのです。

なのでウィンドウハンドルHWND型を数値化出来れば、上記spy++のウィンドウハンドルID?
と同じ物を取得できると考えました。

よって、ウィンドウハンドルHWND型を数値化する方法をご教授下さい。
※もしかしたら目的と実施しようとしている事が間違っているかもしれません
※その場合は正しくウィンドウハンドルID?を取得できる方法をご教授下さい

139 名前:デフォルトの名無しさん mailto:sage [2016/03/02(水) 23:26:29.94 ID:v5tMoIR7.net]
>>138
size_t id = reinterprete_cast<size_t>(hwnd);

140 名前:デフォルトの名無しさん mailto:sage [2016/03/02(水) 23:57:02.22 ID:9ZwWQH++.net]
なぜそこでstd::intptr_tでなくsize_tが出てくるのか不思議

141 名前:デフォルトの名無しさん mailto:sage [2016/03/03(木) 05:25:34.43 ID:tlFkd89Q.net]
しかもreinterpret_cast<&size_t>じゃないとパンニングできないし

142 名前:デフォルトの名無しさん [2016/03/03(木) 05:55:57.70 ID:vKHIYEam.net]
uint32_t id = (uint32_t)(uintptr_t)hwnd;

で問題ないよ

143 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/03(木) 06:01:02.75 ID:UnIH0jHm.net]
>>142
hwndが64ビットの可能性

144 名前:デフォルトの名無しさん [2016/03/03(木) 06:03:58.47 ID:vKHIYEam.net]
>>143
https://msdn.microsoft.com/en-us/library/windows/desktop/aa384203%28v=vs.85%29.aspx



145 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/03(木) 06:18:15.21 ID:UnIH0jHm.net]
#include <cstdint>
uint32_t id = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(hwnd));

C++スタイルのキャスト、めんどい

146 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/03(木) 06:22:38.14 ID:UnIH0jHm.net]
Windows限定ならcstdint要らないかな?

UINT id = static_cast<UINT>(reinterpret_cast<UINT_PTR>(hwnd));

147 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/03(木) 06:27:13.98 ID:UnIH0jHm.net]
Win16じゃ動かないんだな

148 名前:デフォルトの名無しさん mailto:sage [2016/03/03(木) 06:42:45.53 ID:+JeDUCvS.net]
16ビットオブジェクトを出力できるコンパイラ未だもってんのか?

149 名前:デフォルトの名無しさん [2016/03/03(木) 08:31:20.27 ID:6K3/+EIJ.net]
>>138

ありがとう解決しました。
.Netの世界の文字列型に変換する必要があるので以下としました。
String^ hw_id = static_cast<UINT>(reinterpret_cast<UINT_PTR>(this->hw)).ToString("X");

150 名前:デフォルトの名無しさん mailto:sage [2016/03/03(木) 08:36:11.53 ID:km2vGawV.net]
>>148
持ってるか?
って聞かれたら、
Visual C++ 1.52c が押し入れのどこかに眠ってるはず
って答えることにしてる

151 名前:デフォルトの名無しさん mailto:sage [2016/03/03(木) 11:36:15.96 ID:DPHy8aYb.net]
>>148
昔手に入れたLSI Cの試食版の方ならたしかどこかに・・・

152 名前:デフォルトの名無しさん mailto:sage [2016/03/03(木) 12:03:10.46 ID:mDpo7bQQ.net]
Cマガ電脳倶楽部

153 名前:デフォルトの名無しさん mailto:sage [2016/03/03(木) 12:50:10.40 ID:ECv4uLci.net]
ビジアルシー2についてるのがある。

154 名前:デフォルトの名無しさん mailto:sage [2016/03/03(木) 20:25:35.72 ID:km2vGawV.net]
>>153
それが >>150 だよ
大元の Visual C++ 2.0 は捨てたかも知らんけど、1.52c はなぜか捨てられない



155 名前:デフォルトの名無しさん mailto:sage [2016/03/03(木) 20:47:49.02 ID:+JeDUCvS.net]
1.52って5.24" FDDだったりしない?

156 名前:デフォルトの名無しさん mailto:sage [2016/03/03(木) 21:13:16.06 ID:km2vGawV.net]
>>155
単品売りは知らんけど 2.0 付属の奴は1995 年だから、1.52c も普通に CD-ROM だよ
https://ja.m.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#.E6.A6.82.E8.A6.81

157 名前:デフォルトの名無しさん mailto:sage [2016/03/03(木) 21:20:26.58 ID:+JeDUCvS.net]
そう言えば、32ビットWindowsもう動態保存してるの無いや

double spaceからサルベージするためにWin98SEをqemuかvboxにいれたイメージがどこかにあるはずだけど

158 名前:デフォルトの名無しさん mailto:sage [2016/03/04(金) 09:04:28.30 ID:TYlQwhRh.net]
strcopyを代入演算子=に置き換えてみればわかるだろ

159 名前:デフォルトの名無しさん [2016/03/04(金) 10:00:38.32 ID:wO5/jJwK.net]
は?どこの誤爆だよ
それにstrcopyなんてものは聞いたこともないぞ
朝からクソ酔っ払ってる俺よりもトンチンカンな事書き込むってどんだけヤバイ薬やってるんだよ

160 名前:デフォルトの名無しさん mailto:sage [2016/03/04(金) 10:05:52.57 ID:4C3oKPHs.net]
俺に聞け

161 名前:デフォルトの名無しさん [2016/03/05(土) 16:26:40.97 ID:Uw046/hC.net]
初心者です。
c++で文字を入力するとそれを出力するものをビルドしたら、出力した後すぐにビルドが終わってしまいます。
出力後に画面を固定する方法はありませんか?

162 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 16:33:23.72 ID:yY6Am1xo.net]
ビルドじゃなくてデバッグ実行だろ?
ひとまずVSと仮定して、適当にブレークポイントでも打っとけば?

163 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 16:33:48.17 ID:niBmwPNn.net]
>>161
入力待ちを利用する

164 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 16:36:24.81 ID:TtOs9IsN.net]
環境を書かないと



165 名前:デフォルトの名無しさん [2016/03/05(土) 16:53:34.22 ID:Uw046/hC.net]
<<163
出来そうです。有難うございました。

166 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 17:01:13.18 ID:e8RWR+IR.net]
デバッガーで実行(F5)ではなく、デバッガー無しで実行(ctrl-F5)すれば良い

167 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 17:42:59.14 ID:u5sweskK.net]
いやそういう話じゃないし質問者は解決したみたいだから

168 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 18:15:07.47 ID:eQxVJDBh.net]
system("pause");

169 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 19:06:42.96 ID:e8RWR+IR.net]
いや、確実にそういう話だよ。
そういう話じゃないなら、どう言う話だよ。

170 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 19:35:57.25 ID:u5sweskK.net]
はあ?入力文字の出力直後にコンソール消えちゃった(泣)のありがちパターンに決まってるだろ
なんでそれが分らないんだよ

171 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 19:47:02.21 ID:oAjMaO0h.net]
>>170
だからそういう話だろう。

172 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 19:56:15.67 ID:u5sweskK.net]
>>171
もしかして、それがデバッガで実行するかそうじゃないかで変わるとでも思ってるのか?

173 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 19:57:35.25 ID:e8RWR+IR.net]
その、ありがちなパターンがどう言う状況で生じるのか、わからないのか?
PostMessage監視してろよ

174 名前:デフォルトの名無しさん [2016/03/05(土) 19:59:34.21 ID:e8RWR+IR.net]
>>172
もしかして、それがデバッガで実行するかそうじゃないかで変らないとでも思ってるのか?



175 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 20:00:46.88 ID:TtOs9IsN.net]
多分そうなんだろうけど、決めつけはしない方が良いかと

176 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 20:03:50.62 ID:45RldPY2.net]
PostMessageさんはもう許してやれよ

177 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 20:41:09.94 ID:e8RWR+IR.net]
>>175
俺の推測は完璧だ。
キミも後10年PostMessage監視してれば、「環境書け」とかバカのひとつ覚え繰り返さなくても済むようになるかもね。

178 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 20:41:10.45 ID:oAjMaO0h.net]
実際変わるよねぇ
VSだと。

179 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 21:15:14.82 ID:u5sweskK.net]
ホントだ知らんかったわ。どうなってるんだこれ?
でもデバッガ無しかどうかの問題じゃないわな

180 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 21:41:59.15 ID:NhCRzDCm.net]
みんなの書き込みがまるでわかんないんだけど
やっぱり PostMessage から勉強しなきゃいけないと、そういうこと…?

181 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 21:50:07.17 ID:u5sweskK.net]
>>177
たしかに俺はPostMessageについて書いた者だが
キミは
while (PostMessage(hWnd, WM_NULL, 0, 0))
と64メガのVirtualAllocで証明終了!君か
これをバカ呼ばわりされたのがよっぽど悔しかったみたいだな

CTRL-F5についてはいいことを教えてもらったよありがと
exe直接起動と振る舞いが違うんじゃ使うことはないだろうけど

もう一度言っておくけどキミがしつこく言ってる「PostMessageの失敗がメモリ不足の兆候になる」なんて俺は一言も言ってないからw

182 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 21:58:24.08 ID:e8RWR+IR.net]
>>181
自信満々で、物凄くあたま悪い発言をして、しかも、その頭悪さを理解してないバカは
日本中探してもそんなに多くは無い。


471 デフォルトの名無しさん[sage] 2016/02/09(火) 08:07:47.87 ID:GGDlYrLi

Windowsでエクスプローラその他殆どのアプリがメモリ不足死んだ状態でも生き残らななきゃ
いけないシステム監視ソフトを書いたことがある俺に言わせるとそれほど難しいことじゃない
Windowsの場合、メモリアロケーションに失敗する前にPostMessageが失敗するようになるから
その辺に対応するのがコツ

183 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 22:04:16.82 ID:u5sweskK.net]
>>182
それが「PostMessageの失敗がメモリアロケーション失敗の兆候を知ることが出来る」としか読めないわけか
そんなんだから
while (PostMessage(hWnd, WM_NULL, 0, 0))
と64メガのVirtualAllocで証明終了!
になっちゃうんだよCTRL-F5クン

184 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 22:17:53.94 ID:e8RWR+IR.net]
プライドだけ高いバカって始末に負えないな
ま、バカだから虚栄張ってないと世渡りできないんだろうが



185 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 22:21:58.02 ID:NhCRzDCm.net]
よくわかりました。ありがとう

186 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 22:43:46.74 ID:KlM00wBU.net]
環境はVC++2010です
セミコロン『;』について質問ですが

クラスの場合
class Test
{ ..... };
『}』の後ろに『;』がついています

class Test
{ ..... } obj ;
この様に『}』と『;』との間に記述すれば
『obj』というオブジェクトが生成
という事を最近知りました

構造体で同じことを試したら
オブジェクトが生成できました

配列、列挙体に同じ事をしたらエラーになります
配列、列挙体の『;』は何ですか?

187 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 22:52:37.60 ID:oAjMaO0h.net]
文の終端記号
文法上そうなっている。
変数定義構文だから。

配列がどういう記述をしているかはわからないが、enumでもいけるだろ。

namespaceは要らないのよね。

188 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 23:12:16.43 ID:xWrvFPw5.net]
ID:u5sweskK はコンソールアプリのデバッガ有り無しで動作が変わることも
知らなかったのに、結局偉そうなんだな
どうしようもないな
そんなことだからPostMessageなんだよ
サブスレッドから結果を返す為にPostMessage使ったんだって?バカ

189 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 23:29:40.33 ID:oC+37Qlp.net]
valgrind使いものにならないさんか。
Visual Studioの挙動も知らずposix環境のツールも使えず一体何だったら知ってるんだろうか?

190 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 23:42:02.63 ID:VRv8TvnQ.net]
え、valgrind使い物にならないも、postmessageさんなの?
だとしたら、ほんとすげぇなwww

191 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:05:21.79 ID:ChxbUFgQ.net]
10年以上前にPostMessageを駆使した監視プログラム作ったらしい
会社勤めなら中堅どころなはずだが、これだけ無能な奴も珍しい
良く辞めずに続いてると思う

己の無能さを理解出来ないバカが最強って事だな

192 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:11:04.70 ID:LHysMdWz.net]
だいぶ前にclassのデフォルトアクセス範囲をpublicにすべきっていってたのもpostMessageさんな気がする

193 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:13:58.16 ID:FS9V5eXL.net]
いつまでこのネタをひっぱるんだろう
そんなに話題がないのか?
終わってる言語なのか?

194 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:19:35.66 ID:Brtwb7pX.net]
構文解析のオススメ書籍教えてください



195 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:26:27.79 ID:Vcl9wz74.net]
namespaceをどう使えばいいかわかりません。
基本的に○○.hのクラスの中で定義して、○○.cppで実装すれば良いのでは?、と考えています。
namespaceを利用する理由は何ですか?

196 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/06(日) 00:31:44.13 ID:EizY3BRi.net]
>>195
他の人が作ったソースを参照するときに名前が衝突しないようにするためだろうね。

197 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:33:35.07 ID:R4Ql0hHb.net]
いろんなところからライブラリを持ってきてくっつけてアプリケーションを開発するのに、クラスや関数に名前やシグネチャかぶりがあったらコンパイル通らないじゃないか。

198 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:34:08.24 ID:LHysMdWz.net]
>>195
名前だけで個人を識別してくださいって言われたらどう思う?
いやいや苗字もあったほうが識別しやすいよと思うだろ?
そんな時に使うんだよ

199 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/06(日) 00:50:13.80 ID:EizY3BRi.net]
std::shared_ptrとboost::shared_ptrという二種類のshared_ptrがある。
stdとboostという2つのnamespaceにより同時に使っても名前は衝突しない。
また、using std::shared_ptr;のようにしてshared_ptrを切り替えて使うことができる。

200 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:53:06.89 ID:0RQOBmjP.net]
同じネームスペースの{}内に属しているクラスや関数同士で
定義の前後関係なく後ろにあるものも参照できるようになるのはいつですか?
いわゆる後方参照?と呼ばれるものだと思うのですが

今でも、同じクラス内に有るクラスやメソッドは記述の前後関係なく参照できますが
同じクラス内に定義が有るものは後方参照が可能な理由は、私が思うに
「同じクラス内に存在している」->「同一コンパイル単位に存在している」
という式が成り立つからだと思うんですよ
C++は分割コンパイルをサポートしている上に、C譲りのヘッダシステムなので
コンパイル単位を跨いで後方参照をするのが無理なのはわかります
そこで、同一クラス内に定義が有るなら必ず同じコンパイル単位に属するのは明白なので
これをもって、後方参照が可能になっているのかと
だったら、同じように同一ネームスペースの{}内に定義が有るクラスや関数も必ず同一コンパイル単位なわけですから
(何故なら{}は必ず対応していなければならないのだから)
後方参照が出来ても問題ないように思うのですが

細かいことを抜きにして、同一コンパイル単位内であれば後方参照が可能になれば良いんですが
部分的には既にできているわけですし

201 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/06(日) 00:55:01.26 ID:EizY3BRi.net]
また、名前空間というまとまりがあることも重要だ。
まとまりがなければ、プロジェクト全体を見ることになって、維持コストがかかる。

202 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:57:14.96 ID:PT9uiEbB.net]
>同一ネームスペースの{}内に定義が有るクラスや関数も必ず同一コンパイル単位
え?

203 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:58:30.86 ID:2oASoSJR.net]
10年前にPostMessageを使った監視プログラムを発明した奴に
リファレンスも読めずマトモに反論出来なかった低能の自演がまだ続くのか

204 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 01:05:53.01 ID:2oASoSJR.net]
>>187
>文の終端記号
規格のどこを読むとそうなるのかkwsk



205 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 01:16:52.82 ID:2oASoSJR.net]
>>189
>posix環境のツールも使えず
ほうほう、valgrindが一体POSIXの第何章で規定されているのですか?

206 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 02:17:18.54 ID:tuNXTXW3.net]
>>184
いやー>>165で質問者が「入力待ちを利用する」という正しい方法で解決してるのに
しゃしゃり出てきてCTRL-F5などというバッドノウハウを披露するキミの捻れたプライドには到底及ばないよ

207 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 02:29:09.64 ID:tuNXTXW3.net]
よっぽどPostMessageがウケたみたいだけど
今ではWindowsでもLinuxでもメモリリーク検出とかにはInspector(インテル)を使ってるよ

208 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 04:05:47.59 ID:ChxbUFgQ.net]
こいつ本物のヴァカだ

209 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 04:07:10.17 ID:ChxbUFgQ.net]
471 デフォルトの名無しさん[sage] 2016/02/09(火) 08:07:47.87 ID:GGDlYrLi

Windowsでエクスプローラその他殆どのアプリがメモリ不足死んだ状態でも生き残らななきゃ
いけないシステム監視ソフトを書いたことがある俺に言わせるとそれほど難しいことじゃない
Windowsの場合、メモリアロケーションに失敗する前にPostMessageが失敗するようになるから
その辺に対応するのがコツ

210 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 04:47:19.07 ID:Vcl9wz74.net]
>>196->>199
よくわかりました。
ありがとうございます。

211 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 06:01:58.25 ID:2oASoSJR.net]
最初>>167>>206の考えで言っているのだろうと思っていたら
>>179のレスで少し驚いた

212 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 06:10:40.49 ID:1plcRuJs.net]
他の言語からの移行組ですが正直吐き気が止まりません
この言語は頭おかしいんじゃないんですか?

213 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 07:52:12.28 ID:r0r1JwnR.net]
言語自体が「頭おかしい」かは分からないけど…。

ストラウストラップ先生は頭(の外観が)おかしい。
規格の変化の激しさ(不安定さ)を見ると規格作成者は頭おかしい。
このスレッドの住人も頭おかしい(この発言の投稿者も含む)。

C++の村へようこそ。

214 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 08:10:32.19 ID:oNsCkDHW.net]
C#の自動実装プロパティみたいなの実装される予定ある?



215 名前:デフォルトの名無しさん [2016/03/06(日) 08:29:03.39 ID:py9p5YRa.net]
>>187
どうもありがとう
enumも通りました
列挙型は列挙子しか代入できない事を理解していませんでした

enum E
{
a, b, c, d
}e;

int main()
{
cout << e << endl; //0

e = a;
cout << e << endl; //0
e = d;
cout << e << endl; //3
e = (E)1;
cout << e << endl; //1
}

配列は調査中です

216 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 10:32:12.23 ID:tuNXTXW3.net]
>>209
お前は粘着根性だけは一級だ。そこだけは褒めてやるよ
ところで、CTRL-F5で「続行するには何かキーを押してださい」
が出てくるかどうかはVSのバージョンによるようだな
例えばVS2010のデフォルトで作ったコンソールアプリプロジェクトじゃそうはならなずにコンソールすぐ消える
まあ、俺はそんなあやふやなものは永遠に使うことはないだろうけど、豆知識として頭の片隅に置いておくよ
何故そういう違いが発生するのかもおかげさまで調べたらすぐに分かったし。ありがと

217 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 10:43:08.67 ID:hANsEkzf.net]
>>216
もういいよ
VSのバージョンによらないよ

VSはCtrl +F5で起動するとサブプロセスとして走らせることができるんだよ
VS2008はサブプロセスとしてコンソールで起動されるのがデフォルトだったが、
2010以降は空のプロジェクトから作るとメインプロセスで走らせるのがデフォルトになった
ただ2010以降もコンソールアプリテンプレートから作ればサブプロセスとして走らせる設定がデフォルトになる

違いの原因を調べたって、一体何をどうやって調べたんだ

218 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 10:46:38.57 ID:LHysMdWz.net]
>>216
NGしたいからコテつけてほしい

219 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 10:48:49.35 ID:dMKN1oWb.net]
はじめまして。質問をさせてください。
dmcで作った32ビットヘルツのオブジェモジュールは
win配下etcと互換性ありすか?

220 名前:デフォルトの名無しさん [2016/03/06(日) 10:53:52.53 ID:5DvD/H5K.net]
>>213
ハゲハゲ言うなハゲ!

221 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 11:05:06.45 ID:Z2wdRjzg.net]
>>218
むしろ君が自演してないでコテ付けるべき

222 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 12:15:36.32 ID:uXhlHP6G.net]
規格の変化の激しさ?

223 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 12:41:50.70 ID:ChxbUFgQ.net]
痴呆症のようだから、定期的に貼ってやるよ。

471 デフォルトの名無しさん[sage] 2016/02/09(火) 08:07:47.87 ID:GGDlYrLi

Windowsでエクスプローラその他殆どのアプリがメモリ不足死んだ状態でも生き残らななきゃ
いけないシステム監視ソフトを書いたことがある俺に言わせるとそれほど難しいことじゃない
Windowsの場合、メモリアロケーションに失敗する前にPostMessageが失敗するようになるから
その辺に対応するのがコツ

224 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 12:52:01.64 ID:uNrtakxt.net]
おじいちゃん、それもうさっき貼りましたよ



225 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 13:05:10.37 ID:FS9V5eXL.net]
おじいちゃん、それもうさっき貼りましたよ

226 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 16:30:31.67 ID:MC5mpgnR.net]
Windowsのスペシャリストを気取ってVSの使い方も知らないとは情けないな
しかも入力待ちとか本来不要で本末転倒な解決策を改善だと思ってるし

227 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 16:55:34.96 ID:rlBUJ/rg.net]
c++の仕様の拡大は信者のプライドの拡大と比例している。

228 名前:213 mailto:sage [2016/03/06(日) 17:32:52.89 ID:r0r1JwnR.net]
古い書き方がエラーになるわけじゃないから「規格の変化」は不適切だったね。
>>222 を見て「しまった」と思ったけど、他の良い表現が思いつかなかった。
でも >>227 に乗っからせてもらう。「仕様の拡大」がより適切だ。

規格や仕様じゃないけど、推奨される書き方は変化が大きいよね。
数年前のきれいなソースも、すぐに古臭くなる。
…などと知った口を叩けるほどC++の経験は積んでないんだけど。

229 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 18:16:36.06 ID:o7h42g4R.net]
互換性維持のために既存の文法の隙間に新機能を詰め込んでいるような状態だからなぁ。
そのうち維持しきれなくなってOpenGLのようにばっさりやることになるんだろう。

230 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 18:46:01.70 ID:iWD/4muj.net]
具体例

231 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 18:54:13.36 ID:O4MCW888.net]
auto は既存文法の隙間狙いだね

232 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 20:21:03.80 ID:rlBUJ/rg.net]
= 0 で pure virtual とかな。。
素人から見ても馬鹿みたいな構文だわ。

233 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 21:30:59.08 ID:0RQOBmjP.net]
>>223
この発言って、本人は

メモリアロケーションが失敗するより先にPostMessageが失敗するようになって
プログラムでPostMessageを使っていた場合は動作不能になって困るから
その辺に対処しなければならない

ってつもりで書いていると思うんだけど、一部の人は

メモリアロケーションに失敗するより先にPostMessageが失敗するようになるから
メモリ不足のテストに使える

って読み違えているんだよね、わざとかもしれないが

でもそんな究極の生命力のログ取りソフトを作らなきゃならないときに
サブスレッド作ってメインスレッドにデータ渡すときにPostMessage使っている時点でバカなんだがな

234 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 21:46:56.54 ID:2oASoSJR.net]
>メモリ不足のテストに使える
>って読み違えているんだよね

俺もずっとそう思ってたが、よく読み返したら違っていた
コピペ荒らしには何を言っても無駄だろうが



235 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 23:29:20.12 ID:ChxbUFgQ.net]
461 デフォルトの名無しさん[sage] 2016/02/08(月) 22:06:08.66 ID:LnO11qfO

まあ商用でもシミュレーションソフトとか、メモリ不足や設定ミスしたらエラーも出さずに普通にセグフォで落ちる場合があるものも多いけど。

ご丁寧にエラーを出したところでメモリ増やすかメッシュ数減らすと言うのは変わらんわけで。

467 デフォルトの名無しさん[sage] 2016/02/09(火) 04:30:48.06 ID:1CYnHFpe

>>461
世の中にある商用のシミュレーションソフトとやらのほとんどは
おまいらが見たら噴飯物かあるいは卒倒するレベルのコードだと思う
とくに国産ソフトは

470 デフォルトの名無しさん[sage] 2016/02/09(火) 07:58:11.21 ID:sh9Vl//D

>>469
設定ミスでフォルトするのはどうかと思うが、メモリ一不足の対応は難しいな
痴呆症のようだから、定期的に貼ってやるよ。

471 デフォルトの名無しさん[sage] 2016/02/09(火) 08:07:47.87 ID:GGDlYrLi

Windowsでエクスプローラその他殆どのアプリがメモリ不足死んだ状態でも生き残らななきゃ
いけないシステム監視ソフトを書いたことがある俺に言わせるとそれほど難しいことじゃない
Windowsの場合、メモリアロケーションに失敗する前にPostMessageが失敗するようになるから
その辺に対応するのがコツ

236 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 23:38:50.41 ID:ChxbUFgQ.net]
>>233-234
他プロセスがメモリ使い尽した状況でPostMessageが失敗する
という現象が発生するという無能クンの主張

無能クンがPostMessageの失敗に対応したとか関係ない

そのような現象が無能クンの主張どおり発生するなら、それはメモリ状況の観測に利用出来るということだ

無能クンの報告では、簡単に作れるメモリを使い尽くすテストプログラムで再現したそうだし 笑

237 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 02:22:11.72 ID:rcA1ymXW.net]
オツムの弱さは仕方ないが
スレを荒らすのはいただけない

238 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 04:14:17.45 ID:1EfQqvnH.net]
reinterpret_castながったらしい
なるべく使わせない為の配慮なんだろうけど

239 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 06:54:32.46 ID:HUiylToy.net]
>>233
そもそも...

> メモリアロケーションが失敗するより先にPostMessageが失敗するようになって
自体がほんとかなぁ〜?
って思われてるし

> その辺に対処しなければならない
そのご自慢の対処方法が GetLastError( ) の確認もせずにリトライするだけ
とかのお笑いレベル

どう見てもたまたまうまく動いてるように見えたからどやってるようにしか見えん

240 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 10:18:53.31 ID:skfTtER3.net]
>>238
読み方が分からないからなるべく使わないようにしてるw
リインタープリットであってるのかな

241 名前:デフォルトの名無しさん [2016/03/07(月) 10:22:22.50 ID:TiPYYq0f.net]
strlenは?

242 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 10:37:35.54 ID:VfKbAPeO.net]
シュトーレン

243 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 11:38:42.08 ID:4dTN6Z0P.net]
>>238
Yes, but my program depends on the function and works well so far.

244 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 15:55:29.06 ID:AqI6//Ed.net]
reinterpret_cast<int>(x)ってやってることは結局(int)xじゃん。
いっそのこと(int)x使えばいいのに。



245 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 16:07:40.49 ID:4dTN6Z0P.net]
>>244
Never!

246 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 17:44:56.74 ID:SPuLNVrG.net]
>結局(int)xじゃん

reintrepret_castを何だと思っているんだろう

247 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 18:00:16.97 ID:Ie6AXs1q.net]
コンパイルできない…だと?!

248 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 18:41:28.00 ID:rjj7cXsm.net]
void F(std::string&& s)
{
 F(s);
}
sは右辺値参照なのにどうしてFに渡せないのですか?

249 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 18:44:55.35 ID:AwkwjYtb.net]
左辺値だから

250 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 18:47:33.85 ID:vq5fVXSL.net]
std::move(s)

251 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 20:17:57.14 ID:z9gSfyl1.net]
右辺値参照は右辺値を参照しているものであってそれ自体は左辺値

252 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 20:30:48.32 ID:rcA1ymXW.net]
まるで、式 []()->auto&&{return 0;}() が左辺値かのような物言いだな

253 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 21:19:45.32 ID:PJh8eKUi.net]
問い
std::string && s = hoge();
sは右辺値か左辺値か

254 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:01:51.49 ID:rcA1ymXW.net]
まるで左辺値か右辺値かのどちらかであるような物言いだ



255 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:16:10.78 ID:DhnnCcYX.net]
え?左辺値じゃないの?

256 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:19:04.83 ID:be9Auz0b.net]
>>253
は?何が言いたいのか意味不明
その式の評価値は真か偽だろ

257 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:19:40.89 ID:be9Auz0b.net]
>>253
sはhoge()の戻り値

258 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:21:10.23 ID:addXPaOO.net]
真偽値??

259 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:22:18.18 ID:addXPaOO.net]
名前がついていて右辺値なんてあったっけ?
ないよな?

260 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:30:41.58 ID:rcA1ymXW.net]
スコットメイヤーの本ですら(意図的だが)不正確な説明がしてあるので>>255が騙されるのは仕方ない
規格上はどちらでもない

261 名前:デフォルトの名無しさん [2016/03/07(月) 23:33:11.14 ID:DhnnCcYX.net]
>>260
どういう解釈になるんです?
この文だけでは未確定ってこと?

262 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 23:58:07.53 ID:rcA1ymXW.net]
>>261
『std::string && s = hoge();』
この『s』は右辺値参照型の変数だが、式ではないので値のカテゴリー(lvalue,xvalue,prvalue)の概念は存在しない

263 名前:262 mailto:sage [2016/03/08(火) 00:01:44.10 ID:xyKYQJcY.net]
auto s2 = s;
のように式として使われて初めて左辺値になる

264 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 00:12:01.42 ID:xyKYQJcY.net]
この例だと右辺値への自動変換が働くからわかりづらいな
「f ( s ) に含まれる式sは、型が右辺値参照型で値のカテゴリーは左辺値」
と言った方がいいだろうか



265 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 00:13:06.20 ID:A6lTQmi7.net]
>>262-263
なるほど、確かにここだけではどれかとは言えないですね。
勉強になりました。ありがとうございます。

266 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 07:10:35.81 ID:jeIx1SXX.net]
細かいこと言ってるとハゲるぞ

267 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 07:58:44.45 ID:s5rIDaCh.net]
C++界隈ではハゲは弱点にならない、と思う。
規格でどう決まってるかは知らないけど。

268 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 19:34:59.52 ID:0k5HNdyV.net]
C++でハゲが弱点になるかどうか
厳格に規格で決まっていたら
ハゲ病的すぎるだろ

269 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 21:55:31.91 ID:A6lTQmi7.net]
C++マスコットの頭部が薄いのは、禿げ上がる程の高速動作を表現しています。
こうした考えられた仕様と設計を、一般の価値観で弱点と批判するのは論点がずれていますね。

270 名前:デフォルトの名無しさん [2016/03/08(火) 21:56:39.84 ID:Q4atenOx.net]
ズレてるのはお前のズラだろ

271 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 22:06:57.27 ID:A6lTQmi7.net]
お前今俺のことハゲって言ったか?

272 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 22:12:40.09 ID:OMUEfTHQ.net]
そんなこと言ってないハゲ
気のせいハゲ
これはただの語尾だハゲ

273 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 22:34:06.49 ID:+4p1BEPZ.net]
言っとくけどハゲと坊主は違うからな

274 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 23:26:46.03 ID:40zCAszT.net]
>>200
namespaceは同じ翻訳単位とは限らないお。



275 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 00:01:35.54 ID:gceSYQgA.net]
同じネームスペースは必ず同じコンパイル単位だとは限らないけど
同じネームスペースの{}で囲われた部分は同じコンパイル単位になるだろ
さもなくば、}が無いです、ってコンパイラに怒られる
同じコンパイル単位で、{}は必ず対になってなきゃダメだからね

だからネームスペースどうこうってより、その後ろの{}こそが重要なんだよ
{}に囲われた部分は必ず同じコンパイル単位になるから
本当なら前方参照は可能なはず

今は同じクラス内に有るもののみ前方参照が可能だが
これはクラス定義内は{}で守られていて必ず同じコンパイル単位になることが保証されているからだとも考えられ
同じ理屈でネームスペースにも拡張しても良いはず
もっと単純に、同じコンパイル単位であれば、前方参照が可能としても良いと思うがね

今のクラス内のみ前方参照が可能とかという、中途半端な仕様は意味が分からないね
文法的に出来るんならやれよ、他の今風の言語は大体可能だぞ

C#なんか、コンパイル単位を飛び越えて前方参照が可能なように
並行してコンパイルするって聞いたことあるぞ、本当かどうかは知らんがな
未定義なシンボルに出会ったら、一旦中断して、別のファイルをコンパイルするって感じかね
全く本当かどうかは知らないし、適当だが、C++にそこまでの要求はしない
ただ、同じコンパイル単位であれば前方参照できても良いだろってだけの話

276 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 00:52:56.35 ID:gceSYQgA.net]
極端な話、今のC++でもソースコード全体を適当なダミークラスで囲ってやれば
前方参照し放題の、順番なんか気にしない状態になるわけで(←実際には多少の制約はあるが)
既に、そういうことが現実に可能な状態なわけだから
同じコンパイル単位で前方参照を可能にすることは技術的に然程難しいことではないはずなんだよね

277 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 00:53:35.71 ID:R7oQ7N64.net]
必要ないからだろ。
クラスのメンバ関数は前方宣言できないかわりに前方参照できるようにしてるだけで。

278 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 01:02:25.39 ID:gceSYQgA.net]
//test.hpp
class name
{
  void method(); //←コレ
};

これがメンバ関数の実質的な前方宣言だろ
実体の方はcppファイルにあるんだからな
だから、C++的には、たとえクラス内の前方参照が出来なかったとしても、一応成り立つんだよ
なのに、クラス内に関してだけは、利便性のために前方参照が可能となっている

だったら、利便性のために、同じコンパイル単位内であれば前方参照可能としても良いだろ

279 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 01:22:01.07 ID:gceSYQgA.net]
つまりは、もし仮にC++がクラス内で前方参照が出来なかったとしたら
クラス内で何か相互参照しているような場合は
必ずクラス定義とメンバ関数の実体は分けて定義してください、ってことになるわけだが
実際それで問題ないし、C++erには日常茶飯事にすら感じる話だが
これが面倒だからクラス内に関しては特別に前方参照を可能としたわけでしょ

でも、「相互参照している場合はクラス定義とメンバ関数の実体は分けて書いてください」
は、クラス内だけじゃなくて、C++の彼方此方に頻出するわけで
クラス内の相互参照問題だけ特別扱いする意味が良くわからないんだよね
技術的に可能な範囲で考えると、同じコンパイル単位なら前方参照可能だろう

280 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 01:46:28.08 ID:gceSYQgA.net]
俺もね、C++が全く前方参照を許していないのだったら諦めもつくよ
むしろ清いとすら思う

でもクラス内だけは特別に前方参照可能なんだよ
もしクラス内の前方参照が出来なくても言語としては成り立つにも拘わらずだよ?
もし出来なくても、クラス内で相互参照が発生した場合は、クラス定義とメンバ変数の実体を分けて書けって話で
これはC++では日常だろ?仮にクラス内の前方参照が出来無くてもC++的には普通のこと、むしろ自然

でも何故かクラス内だけ前方参照可能なんだよな
同じクラス内に有れば、変数もクラスも関数も、前方参照可能なんだよ
実際、ダミーのクラスでコードを囲めば、クラスだろうが変数だろうが関数だろうが
前方参照し放題って書き方も可能で、一つのテクニック
それが可能なのだから、技術的には同じコンパイル単位であれば前方参照可能に出来る筈なんだよ

281 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 02:13:30.73 ID:gceSYQgA.net]
訂正
クラス定義とメンバ「変数」の実体

クラス定義とメンバ「関数」の実体

282 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 04:38:36.51 ID:XYqbGPFP.net]
確かにクラスでforward-declarationがいらないが為にめちゃくちゃ解りにくいソース書いて来る奴らにイライラするときがあるな

283 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 06:24:16.72 ID:PsUKAneX.net]
ぼくのかんがえたさいきょうのしーぷらすぷらす

の独演会は終わった?

284 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 11:50:49.57 ID:WF7rFyWl.net]
「利便性を向上させる機能が一部既に存在しているのだから適用範囲を拡大すべき」
そんなにおかしな意見ではないと思うが
どこの世界にも「改善」を否定する283のような残念な人間は居るものだ



285 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 11:55:58.57 ID:c8zeaZJl.net]
別に改善を否定してるとは限らないだろ?
単に長文を否定してるだけかもしれない

286 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 12:05:50.76 ID:1UcnLTLP.net]
こんな所で吠えてても実装なんてされないよ?

287 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 14:02:39.92 ID:VjFIrQgn.net]
反響があれば実装はされるだろ。

288 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 14:25:54.39 ID:WCvUs0lb.net]
まあ長文はいらないよね。
別に大したこと言ってないんだから1レスで短く説明すればいい。

289 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 14:26:38.30 ID:3jrP1VBb.net]
反響があるくらいならとっくにC++なんて廃れてるよ

290 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 15:12:18.63 ID:lSGTJ8xS.net]
対偶を取ると、
「C++が廃れてないなら反響はなかった」

291 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 17:36:52.78 ID:lHuhk1uY.net]
ADL周りの仕様が今以上に訳ワカメになるからダメだろう。

クラスと違って名前空間は後でいくらでも弄れるのだから、コード書く人間がどれが呼ばれるか今以上に予測が難しくなる。

292 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 19:25:22.04 ID:8DyMxRve.net]
>>284
そう言うのがそれしかないとでも思ってるのか?
例えば inner class がどうあがいても前方参照できないことについてはどう思ってるんだい?
自分のことしか考えてなさそうだから
ぼくのかんがえたさいきょうのしーぷらすぷらす
って書かれるんだよ

293 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:19:55.72 ID:gceSYQgA.net]
>例えば inner class がどうあがいても前方参照できない

struct outer
{
  struct inner_a
  {
    void method(){ inner_b::method(); }
  };

  struct inner_b
  {
    static void method(){};
  };
};

普通にinner_a内からinner_bを使えますが、いったい何のことを言っているんですか?
コンパイルもちゃんと通りますよ

294 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:30:15.59 ID:EHNG1aVZ.net]
それはVSだからとかいうのがあったりする



295 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:35:08.09 ID:PsUKAneX.net]
>>293
> いったい何のことを言っているんですか?
それはこっちの台詞だよ...
inner class 前方参照
あたりでググってから出直してこい

296 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:37:16.35 ID:gceSYQgA.net]
そうなの?

297 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:39:49.11 ID:gceSYQgA.net]
>>295
だったら、インナークラスの前方宣言が出来ないって書くべきで
「inner class がどうあがいても前方"参照"できない」
って書くのはおかしくないですか?そっちのミスでしょ

298 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:53:21.58 ID:gceSYQgA.net]
VSだけかもしれないけど、こんな複雑なコードもちゃんとコンパイルできる

struct outer
{
  void method()
  {
    inner_a().method();
    auto obj = new inner_b::inner_inner;
    obj->method();
    obj->value = inner_b::inner_inner::enum_::e;
  }
  struct inner_a
  {
    void method()
    {
      inner_b::inner_inner().method();
    }
  };
  struct inner_b
  {
    struct inner_inner
    {
      enum struct enum_{ e, };
      enum_ value;
      void method(){}
    };
  };
};

一旦クラスで囲んでしまえば、こんな入り組んでいても、何事もなかったかのように前方参照が出来てしまう
C++を同一コンパイル単位内で前方参照を可能とすることに、文法的な隔たりや、技術的ハードルは無いという事だね

299 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:56:46.43 ID:WCvUs0lb.net]
まだ荒らし足りないのか

300 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:57:25.47 ID:PsUKAneX.net]
>>297
> 「inner class がどうあがいても前方"参照"できない」
> って書くのはおかしくないですか?
メソッドではなく inner "クラス" の前方参照ができるようになってから出直してこいよ

301 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:05:10.18 ID:WCvUs0lb.net]
>>300
いやお前も何言ってるんだよ・・・。

302 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:09:47.23 ID:WF7rFyWl.net]
>>292
「クラススコープでできていることと同等のことを一つの名前空間定義のなかでもしたい」
というID:gceSYQgAの話と関係無いことを言い出す理由が不明。
唐突に根拠も無く「自分のことしか考えてなさそう」とか言い出すあたり、
知覚障害か何か?

303 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:10:12.26 ID:jX68pRI9.net]
この手の議論のためだけに無駄に頑張る人が多いのがc++ってイメージ。

304 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:13:56.70 ID:gceSYQgA.net]
>>300
struct outer
{
  void method(){ inner_b obj; //←これ }
  struct inner_a
  {
    void method()
    {
      inner_b obj; //←これ
    }
  };

  struct inner_b{ };
};

VSだけかもしれないけど、インナークラスの前方参照は出来ますよ、ただし、メソッド内ではね

struct outer{ inner *ptr; inner{}; };
って書けない話だろうけど
struct outer{ struct inner; inner *ptr: struct inner{}; };
って前方宣言してあげれば良いだけで、大した手間ではない
同一コンパイル単位で前方参照できるといっても、例外は有って構わないわけで
struct hogehoge; と書くことぐらいの手間は全くの程度問題



305 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:23:03.30 ID:gceSYQgA.net]
何事にも例外が有ってよいと思うわけです、ハイ
完ぺき主義者ではないので

仮に
「インナークラスの型のポインタ変数を前方参照っぽく定義より先に使って宣言したいときは
 struct hogehoge; と事前に前方宣言しなければならない」
というルールが有ったとしても、この程度は何の手間でもないから問題ないですね

306 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:24:08.59 ID:gceSYQgA.net]
あーこれ間違ったわ
struct outer{ inner *ptr; inner{}; };

struct outer{ inner *ptr; struct inner{}; };

struct が抜けてたわ

307 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:25:04.02 ID:WCvUs0lb.net]
>>305
それならそのまま使えばいいじゃないの。
何に不満があるんだよ。

308 名前:デフォルトの名無しさん [2016/03/09(水) 22:25:25.73 ID:eOjuPS6Y.net]
int main()
{
struct A{ A(){} };
struct B{ A a; int x; };
B b = B();
printf( "%d\n", b.x );

309 名前:デフォルトの名無しさん [2016/03/09(水) 22:26:12.04 ID:eOjuPS6Y.net]
b.xがvc2015だと0なのに2012、2013だと不定値になります。何故でしょうか。

310 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:28:49.66 ID:lHuhk1uY.net]
不定なのが偶々0なだけ

311 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:30:44.15 ID:av11/7D/.net]
初期化されてないから

312 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:32:19.48 ID:WCvUs0lb.net]
>>309
0が正しいと思う。MSのバグじゃないの?

313 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:34:09.23 ID:+X5y9V0s.net]
>>309
0が正しい。

314 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:35:46.14 ID:+X5y9V0s.net]
なので、VC++のバグに1票。



315 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:37:39.69 ID:PsUKAneX.net]
>>302
できるからやればいいじゃん
って言うのは ID:gceSYQgA が言ってること以外にも色々ある
ってまで説明しないとわからんの?
主張するのは勝手だけど、長々やるほどじゃねーだろ
って言われてるだろ

316 名前:デフォルトの名無しさん [2016/03/09(水) 22:41:03.03 ID:WCvUs0lb.net]
ごめん血迷ってた。default-intializedだね。

317 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:43:46.61 ID:+X5y9V0s.net]
>>316
zero initializeでは?

318 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:46:47.91 ID:lHuhk1uY.net]
いやPODだから不定値だろ

319 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:48:02.12 ID:WF7rFyWl.net]
PODだと不定値
などという仕様がどこから出てきたのか

320 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:49:51.34 ID:+X5y9V0s.net]
>>318
だからゼロ初期化という仕様なんだって。

321 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 23:01:30.54 ID:WF7rFyWl.net]
ついでに、PODがあるようには見えない

322 名前:デフォルトの名無しさん [2016/03/09(水) 23:05:53.89 ID:WCvUs0lb.net]
逆、非PODだから不定値。
自分はPODのカッコ付きと勘違いした。

323 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 23:10:57.26 ID:WF7rFyWl.net]
ここまで、>>309の炎上学習法若しくは確認間違いという指摘無し

324 名前:デフォルトの名無しさん [2016/03/10(木) 01:14:31.68 ID:lKwsVgJC.net]
という>>323 の炎上学習法に見えるね
自分で確認するのが面倒だからって



325 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 01:44:57.86 ID:eUGHchpD.net]
0になったり他の値になったりするのは、偶々だね。

12.6.5のサンプル
struct C {
C(){}
A a;
const B b;
int i;
int j = 5;
};
// initializes members as follows:
// OK: calls A::A()
// error: B has no default constructor
// OK: i has indeterminate value
// OK: j has the value 5

規格書読めない初心者は発言しないように。

326 名前:デフォルトの名無しさん [2016/03/10(木) 01:58:57.97 ID:8KJ6+/BF.net]
>>325
話を読めない人は発言してもいいんですか?

327 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 02:32:53.57 ID:mfhQ4lhr.net]
>>325
お前さーC++14の規格票を持ってることだけが自慢なんだろ
俺も持ってるからお前の間違い突っ込んでやるよ

328 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 02:47:23.86 ID:eUGHchpD.net]
タダで入手できるもの持ってると自慢できるのか?

じゃ、自慢しよう
どうだ、まいったか

329 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 03:23:13.76 ID:mfhQ4lhr.net]
>>328
タダだと?どこで無料で入手出来るというんだ
お前もしかしてタダで入手したのか?

330 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 03:41:17.30 ID:mxNsUMFn.net]
>>308-309
B() で B 型のオブジェクトが値初期化 "value initialize" される。 (8.5 p11)
B はユーザー定義のデフォルトコンストラクタを持たないクラス型なので、値初期化のプロセスとして
まずゼロ初期化 "zero initialize" され、そのあとデフォルト初期化 "default initialize" される。 (8.5 p8 bullet-2)
int 型の B::x がゼロ初期化されると値 0 になる。 (8.5 p6 bullet-1)
そのあと B::x がデフォルト初期化されるが、 int 型なので何も行われず 0 のまま。 (8.5 p7 bullet-3)

と言う感じで、 C++14 の規格に従うと 0 になる。

C++03 以降だと経路が多少違うものの同じ結果になるけど、古の C++98 では B::x は不定となってしまっていた。
www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#35

MSDN 見る限りだと 2013 で value initialize に対応してそうなんで、 2013 で不定ならバグかな。
https://msdn.microsoft.com/en-us/library/w7wd1177%28v=vs.110%29.aspx
https://msdn.microsoft.com/en-us/library/w7wd1177%28v=vs.120%29.aspx

331 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 10:36:48.16 ID:OLUNjZSr.net]
>>330
この仕様ってポインタに対しても有効?
以前似たような質問が議論されてたんだけど。
echo.2ch.net/test/read.cgi/tech/1439849418/184

332 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 11:13:34.09 ID:l944yzKo.net]
330じゃないけどポインタもscalar typeだから同じくゼロ初期化でしょ
でもvalue initializeルールに依存するようなクラスは書くべきじゃないなあ
echo.2ch.net/test/read.cgi/tech/1439849418/184
をNode node;ってやっちゃったらやっぱりnode.nodeは不定だよ
こんなコードは書かずにちゃんとコンストラクタを書いて明示的にnullptrで初期化しなくちゃいかん

333 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 11:23:42.71 ID:mBEuB6ly.net]
デストラクター作ってPODを諦めてるのに、適切に初期化するコンストラクター無いとか
ただのバグでしかない

334 名前:デフォルトの名無しさん [2016/03/10(木) 11:46:11.58 ID:xbWf2tod.net]
やっぱりvc2012でも2013でもxはゼロで初期化されません
バグですか
gccではゼロになります



335 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 13:35:05.45 ID:l944yzKo.net]
バグだね
>>308のBはxの初期値が重要ならこれもバグ

336 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 18:43:26.84 ID:uK8a0ubO.net]
VCの規格無視はいつもの事らしいから気にすんな

337 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 20:58:27.62 ID:l944yzKo.net]
調べたらこのバグは2012年6月にはもう報告されているね
https://connect.microsoft.com/VisualStudio/feedback/details/746973/incorrect-c-11-value-initialization-for-type-with-implicitly-declared-but-non-trivial-default-constructor
VC++ 2015 RCでやっと直ったらしい

338 名前:デフォルトの名無しさん [2016/03/10(木) 21:21:03.49 ID:wKO6hiHF.net]
そもそもが、int()で0だなんて馬鹿げたルールができたばっかりに...

339 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 21:38:31.66 ID:kxB40Mc+.net]
マイクロソフト「C++11対応は2015 Update 2から本気出す」

340 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 22:09:45.41 ID:1z8FCjXU.net]
>>331
有効
using P = int *;
P p{};
はp==nullptrになる

341 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 22:59:23.79 ID:XIXQ4NCN.net]
変数の初期値がどうなるかというだけの話でこんな議論になるのはC++ぐらいだろうなぁ。

342 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 11:55:53.38 ID:+X87dz7B.net]
値か0の初期化を当たり前にし、初期化なしを例外記述にする方向性なのだろう。
今のところ(バグがあるので)値初期化を信じず、
未初期化を前提に書けと言うのは、ある意味正しいのかもしれないが、
考え方としては逆行しているね。

343 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 12:52:11.72 ID:Y6ECzuws.net]
ある意味正しいじゃなくてパフォーマンスを考慮すると未初期化がデフォなのはC++としては完全に正しいんだよ
0初期化がデフォになってしまったらCを継承したC++の利点が薄れてしまう
value initializationこそがC++の思想に逆行してると思う

344 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 13:05:18.46 ID:kWA4jyXp.net]
>>308
そもそも非POD型をメンバーに持つPOD型は非POD型になるだろ。

cpplover.blogspot.jp/2010/06/c0xpod.html
>さらに、非PODな非staticデータメンバーを持たないこと。



345 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 13:10:43.94 ID:vYMpLkUm.net]
コンストラクタの強制なんかを見ると、
うっかり未初期化の値を使うことによる不具合を防ぐって
言語思想も含まれてるでしょ。
となると、単純な値にも何らかの初期値が保証される方向性もアリかと。

初期値は保証されるが、そのことによるパフォーマンス上のペナルティがない、
プログラマが初期化すればデフォルト初期値の処理は発生しない、
という仕様なら八方丸くおさまると思ったり。

346 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 13:12:37.67 ID:+X87dz7B.net]
>>343
正しいなら実装側でstack protectorなんてデフォルトにならないよ。
現状もパフォーマンスが欲しいときだけ別にするというのが基本だ。

347 名前:デフォルトの名無しさん [2016/03/11(金) 13:13:39.58 ID:2/u08KSA.net]
基本強制初期化で
int a = noinit;
みたいにしたら初期化しない方式で

348 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 13:21:02.38 ID:zH9xDiQd.net]
デフォは未初期化で記述方法によっては初期化もしてくれるって方針だろ。

その記述方法が紛らわしいのと、規格通り実装しないのがメジャーなコンパイラの1つなのが問題

もう少し分かりやすい記述なら良いのに、現状だとデフォルトconstructorが呼ばれているようにしか見えない。

349 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 14:21:15.08 ID:49om0mRF.net]
>>347
Dでは
int i = void; // デフォルトの初期値を省く

コンパイラのオプションで従来動作も選べればすぐ導入可能だと思うがね

350 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 15:25:46.64 ID:dykTweBs.net]
>>349
だからどうしたって話

int i{0}; とタイプすることもできないのか

351 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 15:35:13.63 ID:kWA4jyXp.net]
int i(); でもいいよ。

352 名前:デフォルトの名無しさん [2016/03/11(金) 15:36:56.24 ID:kuBG6faz.net]
int i = 0;
while(std::cin >> i) std::cout << i;
こんな馬鹿っぽい初期化いらんし邪魔だ

353 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 18:27:14.35 ID:0EDCO8WT.net]
>>351
ウソを書くな

354 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 22:49:53.55 ID:YlUxysAB.net]
>>351
それは関数宣言だと何度



355 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 22:52:02.91 ID:RA7SR1be.net]
お前ら一体 何を言ってるんだ

356 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 22:56:28.69 ID:YlUxysAB.net]
>>344
その通りだけど、ゼロ初期化とは何の関係も無い件

357 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:02:09.89 ID:4G2Dcq4h.net]
15年C++書いてきて
別案件でC#と数ヶ月戯れたけど
C++はやっぱり変態だと感じたわ
良くも悪くも

358 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:09:07.85 ID:RA7SR1be.net]
C++はぐちゃぐちゃ汚いよね

359 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:30:50.24 ID:RoKMXwVB.net]
それは綺麗なC++コーダに出会ってない坊やだからさ

360 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:31:51.83 ID:+X87dz7B.net]
またハゲの話してる…。

361 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:33:00.33 ID:RA7SR1be.net]
いや書き方の問題じゃなくて言語仕様自体の問題なんd

362 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:35:30.87 ID:a6R8C1/e.net]
C++はヘンタイだし、クソ言語だと思うけど、
大好き

363 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:36:37.63 ID:+X87dz7B.net]
あなたの落とした物はこのC++CLIですか?それともこのJ#ですか?

364 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:37:36.54 ID:RA7SR1be.net]
言語体系や構文ではC#が上だが、玄人好みなのはC++



365 名前:デフォルトの名無しさん [2016/03/11(金) 23:43:00.34 ID:+X87dz7B.net]
ヘンタイな玄人好みって、まるで素人童貞みたいな言い草だな。

366 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:44:29.48 ID:RA7SR1be.net]
すまんわかるようでわからん

367 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:53:03.42 ID:YlUxysAB.net]
お前ら一体 何を言ってるんだ

368 名前:デフォルトの名無しさん mailto:sage [2016/03/11(金) 23:54:21.02 ID:RA7SR1be.net]
ほんとだよ全く

369 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 00:03:43.97 ID:z2WBnFu0.net]
でもそれがc++なんだよね。

370 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 00:35:06.18 ID:FH3bqKTZ.net]
こういうことをC++でやるにはあの機能ではダメでこの機能を使ったこの設計でなければならない
っていう無知と思い込みから汚いコード書いて無駄に苦労してる人は珍しくないぞ

371 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 01:39:29.17 ID:Zbyfy48z.net]
自分だけはキレイなコードかいてるという前提

372 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 01:43:01.42 ID:Pl4Qm8o2.net]
データ構造を隠蔽したままinterfaceを隔離する方法ってありませんか?

class IContainer {
};

class Ifold {
  virtual do(IContainer& container) const = 0;
};

class VectorContainer : public IContainer {
private:
  std::vector<double> container_;
};

みたいな感じでIfoldのインターフェースはコンテナに依存しないようにしたいです。
visitorパターンにするとIContainerに、Ifoldの具象クラスのacceptメソッドが増えていくのが…。
何かうまい実装はありませんでしょうか?

373 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:13:17.49 ID:VClvi+pB.net]
言っている意味が全然わからない。
Ifoldの具象型がIContanerの具象データに依存してるって事?
上位型だけでやりとりしたいなら、IfoldかIContainerどっちでも良いが、
具象型の中でダウンキャストでもすればいいだろ。

374 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:16:35.39 ID:VClvi+pB.net]
もし外でvisit/accept可能か確認したいなら、
bool supports(IContainer&) (またはIfold&)とか付ける。
それ以外思いつかないが、そういうことじゃない?



375 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:18:19.39 ID:Pl4Qm8o2.net]
>>373
Ifoldの具象型がIContainerの具象型が中で持ってるデータ構造に依存するのはOKです
ダウンキャストというと、どのように行えばいいですか?
インターフェースクラスからは具象クラスがわからないため何にダウンキャストすればいいか決定できません…

376 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:19:31.10 ID:Pl4Qm8o2.net]
>>374
すみません、具体的にどのような実装になるかイメージができません…

377 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:21:31.37 ID:VClvi+pB.net]
>>375-376
いまいち要領を得ないが、具象クラスにdo(IContainer& x);を実装、
中でIContainerからVectorContainerなどにキャストすれば良いんじゃないのか?
これ以上は何がしたいのかよくわからないから何とも言えん。

378 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:42:31.41 ID:VClvi+pB.net]
もしかしてIfoldではなく、その具象クラスすら、
受け取るべき具象コンテナが決まってないって事か?
それもう設計破綻してるから無理だろ。

そうではなく特定型にキャスト可能かわからないってだけなら、
自分でID付けてis_a(int id)とか実装して調べるか、dynamic_cast。

379 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 02:51:53.53 ID:9NhLr4qt.net]
>>372
class IContainer {
virtual double& at(int index)=0;
virtual void push_back(double& v)=0;
};

380 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 09:19:37.98 ID:Vp+P3H45.net]
>>372
std::accumulateみたいなことがしたいように見受けられるけどそうかね?

381 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 09:54:48.36 ID:fbT4KBM6.net]
std::stack<T, C>を
IContainerを受け取るIStackに魔界造したイメージだろうきっと

382 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 11:36:06.87 ID:oS3fCNyN.net]
欲しいのは単にiteratorじゃね?
visitorはfoldの仕方が変わるからaccept必要でしょ?

383 名前:デフォルトの名無しさん mailto:sage [2016/03/12(土) 13:19:48.43 ID:VClvi+pB.net]
てっきりテンプレート無しに異なる数値型を扱いたいって事かと思ってたよ。
テンプレート使うならStrategyだけで済んじゃうし。

384 名前:デフォルトの名無しさん [2016/03/14(月) 22:12:09.15 ID:bYJAKtH4.net]
結局何だったんだ…?



385 名前:デフォルトの名無しさん [2016/03/15(火) 18:46:33.79 ID:7F6lH4i+.net]
すみません、visitorパターンを使うとacceptを持つインターフェースクラス(ライブラリコード)が、
具象クラスであるvisitor(ユーザーコード)に依存してしまうという問題を解決したかったのですが、いまいち伝わらなかったみたいです。

>>378
型タグによるダウンキャストは、メンテの観点から採用できません...

>>382
自分がなにを抽象化したいのか再考するきっかけになりました。
ありがとうございました。

結局visitorを内部のコンテナ型に依存するインターフェースクラスとすることで解決しました。
実際にはIVectorContainerとかIListContainerのような形にしました。
正確にはvalue_typeは決まってたのでテンプレートテンプレートパラメータを使いました。

386 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 20:37:53.71 ID:drELySke.net]
それだとデータ別にインターフェースできるから統一できないんじゃないの。
ダウンキャストの方が見えてる分まだマシかと。

387 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 20:46:48.46 ID:7F6lH4i+.net]
>>386
ダウンキャストだとコンテナ型が増えるたびにif文を追加しなくてはならず、
しかも追加し忘れてもコンパイル時にエラーが出ないので…

388 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 20:51:40.14 ID:drELySke.net]
>>387
またわけわからん事言っとるね君。
テンプレートだろうが、結局特定のコンテナのインターフェースに依存するだから、
その部分は場合分けしなきゃならんでしょ。

389 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 20:54:05.87 ID:7F6lH4i+.net]
>>388
いや、それはaccept側のオーバーライドで解決します
これがvisitorパターンの一般的な実装かと思いますが、どこがわかりませんか?

390 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 21:12:36.21 ID:drELySke.net]
>>389
うむわけわからんよ。
どうやってacceptのオーバーライドで別種のvisitorを分ける?

そもそもテンプレート型に仮想関数付ける形こそ始末が悪くメンテしにくいのだから、
それならいっそインターフェースも消して、
テンプレートの構造的部分型だけで十分だと思うんだが。

391 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 21:13:54.39 ID:7F6lH4i+.net]
>>390
家に帰ったら実装書きます

392 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 22:59:29.47 ID:7F6lH4i+.net]
>>390
こういうことです
https://ideone.com/JpA22R

これダウンキャストで実装すると、acceptを一つにまとめてif文で一つずつキャストを試すわけですよね?
その場合ConcreteXxxContainerがひとつ増えるとacceptを修正し忘れてもコンパイルが通ってしまって困ります

393 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 23:00:15.31 ID:18/5NGhU.net]
visitorクラスの基底クラスをライブラリ側が提供すれば良いのでは?

394 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 23:01:00.99 ID:7F6lH4i+.net]
>>393
という風にしました



395 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 23:04:19.56 ID:z48QWO4Q.net]
ダウンキャストとか言ってるアホはやばいだろ
コード書かせちゃダメなレベル

396 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 23:11:15.71 ID:18/5NGhU.net]
>>394
申し訳

397 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 23:48:10.07 ID:L3nufqEx.net]
結局具体的に何をやりたいのか分からんな
そもそもVisitorパターンが本当に適切なのか?
Visitorパターンみたいな汚くなりがちなものはなるべく避けるべきだと思うが

398 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 06:31:57.64 ID:+XU07v9B.net]
>>392
なんだオーバーライドじゃなくてオーバーロードじゃないの。
静的なのがいいなら構造部分型や標準コンテナの模倣で十分だろう。
そこまでしてインターフェースとVisitorに拘る理由は何?

>>395
dynamic_castなら危険でも何でもない。
そうやってダウンキャストを危険危険と、
いちいち大げさに騒ぎ立てる方がアホというか初心者だな。
実際OOPなら多くの場所で使われてるし、設計が簡単になるなら使っても良いんだよ。

399 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 06:42:44.25 ID:+XU07v9B.net]
そんなに静的なチェックが重要と言うなら、オーバーロードもやめとけ。
それぞれ別の名前にしたほうがより安全確実だからね。馬鹿みたいだけど。

400 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 07:47:22.56 ID:Jbc4KVVa.net]
そんなに言うならコード提示すればいいのに

401 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 11:05:22.41 ID:9QBMlTeC.net]
> ダウンキャストとか言ってるアホはやばい
> そうやってダウンキャストを危険危険と

個人的には「ダウンキャスト」っていう用語自体がアホ
アップ/ダウンの概念を不用意に持ち込んだ初心者ワードだと思う

暗黙の型変換(implicit conversion)
キャスト演算[明示的な型変換(explicit conversion)

後者を単にキャストと呼ぶのがC/C++の文化

402 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 12:20:06.84 ID:hEm8Gz+A.net]
>>401
お前のルールをさも普遍的なものであるかのように語られても

403 名前:デフォルトの名無しさん [2016/03/16(水) 15:13:44.46 ID:YWKSC+YR.net]
参照を返す関数は戻り値の一時オブジェクトは作成されないのですか

404 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 17:05:09.47 ID:noSrSdLM.net]
一体どこに一時オブジェが作成される要素があるというのか



405 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 17:32:24.76 ID:P1US5avI.net]
>>403
まさかとは思うがローカル変数の参照を返したりしてないよな?

406 名前:デフォルトの名無しさん [2016/03/16(水) 17:34:09.97 ID:bCkVw2Gt.net]
>>405
返すこともありますが
参照が有効か無効かは問題にしてません

407 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 17:35:54.73 ID:P1US5avI.net]
漢だな

408 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 18:42:01.29 ID:Sre9WvB0.net]
天才だ

409 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 20:48:14.54 ID:Zxg3aYLU.net]
>>401
それダウンキャストと何の関係もない話だよね?

410 名前:デフォルトの名無しさん [2016/03/16(水) 21:09:39.81 ID:8e8fbPBE.net]
>>401
律儀に規格用語だけ使って話すのと
アホかどうかは関係ねえぞ

おまえが体現しているようにw

411 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 21:20:12.09 ID:ejdJRW9Z.net]
>そんなに静的なチェックが重要と言うなら、オーバーロードもやめとけ。

これ意味不明だな
オーバーロードは静的なのに

412 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 21:42:57.82 ID:+XU07v9B.net]
>>411
オーバーロードに型チェックはあるが、
ユーザー定義変換のように、使用者側から見れば暗黙に見える変換が起きうるぞ。
なので確実なチェックが欲しいなら一つずつ名前を付けた方が良い。
どうだ馬鹿みたいだろう?

413 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 21:51:19.58 ID:noSrSdLM.net]
>>412はstd::abs(double)やstd::fabs(float)が許せないタイプ

414 名前:デフォルトの名無しさん [2016/03/16(水) 21:53:11.55 ID:8e8fbPBE.net]
そんなに動的なチェックが重要というなら、dynamic_castもやめとけ。



415 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 21:56:22.65 ID:9IPG0ZaQ.net]
だからdynamic_cast版のコード書いてみろってば
じゃないと比較のしようがない

416 名前:デフォルトの名無しさん mailto:sage [2016/03/16(水) 22:14:17.92 ID:Sre9WvB0.net]
男ならCスタイルキャストオンリー

417 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 08:31:39.81 ID:yET/+Bsj.net]
>>412
> 変換が起きうるぞ。
意味わからん
具体例プリーズ

418 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 10:21:34.32 ID:mXayW7+h.net]
>>417
あんま触るな
コード出さない時点で誰かわかるだろ

419 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 12:44:04.09 ID:Mb/PAzMm.net]
仮に変換が起こったとしても、静的でしょ
dynamic_castとは別物

420 名前:デフォルトの名無しさん [2016/03/17(木) 21:19:25.81 ID:Nqbbnzs6.net]
githubに置いてあるゲームをmakeするとコケた。
error: cannot convert 'bool' to 'boolean' for argument '2' to 'int jpeg_read_header(j_decompress_ptr, boolean)'
jpeg_read_header(&cinfo, true);

エラーをみて思ったんだが、bool 型と boolean 型の違いって何なんだろ?

421 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 21:27:52.26 ID:3douJvdz.net]
>>417
void func( std::string );

func( "filename" ); ← 1

1.大丈夫だが、func( char* )ではないし、std::stringの構築が行われている


のやつ言ってるんじゃない?
ユーザ定義変換と書いてあるし

422 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 21:36:57.43 ID:1OZ8wjSn.net]
boolをbooleanに変換するoperatorひとつ記述してやればよくね?
そんなに手間じゃないやろ

423 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 21:44:32.93 ID:K9pRNqs8.net]
>>420
コードの該当箇所見た?

424 名前:デフォルトの名無しさん [2016/03/17(木) 22:09:31.51 ID:Nqbbnzs6.net]
jpeglib.hでboolean型が定義されていた。
(boolean) tureでコンパイルは通る。
Cにはbool型は無いんだな。



425 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 22:12:09.48 ID:K9pRNqs8.net]
ないねえ

426 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/17(木) 22:20:29.77 ID:ucqcC/SU.net]
stdbool

427 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 22:38:53.07 ID:rjBvJtG9.net]
あるっちゅーねん

428 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 22:40:27.06 ID:ucqcC/SU.net]
あるっ中年

429 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 22:41:49.16 ID:ucqcC/SU.net]
アル中中年

430 名前:デフォルトの名無しさん [2016/03/17(木) 22:42:41.64 ID:JPCzu/ni.net]
C17で入れるか審議中。

431 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 23:12:37.74 ID:/lOxP0ET.net]
>>421
でそれって
> なので確実なチェックが欲しいなら一つずつ名前を付けた
で解決できるんか?

432 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 23:19:50.72 ID:dAtTnfZR.net]
気付き易くした俺天才
ということだろう
f_char(""); //OK
f_string(""); //きっと誤り

433 名前:デフォルトの名無しさん [2016/03/18(金) 00:31:37.54 ID:bZVTun5z.net]
>>424
C言語はスレ違いだがC99から_Boolという型がある
stdbool.hをincludeしたらboolも定義される

434 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 05:07:52.40 ID:bw5Y7I/7.net]
ゼロオーバーヘッドでないなら他の言語を使った方がいい
実行時効率以外に何の理由があってC++なんぞ使うのか



435 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 06:23:08.41 ID:bw5Y7I/7.net]
一見関係ありそうで全く無関係の書込を強めの口調ですることで、スレのおかしな流れを止めるライフハック

436 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/18(金) 06:47:57.93 ID:Ap+aghgX.net]
それよりお前らClangのソースを読んでみろよ
この世のものとも思えない複雑怪奇
ビルド時間がReactOSよりも長いと来てる

437 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 13:00:52.70 ID:RPKOB45D.net]
convertException(env, [=] () {
Wrapper<WrapperTest>(env, thisj).destroy();
});

↑このコードの[=] () {〜}ってどういう意味?

438 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 13:08:35.67 ID:W5j8+q1I.net]
ttp://en.cppreference.com/w/cpp/language/lambda

439 名前:デフォルトの名無しさん [2016/03/18(金) 13:57:19.97 ID:Kcr5mRax.net]
[=]は俺も初めて見たときなんじゃそりゃーってなった

440 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 15:44:12.24 ID:InA5se8Z.net]
>>437
「C++ ラムダ式」で検索するのが第一歩。
>>438 は正確なのだろうけど、英語というハードルの高低が人により…。

441 名前:デフォルトの名無しさん [2016/03/18(金) 16:01:29.94 ID:HFSK+zOK.net]
[](){}();

!?

442 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 16:16:31.96 ID:410UcNdt.net]
[=a,&b,&c,=d,&e]とか一々修飾しないといけないの?

443 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 16:29:45.63 ID:FVNcSrUO.net]
一律同じ条件じゃダメなときはね

444 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/18(金) 16:30:09.19 ID:Ap+aghgX.net]
>>442
[=]
[&]
[this]
を使え



445 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 19:11:24.91 ID:oTJE6YWd.net]
結局ラムダ式を使うべきところが分からないまま数年経つ

446 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 19:44:50.08 ID:UMQZP4zp.net]
( ・∀・)つ-[](){}();-

447 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 20:18:38.69 ID:vJhS3HXJ.net]
ラムダ式はインラインになり得る?

448 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 21:20:10.79 ID:gDAbGK2s.net]
map を使うとき,キーについて operator-() を定義する必要があるとのことですが,operator==() の定義は必要ないのでしょうか?
実際 operator==() を定義しないままで動いているようですが,気持ち悪いです.
よろしくお願いいたします.

449 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 21:30:29.40 ID:FKb875f6.net]
記号でなんとかしようとするから複雑怪奇で意味不明になっていく

450 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 22:06:18.03 ID:vhFEV+GW.net]
algorithmを使う時にはラムダを結構使うかな。

451 名前:デフォルトの名無しさん [2016/03/18(金) 22:08:14.37 ID:oKqsBnC/.net]
ファンクタはもう出番ないんですか

452 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 22:19:30.53 ID:vhFEV+GW.net]
>>448
そんな話はじめて聞いた。
operator<()か、mapのテンプレートパラメータで適切な比較関数を指定するか、のどちらかやっとけば問題ないはず。

453 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 22:20:00.80 ID:jzV+DAcw.net]
ある程度長くなるなら、ラムダじゃないほうが良くない? そうでもない?

454 名前:デフォルトの名無しさん [2016/03/18(金) 23:38:29.84 ID:BXTY6QO1.net]
実行ファイルにバイナリファイルやテキストファイルなどを同梱したいのですが、どうやればいいのでしょうか?



455 名前:デフォルトの名無しさん mailto:sage [2016/03/18(金) 23:41:49.45 ID:fdaB6v5T.net]
ソースファイルへ変換する。

456 名前:454 [2016/03/19(土) 01:01:05.43 ID:09FPc+yt.net]
>>455
それだと起動した時のメモリ使用量がスゴイことになりませんか?
jarみたいにできたらいいのですが…

457 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/19(土) 01:38:48.87 ID:qPghKix4.net]
>>456
zlibを使う

458 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 02:01:48.98 ID:ojXVuQaH.net]
どれぐらいのサイズのものを同梱したいんだろ。
メモリを気にするってことは
PCなら数百MBを越え、でかいときには楽に1GB越えるサイズかな。
ひょっとしたらターゲットが組み込みマイコンで小メモリなのかな

459 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 04:25:33.28 ID:A8zNJX4o.net]
>>454
リソースに追加

460 名前:デフォルトの名無しさん [2016/03/19(土) 05:34:50.36 ID:u4PbgbYy.net]
組み込みなら好きな場所にファイルを書き込めるんだから実行バイナリにくっつけるメリットが無い

461 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 06:22:04.15 ID:aVqCTfNk.net]
>>460
> 組み込みなら好きな場所にファイルを書き込める
意味わからん
今時 Linux や Windows Embedded 使ってる組み込みなんていくらでもあるのに

462 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 07:17:32.18 ID:fKG0+8Dg.net]
>>454
Windows + Visual Studio ならリソースに突っ込むのが一番簡単
でもゲーム開発とかなら別個にパックするファイルを用意した方がいい

463 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 09:27:46.68 ID:oD5CZDwR.net]
>>452
なんで operator<() だけでいいのでしょうか?

464 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 09:32:44.77 ID:i3aw7Uuy.net]
むしろless以外(同値判定など)がどうして必要なのか



465 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 09:59:57.29 ID:tKkEJPlU.net]
mapは内部で要素に順序をつけて管理しているため、strict weak orderを満たすlessが必要

順序づけ(要はsort)の条件を指定するのに==では足りないだろう。

466 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 10:18:49.25 ID:i3aw7Uuy.net]
しまったまた自演に反応してしまった

467 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 10:28:37.96 ID:/R8BseZf.net]
>>463
operator<があれば同値判定も出来るからというのが本当の答え
!(a<b) && !(b<a)ならa==b

468 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 10:42:20.95 ID:oD5CZDwR.net]
>>467
ありがとうございます.

469 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 11:56:29.54 ID:i3aw7Uuy.net]
>>467
どうしてそう息を吸ってはくような嘘をつくのか

470 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 12:07:33.31 ID:i3aw7Uuy.net]
mapのキーの話か
勘違いした失礼>>467

471 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 12:33:51.72 ID:P4VbUWO2.net]
変数名はhogeとfooとunkoのどれがいいですか?

472 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 14:29:27.12 ID:SYQTFOu+.net]
昔はhogeは通用したけど、今時の若い衆にいきなり使うと、なんなのこの人と思われることがあるらしい

473 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 14:53:53.05 ID:g1UHnDq8.net]
昔から「hoge=コミュ障」というイメージです

474 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 15:06:03.88 ID:4a76PkUY.net]
enumと文字列を同時に宣言するマクロを組んでいるのですが、

#define STR(head ,name) head ## name

#define MAKE(...) \
typedef enum _ENUM{ \
STR(ENUM_,__VA_ARGS__ ),ENUM_Num \
} ENUM; \
const char *Name[ENUM_Num] ={ #__VA_ARGS__ };

というマクロで
MAKE(one,two,three)
とすると、本来はENUM_one ENUM_two ENUM_three というenumの要素が得られるはずなのに、
なぜか生成されるのはENUM_one two threeの三つになってしまいます。
Visual Studio 2015 CommunityのIntelisenceでのエラーなのですが、
これは本来は予期している結果が得られているのでしょうか?
それともこいつが言うように実際は後者のような宣言になっているのでしょうか?



475 名前:デフォルトの名無しさん [2016/03/19(土) 15:37:01.96 ID:4a76PkUY.net]
>>474です 
すみません。ものすごい馬鹿な勘違いをしていました。__VA_ARGSは,も含めてそのまま放り込む
ためのものなんですね。

476 名前:デフォルトの名無しさん [2016/03/19(土) 15:37:46.60 ID:4a76PkUY.net]
すみませんが、>>474でやろうと思っていることを実装できるマクロは
どうやって組めばいいのでしょう?

477 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 15:54:23.67 ID:ni3uOtuZ.net]
>>476
https://www.google.co.jp/search?q=boost+preprocessor

BOOST_PP_SEQ_〜 を使えば MAKE((one)(two)(three)) でいけるはず。

478 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 15:57:26.06 ID:ni3uOtuZ.net]
SEQ にしないといけないのは昔の話だった。
いまは MAKE(one,two,three) でもいけそう。
d.hatena.ne.jp/DigitalGhost/20111205/1323052916

479 名前:デフォルトの名無しさん [2016/03/19(土) 19:11:04.92 ID:4a76PkUY.net]
>>476 ありがとうございます!
私はboostを全く知らなかったのですが、今入れてきました。

しかしいまいちよくわかったいないので、どうかboost/preprocessorを使った
プログラムをご教授願えませんでしょうか?

480 名前:デフォルトの名無しさん [2016/03/19(土) 19:48:34.76 ID:4a76PkUY.net]
調べていってはいるものの、全く理解が追い付きません…
(a ,b , c)の引数に対して、
enum{
  ENUM_a,
  ENUM_b,
  ENUM_c,
  ENUM_Num
}
が生成できれば締め切りに間に合うのです!
どなたかお願いします!

481 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 20:06:06.20 ID:SYQTFOu+.net]
あ、2ch新参の人だ!
2ch新参の人がいるぞ! 囲め!

482 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 20:13:11.30 ID:cIZsYOxL.net]
どうしてもマクロじゃないと締め切りに間に合わない状況ってなんだろうね

483 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 20:59:41.54 ID:5djHDgqa.net]
#, ##演算子

文字列化演算子・トークン連結演算子

484 名前:デフォルトの名無しさん [2016/03/19(土) 21:05:44.25 ID:4a76PkUY.net]
>>483 __VA_ARGS__で受け取った場合、引数が(a,b,c)だと
enum{
  ENUM_ ## __VA_ARGS__,
  ENUM_Num
}
としても
enum{
  ENUM_a,b,c,
  ENUM_Num
}
になっちゃいます



485 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 21:35:28.30 ID:IPOoQOnL.net]
ずいぶんレベル下がったなこのスレ

486 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 21:51:12.72 ID:VQqTJbFl.net]
4引数まで版でconst charの中身の展開は省略

#define SELECT4(d1, d2, d3, d4, name, ...) name
#define MAKE_ENUM(...) SELECT4(__VA_ARGS__, MAKE_ENUM_4, MAKE_ENUM_3, MAKE_ENUM_2, MAKE_ENUM_1)(__VA_ARGS__)
#define MAKE_ENUM_1(key) ENUM_ ## key
#define MAKE_ENUM_2(key, ...) ENUM_ ## key, MAKE_ENUM_1(__VA_ARGS__)
#define MAKE_ENUM_3(key, ...) ENUM_ ## key, MAKE_ENUM_2(__VA_ARGS__)
#define MAKE_ENUM_4(key, ...) ENUM_ ## key, MAKE_ENUM_3(__VA_ARGS__)

#define MAKE(...) \
typedef enum _ENUM{ \
MAKE_ENUM(__VA_ARGS__), ENUM_Num \
} ENUM; \
//const char *Name[ENUM_Num] ={ #__VA_ARGS__ };

487 名前:デフォルトの名無しさん [2016/03/19(土) 22:03:39.89 ID:4a76PkUY.net]
>>486 ありがとうございます
恐らく本格的なプリプロセッサを組まれる方は任意引数でやっているだろうなぁ
とは思いますが、自分の力量にしたがいます。

488 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 01:20:47.66 ID:3h/wnv4V.net]
なにバカ言ってるんだか
プリプロセッサでループや再帰(的処理)を行うには何らかの形で
作者が想定した処理できる限界の数だけのマクロをベタ書きで用意するしかない
事前の用意不要で任意の数をループや再帰で処理するのは元より不可能

489 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 01:24:49.08 ID:YNMOH2/p.net]
なめくさりミステイクしてね?

490 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 02:24:48.46 ID:yN6fzEfa.net]
今時C++でマクロ展開のループとかしてる時点で論外だしな。

491 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 02:26:06.45 ID:yN6fzEfa.net]
いやループはマクロだけじゃ無理か。再帰のしかも一定数までだな。

492 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 04:59:40.07 ID:wXobkPts.net]
ハハワロス

493 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 09:05:43.61 ID:9j4drtjC.net]
__VA_ARGS__なんて使わないで、こういう風にすればいいだけじゃ?
www.geocities.jp/rage2050a/rEnumStr/rEnumStr.html

494 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 09:29:08.28 ID:9j4drtjC.net]
ちょっとだけ探した限りだと__VA_ARGS__使うやり方ではこのやり方が一番柔軟で良さそう
www.gamedev.net/page/resources/_/technical/apis-and-tools/maintenance-free-enum-to-string-in-pure-c-with-better-enums-r4230
数の制限はやっぱりベタ書きでなんとかしなくちゃいけないけどね



495 名前:デフォルトの名無しさん [2016/03/20(日) 14:17:44.97 ID:Q9e0J8ZE.net]
BOOST_PP_AUTO_RECってのがある。
こいつは例えばあるマクロ関数「FUNC」があったとして、
再帰の回数分だけFUNC_1 FUNC_2…と作り出す機能がある。
あなたが求める機能は、もし再帰的に書けるなら
MAKE_ENUM_ITER(key, ...) ENUM_ ## key, MAKE_ENUM_ITER(__VA_ARGS__)
のように書けばいいわけだから、

後はわかるだろ?

496 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 14:19:27.99 ID:Q9e0J8ZE.net]
sageてなかった

497 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 15:57:09.34 ID:NZgllOnE.net]
誰に向けたレスだ
> 再帰の回数分だけ
をどうマクロで処理してるかわかってる?
設計としては再帰の回数を管理するカウンタ用のマクロを例えば
COUNT_10,COUNT_9,...と必要な数だけベタ書きで用意して処理に使っているので
あらかじめ用意されてるカウンタ用マクロの数を越える任意の回数の再帰を扱えるわけではない

498 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 16:04:24.63 ID:Q9e0J8ZE.net]
再帰処理させたいマクロをFUNCとして、
FUNCを何回再帰させるかを指定してBOOST_PP系統のマクロを定義すると、
FUNC_nという形になる名前の任意のマクロのうち、まだ定義されていない
名前のマクロを探し出して再帰的にFUNC_nを命名する機能を持っているのだ
>>486のやっているベタ書きを自動的に書いてくれるのだ

499 名前:デフォルトの名無しさん [2016/03/20(日) 18:31:41.32 ID:EqMhetHD.net]
>>498
boost/preprocessor/repetition/repeat.hpp
の中身見たことある?

500 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 01:48:29.48 ID:ja7H/O1J.net]
百歩譲って
A=A+1
って式を認めよう
この場合のイコールは代入を意味するんだな

そこで質問です
A+1=A
って書いたらどーなるの?
A=A-1
と同じ結果が得られるの?
教えてー

501 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 01:49:27.42 ID:90Oe+hOc.net]
>>500
コンパイルエラーになるだけです

502 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 01:50:09.88 ID:ja7H/O1J.net]
>>501
そっか・・・
あんまり論理的ではないのねorz

503 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 02:17:41.55 ID:d4s8z5nU.net]
あーたの狭い脳内論理にフイットしないってだけで完全に論理的だから

504 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 02:24:07.46 ID:SoMbpeP6.net]
マセマティカでも使えば幸せになれるかも



505 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 02:53:49.93 ID:YLhrJ5lt.net]
>>501
おまいはエジソンかよw

506 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 03:41:34.03 ID:ti1fSBNM.net]
だから = は等価(equal, equivalence)じゃなくて割り当て(assignment)だと何度言ったら

507 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 05:12:04.79 ID:YLhrJ5lt.net]
あ、レス番間違えた
エジソンは>>500

508 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 05:55:27.03 ID:uWb5tpCC.net]
質問です。
(コンパイラ絡みの話題なので若干スレチかもしれませんが、このスレが一番詳しい人が多いと思いますのでご容赦ください)

stringやlistなどはc++11でABIが変更になったと聞きますが、これの挙動がgccとclangで違うことを最近知りました。
たとえば以下のコードをビルド(g++ 5.2.0とclang++ 3.7.1)して nm --demangle コマンドでシンボルを見てみると、

$ cat hoge.h
#include <list>
using namespace std;
struct hoge {
list<int> get_list(list<int>);
list<int> get_list();
};

$ cat hoge.cpp
#include "hoge.h"
list<int> hoge::get_list(list<int>) {return list<int>();}
list<int> hoge::get_list() {return list<int>();}

引数のある関数get_list(list<int>)のシンボルはg++、clang++ともに
hoge::set_list(std::__cxx11::list<int, std::allocator<int> >)
ですが、引数のない関数get_list()のシンボルはg++だと hoge::get_list[abi:cxx11]() 、
clang++だと hoge::get_list() でした。
この違いのせいでg++でビルドしたライブラリをclang++のプロジェクトで使うことができません。
やむなく -D_GLIBCXX_USE_CXX11_ABI=0 オプションを付けてビルドし直したのですが
これだとC++11でもたらされた効率化の恩恵が受けられないですよね?
何か上手い方法はないでしょうか?(clangが対応するのを待つしかない・・・?)

# なお、ライブラリのほうをg++でなくclang++でビルドしろというのはなしでお願いします

509 名前:デフォルトの名無しさん [2016/03/23(水) 06:01:35.89 ID:LEkWD+7J.net]
>>500
struct B
{
B& operator + (int) { return *this; }
B& operator - (int) { return *this; }
B& operator = (B&) = default;
};

B A;
A=A+1;
A+1=A;
A=A-1;

510 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 10:12:52.17 ID:COygSTBI.net]
struct hoge{
std::string s;
};
hogeのムーブコンストラクタはどう書くのが正しいですか

511 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 10:29:58.57 ID:YLhrJ5lt.net]
>>509
すべてAになるとかエジソンコードかコレw

512 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 10:31:56.68 ID:LEkWD+7J.net]
メンバポインタで仮想関数を呼び出すとき、基底クラスの関数を指定ってできますか?
struct hoge { virtual void hage() { } };
struct fuga : hoge { void hage() { } };
void (hoge::*hogo)() = &hoge::hage;
fuga hege;
(hege.*hogo)(); //fuga::hageじゃなくhoge::hageにしたい

513 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 10:56:19.75 ID:GrZPafJv.net]
>>512
出来ない

514 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 11:01:24.81 ID:d4s8z5nU.net]
そもそもメンバポインタなんてものは使うな



515 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 14:32:18.80 ID:LEkWD+7J.net]
>>513
thx
情報密度の高いわずか4文字、その次の真空とは格段に違いますね。

516 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 00:36:19.09 ID:CsN4wd4t.net]
newとか書くのは老害なんですかね?
今日若いもんに指摘されたんだけども
make_hogehogeとか書いたほうがよいのでしょうか?
老害脱却してナウくてミニマルなコード書きたい

517 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 00:41:36.09 ID:9Xk0G6q+.net]
指摘したやつに聞いてこいよ
というか指摘されたときにちゃんと理由聞いとけよ

518 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 01:42:21.09 ID:019JwaRF.net]
deleteしわすれるマヌケなコードでなければ使ってもいいが

519 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 02:15:40.78 ID:lQwaLUOO.net]
>>500
上段より下段が時系列的に後
右辺より左辺が時系列的に後
そんなカスケード的概念が根底にある
BASICに行番号が有った頃と何も変わらない

左辺が変数のみなら代入を意味する
左辺が数式なら数式と扱う
どの辺がオブジェクト指向か知らない
ポリモーフィズムとかカプセル化も関係ない

多分、生物は前を向く、みたいな本能に根差した定義が隠れている

520 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 08:13:12.75 ID:xZz5tDVg.net]
>左辺が変数のみなら代入を意味する
>左辺が数式なら数式と扱う

という妄想でした
(c1 ? gr() : fr()) = 100 ;

521 名前:デフォルトの名無しさん [2016/03/24(木) 08:24:49.44 ID:Nz54sUCC.net]
それを言うなら
*pt = 100;
でしょ

A=100;のAもC++では左辺値という式で
変数とか数式とかいう言葉遣いは行番号BASICの話だろ

522 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 08:47:03.11 ID:RWWxbY4p.net]
>>516
スマートポインタを調べておいで

523 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 08:50:35.73 ID:4NO08lYx.net]
俺は数値型はmallocしか使わない

524 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 09:04:10.19 ID:wWfOqsS1.net]
なぜcallocを使わないのか
謎である



525 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 11:15:22.83 ID:biS/7wG3.net]
callocではポインタを初期化出来ないから

526 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 11:17:02.82 ID:biS/7wG3.net]
ああ、数値型限定か。取り下げ。

527 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 12:08:43.62 ID:ZS8UeVhQ.net]
>>516
そう書く以上ある程度は知ってるんでしょ?
まず使ってみて判断すりゃいい。

528 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 14:24:41.64 ID:aFiY6vgp.net]
スマポのデメリットって、
ちょっと記述が長いくらい?

529 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 15:53:26.47 ID:eZePobDJ.net]
そもそもC++において記述量はものの数に入らない。注意はゼロオーバーヘッドに向いている

530 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:10:53.13 ID:aFiY6vgp.net]
まあ、そうなんだけどね

もしC++の開発当初からスマポの概念が存在してたとしたら
もうちょっとシンプルなキーワードになってたのかなと思わなくはない

531 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:32:37.90 ID:5JBRPHnG.net]
スマポ使って記述量増えるか?delete書かなくていいんだし、例外安全なコード書くこと考えたらスマポ使わないと大変な記述量になるぞ

532 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:40:18.89 ID:YciTCaLR.net]
C++とOpenGLで大量のデータ(といっても1ファイル数MBのバイナリファイル)を表示するグラフを作ったんだが
ファイルを次々読んでいくと不正落ちするんだが
タスクマネージャを見る限りメモリリークはしてないっぽいんだが
原因はなんだろう?
エスパーさん助けて

533 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:47:29.18 ID:YnxOCpos.net]
>>532
フツーにVC++でデバッグしろや

534 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 16:56:15.84 ID:aFiY6vgp.net]
>>531
あくまで宣言時の話ね
安全かどうかはとりあえず置いとく



535 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 17:11:05.46 ID:YciTCaLR.net]
>>533
そういやそうやね
デバッグしたときの思い出したけどメモリのアクセスの違反とかやったかな
ただどこのメモリアクセスかだとかてんで絞り込めなかった記憶が蘇ってきた

536 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 17:11:55.85 ID:bJRa7hQW.net]
スマポは宣言したことないなあ

537 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 18:19:30.58 ID:GuX4g1Aq.net]
class POINT{
int x, y;

POINT(int x, int y){
this.x = x;
this.y = y;
}
};

式にはクラス型が必要です。とエラー出る。
Javaだとこの書き方で来たと思うんだけどどうれば?

538 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 18:20:23.26 ID:HU0hrWcK.net]
this.x

this->x

539 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 19:05:20.17 ID:4ybpt3lE.net]
コンストラクタ内はthis未定。

540 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 19:16:58.07 ID:xZz5tDVg.net]
なにをいっているんだこのばかは

541 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 19:17:43.17 ID:CKYJRfTx.net]
>>537
class POINT{
  int x_, y_;

  POINT(int x, int y)
    : x_(x), y_(y)
  {}
};

542 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 22:26:04.65 ID:zkjgNnUp.net]
>>541はアスペ

543 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 22:39:30.65 ID:f7qbbkg+.net]
>>541
class POINT{
  int x_, y_;
public:
  POINT(int x, int y)
    : x_(x), y_(y)
  {}
};

544 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 23:04:36.81 ID:3G6+DDFH.net]
>>510
struct hoge{
std::string s;
hoge() = default;
hoge(hoge &&) = default;
hoge(hoge const &) = default;
};
struct hoge{
std::string s;
hoge(hoge &&baka) : s{std::move(baka.s)} {}
};



545 名前:デフォルトの名無しさん [2016/03/24(木) 23:49:09.31 ID:zWmpvvy2.net]
>>535
clangやgccならAddressSanitizerでバッファーオーバーフローしたタイミングで止めてコールスタックを表示できるし、
解放済みメモリへアクセスしたときもそのアドレスを解放した箇所のコールスタック表示できる。

546 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 00:38:22.72 ID:+Ze54dSh.net]
でもOpenGLのデバッグはつらいね。
OpenGLの使い方間違え落ちると呼び出し元がわからんことが多いし。

547 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 00:52:21.56 ID:UpbiIEYU.net]
>>537
class POINT{
  int x, y;
  POINT(int x_, int y_)
    : x(x_), y(y_) {}
};
だろ

548 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 00:53:38.91 ID:UpbiIEYU.net]
>>537
ていうか
class POINT{
public:
  int x, y;
  POINT(int x_, int y_)
    : x(x_), y(y_) {}
};
しておかないとコンストラクタ呼べんよ

549 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 00:58:19.08 ID:BMGk8TKa.net]
>>548 そのアンダースコア要らない。

550 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 01:05:01.92 ID:UpbiIEYU.net]
でもわかりにくいだろ?

551 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 01:09:41.99 ID:OQH/xHTw.net]
>>548であれば明確で分かりやすいから要らない

552 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 01:16:51.01 ID:ea+R8FSN.net]
後ろアンダーラインカコワルイ

553 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 02:09:13.34 ID:9WnSpcyZ.net]
だよね。引数を後ろアンダースコアにするの俺も昔やってたことあるけどカッコ悪すぎるのでもう止めた
メンバ変数は前アンダースコア、引数にはアンダースコア付けないで落ち着いた
後ろアンダースコアって何であんなにカッコ悪いんだろ?m_よりはマシだと思うが

554 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 02:58:29.24 ID:7ath5rIc.net]
変数命名で思い出したけど、いろんな様式あるよねキャメルケースとかスネークケースとかそういうの

どれが流行ってるとか一般的にどうあるべきとかいう一般論あるの?



555 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 03:08:18.87 ID:cXdBDF9l.net]
前アンダーが処理系予約と知らずに使う方がもっとカッコ悪い

556 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 03:11:49.84 ID:UodAUCRU.net]
それぞれの流儀で決まる
コーディング規約を守るために努力すんのは無駄極まりないからGoogleの規約基準にしていいと思うけど
さすがにiとかbは消えたけどm_とg_はたまに見かける

557 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 03:19:28.56 ID:9WnSpcyZ.net]
>>555
規格ちゃんと読んだか?
前アンダースコアが予約されてる条件を理解してるか?
メンバ変数の前アンダースコアは合法だってことを知ってるか?

558 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 03:58:43.82 ID:F3D1y9dC.net]
法典を示せよ

559 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 04:05:28.83 ID:cXdBDF9l.net]
>>557
マクロはCの制約を適用しなければいけない
必然的に前アンダーは使ってはいけない

560 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 04:16:26.20 ID:9WnSpcyZ.net]
何言ってるんだか
規格を見るのが一番だが、この辺りでも見て自分の頭で考えてね
https://msdn.microsoft.com/ja-jp/library/cc440188%28v=vs.71%29.aspx

_大文字始まりは主にマクロのために全てのスコープで予約されてるが、_小文字始まりはグローバルスコープ以外では合法
これくらいのルールが分からないようじゃプログラマ失格だぞ
法典を示せ?テメエで調べろよ怠け者

561 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 05:55:20.56 ID:Agsep6u6.net]
「_大文字で始まる名前、_小文字で始まる名前は
ここでは許される、ここでは許されない」みたいな部分で
規格のギリギリを突くような書き方が好ましいとは思わないけどね。

場面によらずアンダースコアで始まる名前は一切つけない、
という方針も安全策としてありうるかと。

せいぜい複数人で開発しているときに、
「このメンバ名、_で始まってるけどいいんだっけ?」
「この場合は許されてるんですよ。予約されてるのは…
(しばらく薀蓄タイム)…というわけなのです」
「ふぅん、そうか。要するに問題ないのね」
という会話が生じる程度のネタでしょ。

562 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 06:13:55.38 ID:9WnSpcyZ.net]
ギリギリでもなんでもなく明確に合法なんだが
それにネタ程度の話なんかじゃなくて、メンバ変数を_小文字始まりに統一するとIDEで_を入力するとメンバ変数の一覧が出てきてメッチャ捗るという現実的な恩恵がある
C#では奨励されているスタイルだし、C++とC#を同じくらいやる俺にとってはもうこのスタイルで統一するのがベストという結論

563 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 06:40:08.87 ID:i3XIX2iS.net]
まったくだ

564 名前:デフォルトの名無しさん [2016/03/25(金) 06:52:38.28 ID:MISdMFxz.net]
>>562
どこで奨励されてるの?

https://msdn.microsoft.com/ja-jp/library/ms229045(v=vs.100).aspx
ここには使うなって書いてあるけど



565 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 07:06:04.17 ID:ACUGT+cL.net]
this付ける派閥には一切恩恵がないや…

566 名前:デフォルトの名無しさん [2016/03/25(金) 07:35:12.73 ID:bT5/u8Kc.net]
前アンダースコアはないわ

567 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 07:48:56.52 ID:i3XIX2iS.net]
>>564
そんな不適切なページ

568 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:10:52.98 ID:cXdBDF9l.net]
C++ではグローバルネームだけが前アンスコ予約となってる
Cとの共存に考えがいたらないまま、
>>557
>規格ちゃんと読んだか?
と言ってしまい、引っこみがつかなくなり発狂中

569 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:14:22.84 ID:+Ze54dSh.net]
スレタイ

570 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:16:09.34 ID:i3XIX2iS.net]
大文字と小文字の区別がつかない人間か

571 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:25:16.24 ID:cXdBDF9l.net]
>>569
Cのヘッダーを全くインクルードしなけりゃ良いよ
そんなの学校の宿題くらいしか無いけどね

572 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:29:34.02 ID:UodAUCRU.net]
動けば何をやってもいいのがC++だぞ

573 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 08:33:00.37 ID:TW5rwKlv.net]
>>541です
物議を醸すようなコードを晒してすみません
個人的には前アンスコでも後アンスコでもいいと思います
同じでプロジェクト単位で統一されていることが重要と思っていてC++としてどちらがいいとかはないと思ってます

574 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 09:11:07.81 ID:+Ze54dSh.net]
素のCヘッダなんて、どうしてもCのライブラリを使いたい場合くらいしか使わんなぁ。
C/C++共用のヘッダじゃなきゃ自分でextern "C"することになるから、そのときに
両方の規格を気にするくらいで。
そもそも、自前のcppコードでメンバにアンダースコア使う話とCヘッダのインクルードが
どう関係あるのか意味不明。



575 名前:535 mailto:sage [2016/03/25(金) 09:21:42.75 ID:qvYXoatK.net]
>>545
だいたい数十ファイル(ばらつき)を読み込んだあたりで突然落ちて
最初はメモリリークを疑ったからかなり明示的にメモリの解放を頻繁に行うようにした
でもやっぱり症状変わらなかった
解放済みメモリへのアクセスもあるかなって思ったけどようわからんかったけど
もうちょい頑張ってみる

>>546
OpenGLとかコードをパクりまくってつぎはぎだらけでなんとか表示させてるからあんまり意味わかってなくてつらい部分は確かにある
このOpenGLあたりでグラフィックメモリがパンクしてんのかとも思ってコード内でグラフィックの使用量吐き出させたりフリーソフトで監視したけどそんなにメモリが増大していってる感じじゃなかったな

576 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 09:37:39.50 ID:KBRwIVst.net]
あれ?これ合法だっけ?ってなる時点で紛らわしいので避けるかな
だったら前this か m_ の方がマシ

577 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 10:22:53.41 ID:AP4XabWz.net]
>>559
classのメンバ変数弄るならInline関数使うべきだろ。
そこ触るのにcとの互換性考慮する必要なくね?

578 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 11:19:19.06 ID:9WnSpcyZ.net]
StyleCop死ねwww
stylecop.codeplex.com/wikipage?title=A%20Brief%20History%20of%20CSharp%20Style&referringTitle=Documentation

579 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 11:27:57.09 ID:9WnSpcyZ.net]
前thisなんてルール作ったところで
this付けなくてもエラーにもなんにもならないしルール違反コード探すのだって容易じゃない
そんなの全く意味ないんだよこのクソバカStyleCop

580 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 15:47:57.54 ID:ACUGT+cL.net]
_fooでもm_barでもthis.bazでも
それを強制されるのなら、コーディング規約としては大して変わらん気がするなあ

581 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 16:01:49.59 ID:ACUGT+cL.net]
あ、ごめん。this.じゃねぇ

582 名前:片山博文MZ ◆T6xkBnTXz7B0 [2016/03/25(金) 17:02:16.92 ID:C4e13KV/.net]
アンパンマン、新しい顔ができたよ!!!

Unboost --- Time to say good-bye to Boost
https://github.com/katahiromz/unboost

583 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 17:22:36.13 ID:ZbElIMvp.net]
g_とかm_とかクッソ気持ち悪い

584 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 17:55:35.65 ID:uQE9fwFQ.net]
前アンスコが一番素敵だワ



585 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 18:09:09.53 ID:i3XIX2iS.net]
_そ_う_お_も_う_

586 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 18:12:39.86 ID:i3XIX2iS.net]
しかし_を入力するとメンバ一覧が出てきて捗るなどという考えは皆無だな

587 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 18:24:41.23 ID:uQE9fwFQ.net]
>>586
ん?便利と思うよ。mでも何でもいいけど。
逆に不便なのが、IDEのコンストラクタやsetter/getter自動生成機能で_やmが関数名や仮引数名についちゃうところ。

588 名前:デフォルトの名無しさん [2016/03/25(金) 20:17:21.95 ID:CiUv48rG.net]
アンダースコアで始まる識別子がたくさん出てくるだけじゃあ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<142KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef