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/
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] アンダースコアで始まる識別子がたくさん出てくるだけじゃあ