1 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 09:00:48.11 ID:4p3tjfYN] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part111 toro.2ch.net/test/read.cgi/tech/1393539884/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.90【環境依存OK】 toro.2ch.net/test/read.cgi/tech/1395675954/ 次期規格C++1yはこちら C++14/C++1y toro.2ch.net/test/read.cgi/tech/1382889622/ ■長いソースを貼るときはここへ。■ codepad.org/ ideone.com/ 【重要】 hogeは禁止です。使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。
2 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 12:05:11.32 ID:LKf4adEN] ヘムレンさんポジションのザコが暴れるスレ。 見地と良識を備えたムーミンパパは居ない ちなみにヘムレンは種族の呼称
3 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 15:36:20.07 ID:kY2Ixj/W] ↑荒らしは無視してね
4 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 15:40:04.06 ID:PxtUisja] STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。
5 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 17:05:43.48 ID:LokGB3M7] ----テンプレここまで-----
6 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:12:55.53 ID:EOtAE3K1] みなさん、hoge++スレへようこそ。楽しくhoge++ね
7 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:14:42.64 ID:4p3tjfYN] ↑荒らしは無視してね
8 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:21:32.46 ID:EZLhmswD] 書いてる>>1 自身が無視できてない
9 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:21:34.47 ID:x1RB96gi] >>4 正直もうBorlandとか誰も使ってないし VC++でさえ使う人減ってるだろ
10 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:36:26.22 ID:N4PVE6y4] 前スレ>>997 ezoeryou.github.io/kabukiza-tech2-slide/#/16
11 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:38:28.05 ID:EOtAE3K1] >>9 MSが色々提供しているからね。 いまさら化石MFCではじめるWINはないよって感じあるからな
12 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 21:38:29.05 ID:x1RB96gi] >>10 普通に間違えて覚えてた。C++14には入らないのか・・・
13 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 22:51:57.97 ID:4PQFLBxx] >>1 乙
14 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 02:12:19.15 ID:zroYmyxw] GUIはC#で、C++でDLLしてP/Invokeというのがいいな しかしSTLとDLLの相性の悪さは泣ける 中だけで使うのなら問題ないけど
15 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 08:34:57.85 ID:bs2xlTJg] GUIはC#でWPF、ピンボケするのはWindowsAPIだけ、自前のネイティヴコードはC++.NetでラッピングしたDLLにする。だろ?
16 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 13:40:34.99 ID:UEWCeO6y] 未だにSTLみたいな前世紀の化石ライブラリを使うようなプログラムは C#などと組み合わせるべきでない
17 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 14:15:14.68 ID:nZeav+Zp] コンテナすら使わないプログラムならわざわざC++で実装する必要ないもんな
18 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 14:15:56.08 ID:Rj7fzTnd] 「ヘッダはコンパイラが提供するものなのであなたが作らないでください」 「STLは前世紀の化石ライブラリ」 ----テンプレここまで-----
19 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 14:25:42.40 ID:NUYJ8BJR] 「ヘッダーという用語は規格上は処理系が提供するものを指すので、.hファイルの意で使用すると荒れる恐れがあります」 →インクルードファイルと言うと回避できます 「昔存在したSTLが規格に吸収され、規格には当該部分にSTLという識別がなくまた当時のSTLとは完全に同一でないことから、現規格のstd::vector等をSTLと呼ぶと荒れる恐れがあります」 →標準ライブラリのvectorと言うと回避できます ----テンプレここまで-----
20 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 14:47:44.46 ID:Rj7fzTnd] >>19 乙
21 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 14:53:42.00 ID:k991ba7o] >STLとDLLの相性の悪さ クラステンプレートはクラスのテンプレート であってクラスじゃないからねぇ。 そもそもライブラリ境界を跨いで クラスオブジェクトを渡すなよ。
22 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 15:55:46.52 ID:Cunr6Uuj] >>21 でもさ、C#というGUIのガワを被せて、肝心の中身はC++の利点であるコンテナを 使いたいって事は多いだろ? 今のC++の仕様ではどうしても一度DLL内で計算した結果をXMLなどにシリアライズ出力 して受け渡しするという不格好な方法しか取れない そう言うと「C++はC++、C#はC#で別々に使えよ、同時に使おうとするのが間違い」って なっちゃうけどな その通りだけど C#は基本的にMarshalなアンマネージドオブジェクトは異質の物と見てるもんな
23 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:09:09.36 ID:De/moLbp] COMでおk
24 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:23:04.58 ID:Cunr6Uuj] COMはやめろよ もう古すぎる
25 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:35:17.65 ID:k991ba7o] >>22 >今のC++の仕様ではどうしても一度DLL内で計算した結果をXML えっ、C++側で.NETのラッパーに 変換するんじゃないの?
26 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:41:02.80 ID:De/moLbp] C++使っててCOMが古いとかハッハワロス
27 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:27:10.04 ID:dVVzxz29] COMを使わなくて済むのが.NETの強みなんだが・・・・
28 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:47:04.04 ID:bs2xlTJg] COMの開発は管理者権限が必須なのが前時代的だな。
29 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:51:18.91 ID:dVVzxz29] ま、確かにP/Invokeはお世辞にも使いやすいとは言えないな 「あんまし使うなよ」って事か
30 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:02:39.30 ID:jwbJTyGo] .NET Framework が native 化できることで、 このあたりのもどかしさはなくなるんだろうな もう C++/CLI 書きたくないお(;ω;)
31 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:09:18.33 ID:0az8Nuyl] >>30 C++/CLIなんて罰ゲームみたいなもんだな C++の部分だけ分離して呼び出し側でマーシャリングとか出来なかったのか
32 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 21:27:30.07 ID:TyAP6UD/] COMはRTで使われてるし全然現役
33 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 21:29:23.29 ID:GqoT/9Em] それは「実行バイナリがマシン語で書かれているから マシン語のプログラムは現役」 並のミスリードだな
34 名前:デフォルトの名無しさん [2014/04/06(日) 22:53:39.67 ID:XLm+xFbR] 普通にC++語るスレになっててなにより
35 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 23:01:13.82 ID:0dGMoKg8] いつぞの荒らしも飽きたかどっか行っちゃったみたいね
36 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 23:03:47.01 ID:+ho/eqBK] 荒らしが多すぎてもう どの荒らしのことなのかわからない
37 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 23:48:49.57 ID:wtpLSJbx] 普通DCOMだよね〜
38 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 00:17:21.81 ID:Oe2r/gE1] にゃんぱす!
39 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 00:19:41.22 ID:A0FUyXAk] >>38 にゃんぱすぅ〜 だろ
40 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 00:44:27.14 ID:rR+HEjyU] >>33 マシン語並みに空気みたいな存在になったと言うことだな
41 名前:デフォルトの名無しさん [2014/04/08(火) 02:53:30.05 ID:xaBD9l1I] C++ は MS がすべてじゃないし どこぞの糞仕様のための言語じゃないし
42 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 02:54:34.18 ID:xaBD9l1I] マジでおまいらのワールドしょぼすぎ
43 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 13:43:30.23 ID:WIUCzLV5] >>42 なかなかいい文句だ それを出だしに使って140字以内でキレのあるあおり文にまとめてくれ
44 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 17:31:19.44 ID:qjagiBPa] しつもんです。 可搬性のある、C++のソースファイル名に使用可能な文字の制限ってどなたかわかりますか?
45 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 17:36:28.45 ID:DhHmBmSp] >>44 そうだな #や@といった機種依存文字を含まず アルファベットの大文字小文字混在無しで ベース名8 文字以下なら安心だろう
46 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 17:54:39.78 ID:xaBD9l1I] MS-DOSとか糞環境乙としか言えない
47 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 18:25:20.64 ID:Lnp7L6Cz] std::wregexで 括弧やドットを正規表現で使いたいのですがうまくエスケープできません。 ¥x28と書いてもデバックでエスケープされてないようです。 このような場合はどうしたらいいのでしょうか
48 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 18:27:57.56 ID:pggqH0pG] L"\\. \\(" これでエスケープされるだろ?
49 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 18:28:55.14 ID:xaBD9l1I] 元が \( なら 文字列で書くと "\\(" だろ C言語板で聞けよ
50 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 18:36:52.48 ID:9wIzdaaz] C言語板なんかあったっけ?
51 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 18:55:47.34 ID:xaBD9l1I] 板とスレ間違えただけだし 些細な問題を指摘するところがまるでコンパイラみたいだな toro.2ch.net/test/read.cgi/tech/1392482954/
52 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 18:55:54.31 ID:Lnp7L6Cz] >>48-49 ありがとうございます。
53 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 19:19:18.55 ID:9wIzdaaz] >>51 お褒めにあずかり光栄です
54 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 21:01:00.65 ID:CrCqLw7U] 正規表現に普通の文字列とか なに馬鹿なことやってんの LR"unko(.\(うひょ\))unko"
55 名前:デフォルトの名無しさん mailto:sage [2014/04/09(水) 17:57:34.72 ID:YDjcaoef] ideone.com/2aTmM5 randomクラスでshuffleしたいのですが、どうしてもエラーが取れません どこが間違っているのでしょうか?
56 名前:デフォルトの名無しさん mailto:sage [2014/04/09(水) 18:13:15.84 ID:p7hjUAuw] >>55 ttp://ideone.com/xrI2H9
57 名前:デフォルトの名無しさん mailto:sage [2014/04/09(水) 19:53:21.80 ID:9B6L1ty9] >>56 ありがとうございます 結局uniform_int_distributionとかかませたのがまずかったみたいですね
58 名前:デフォルトの名無しさん mailto:sage [2014/04/09(水) 20:11:21.10 ID:TDs0SH97] >>54 覚えたてで嬉しいのはわかったからそこらじゅうに貼るなよ
59 名前:デフォルトの名無しさん mailto:sage [2014/04/10(木) 00:54:20.87 ID:QbNxa+16] >>58 何年も前に出来た規格に対して 覚え立てとか何を言ってるの
60 名前:デフォルトの名無しさん mailto:sage [2014/04/10(木) 07:48:32.68 ID:/AIMsHz9] リテラルは R"aaa[xxx]aaa" と書くこともできるのか? それとも亜種がいろいろとあるのか? ttp://cpplover.blogspot.jp/2008/12/raw-string-literal.html
61 名前:デフォルトの名無しさん mailto:sage [2014/04/10(木) 08:04:37.36 ID:1X5BHIzm] >>59 > 何年も前に出来た規格 だからいちいち貼る必要なんかないだろ バカなの? (w
62 名前:デフォルトの名無しさん mailto:sage [2014/04/10(木) 12:23:25.00 ID:uETN8HVi] >>60 >R"aaa[xxx]aaa" と書くこともできるのか? できません。 >亜種がいろいろとあるのか? ありません。
63 名前:デフォルトの名無しさん mailto:sage [2014/04/10(木) 12:45:02.18 ID:IJYcxngx] 『"(』と『)"』が基本形のペアで『"』と『(』、『)』と『"』の間に同じ文字列を入れてもペアになる
64 名前:デフォルトの名無しさん mailto:sage [2014/04/10(木) 18:09:57.16 ID:M6lNLtoT] すいません、イテレータをちゃんと理解できてない初心者なのですが for( itr = tmpList.begin(); itr != tmpList.end(); itr++ ){ # 処理1 } for( itr = tmpList.begin(); itr != tmpList.end(); itr++ ){ # 処理2 } こんな風に書いたら2回ループしてくれるのかなと思ったら、1回目しか実行されていないようなのですが 2回やるのはどうしたらよいのでしょうか
65 名前:デフォルトの名無しさん mailto:sage [2014/04/10(木) 18:14:30.75 ID:fXdw7HlU] ttp://ideone.com/DGYiog 2回できてるけど それだけじゃなんとも
66 名前:デフォルトの名無しさん [2014/04/10(木) 18:34:41.66 ID:M6lNLtoT] ちょっと表現するのが難しいところなんですが multimapのイテレータなんですが 人が書いたソースを改造していて、
67 名前:デフォルトの名無しさん mailto:sage [2014/04/10(木) 18:37:18.80 ID:fXdw7HlU] 全部ソース張れよ どうせ処理1の中で余計なことをしているんだろう
68 名前:デフォルトの名無しさん mailto:sage [2014/04/10(木) 18:39:25.60 ID:x8L/6Xjd] こういう質問者ってなんでwandboxとかに全ソース貼らないんですかね 貼ればわかるさ
69 名前:デフォルトの名無しさん mailto:sage [2014/04/10(木) 18:50:16.62 ID:M6lNLtoT] あ、ごめんなさい。 そもそもこのmapに値がうまく入ってないっぽいです。 勘違いです。お許しを
70 名前:デフォルトの名無しさん mailto:sage [2014/04/10(木) 19:27:41.41 ID:iUo3Wr7t] 詫びは金券で
71 名前:デフォルトの名無しさん mailto:sage [2014/04/10(木) 20:44:06.14 ID:PllVVChP] >>68 C++はゆとりが使う言語 ゆとりにそんな高度のこと要求するってアホじゃない
72 名前:デフォルトの名無しさん mailto:sage [2014/04/10(木) 21:47:25.73 ID:x8L/6Xjd] ゆとり駆動開発
73 名前:デフォルトの名無しさん mailto:sage [2014/04/11(金) 01:19:46.96 ID:Q4Xkm7jG] intに32bitもいらないけどint8_tにしたら速くなる?
74 名前:デフォルトの名無しさん mailto:sage [2014/04/11(金) 01:51:08.02 ID:mOd4AtLz] >>73 単発でのアクセスなら速くはならない。変わらないか逆に遅くなることもありえる 多くの値に短期間でアクセスするなら総合的に速くなることはありえる
75 名前:デフォルトの名無しさん mailto:sage [2014/04/11(金) 02:04:20.33 ID:nkEZv0su] i80386 搭載パソコンよりも昔のものでないと早くはならないな 大昔にタイムスリップでもしてみればいいよ
76 名前:デフォルトの名無しさん mailto:sage [2014/04/11(金) 02:09:41.30 ID:Trhukh5Q] おまえら勝手に前提条件を絞るなよ 毎秒2億個のデータのメモリI/Oを行う処理だったら速くなるだろ
77 名前:デフォルトの名無しさん mailto:sage [2014/04/11(金) 03:07:17.29 ID:LKdcLyi6] stlコンテナが返すsize_tに64bitもいらねぇと思うのは俺だけ?俺だけ
78 名前:デフォルトの名無しさん mailto:sage [2014/04/11(金) 07:45:57.86 ID:UOPe7CML] SSEとか使えば早くなるんじゃないかな
79 名前:デフォルトの名無しさん mailto:sage [2014/04/11(金) 08:42:40.24 ID:2sIhZgp+] >>76 メモリと言うのが最近のpcに普通に搭載されているRAMの事なら、恐らく遅くなると思う メモリマップされたハードウェアへのアクセスの事を言ってるなら、速くなるならない以前の問題かなと思う >>73 つまり環境ややりたい事次第としか言えない 基本は実測あるのみ
80 名前:デフォルトの名無しさん mailto:sage [2014/04/11(金) 11:38:15.71 ID:xrw2TyXG] >>76 そういうお前が絞ってんだけどな
81 名前:デフォルトの名無しさん mailto:sage [2014/04/11(金) 12:47:05.09 ID:xoOT/T6O] >>80 まずは論理的な思考ができるようになってから出直した方がいいよ
82 名前:デフォルトの名無しさん mailto:sage [2014/04/11(金) 13:35:34.52 ID:xNOhzDQj] おまゆう (w
83 名前:デフォルトの名無しさん mailto:sage [2014/04/11(金) 21:16:29.87 ID:k/psiUhm] 論理的な思考はゆとり言語使いには不可能だよね
84 名前:デフォルトの名無しさん mailto:sage [2014/04/11(金) 21:53:05.05 ID:YcPYvmq+] うむ、AVIVAで勉強して出直してこい
85 名前:デフォルトの名無しさん mailto:sage [2014/04/12(土) 01:21:09.61 ID:zpUkpEx/] ドモルガンの法則
86 名前:デフォルトの名無しさん mailto:sage [2014/04/12(土) 14:21:35.87 ID:tsoK51Gy] 関数にするか俗にいう関数オブジェクトにするかの 決定基準を教えてください。
87 名前:デフォルトの名無しさん mailto:sage [2014/04/12(土) 14:33:05.67 ID:n/AZTTd0] 関数オブジェクトにする。
88 名前:デフォルトの名無しさん mailto:sage [2014/04/12(土) 15:09:03.89 ID:tsoK51Gy] ありがとうございます。 関数を作らないのがC++の流儀なのですね。
89 名前:デフォルトの名無しさん [2014/04/12(土) 15:25:15.43 ID:+b8z6TLB] んなことない
90 名前:LILIN [2014/04/12(土) 17:53:04.29 ID:3XpcVmBg] qiita.com/ririn_yume/items/59b2e8917bd80e95a169 ディクス・ファイルへの入出力で日本語が使えるように書いてみたんだけど [i/o]streamのストリーム・バッファは1バイトの特定しかないの(´・ω・`)? なんかスタンダードな方法ってる?basic_iostream を多バイトで特定するとか。
91 名前:デフォルトの名無しさん mailto:sage [2014/04/12(土) 18:03:57.12 ID:TFvrScmT] ttp://ideone.com/NS7oho 日本語使えるだろ
92 名前:LILIN [2014/04/12(土) 18:34:00.11 ID:3XpcVmBg] よくわからないんだけど、wostream, wistream, istream, ostream, char wchar_t これらはあくまでプログラム内部で1バイトや2バイト固定長で、ストリームのバイト幅は1バイトしかないでおk? 複数バイトをディクス・ファイルに特定の符号化でエンコーディングした文字コードを文字として出力するときも1バイト単位を処理する必要あり? もちろん出力先はコンソール・インタープリタではなく。
93 名前:デフォルトの名無しさん mailto:sage [2014/04/12(土) 18:54:46.05 ID:djgLKFxC] >>86 ・関数が状態を持つとき ・関数を引数として渡した先でのインライン展開を期待するとき ・ラムダ式を使いたいとき は関数オブジェクトにする(になる)
94 名前:デフォルトの名無しさん mailto:sage [2014/04/12(土) 18:58:35.11 ID:TFvrScmT] >>92 1バイト単位を処理の主語はなんだ? 誰が1バイト単位を処理するんだ?
95 名前:デフォルトの名無しさん [2014/04/12(土) 20:16:07.56 ID:kaC5V1Cc] 大抵の機械のシステムコールあるいはAPIにおいて、入出力はバイト単位で行われます。 従って、それらを利用する大抵のライブラリも、バイト単位の入出力を利用しています。 大抵の環境において、C++標準ライブラリはバイト単位の入出力を利用していますが、 codecvtというクラスによって、文字符号化の変換やwchar_tへの変換などを行っています。 C++のストリームは、このcodecvtを利用しています。 LILIN様は、まず、codecvtについて調べてみてはどうでしょうか? あるいは、ロケールというキーワードも参考になるかもしれません。 「そのくらい知ってる!」という場合は、申し訳ありません、早とちりでした。
96 名前:デフォルトの名無しさん mailto:sage [2014/04/12(土) 20:16:26.65 ID:WnsvY9aE] >>93 アセンブラで説明してくれ
97 名前:デフォルトの名無しさん [2014/04/12(土) 20:18:36.80 ID:kaC5V1Cc] じゃあ僕は、トリコで説明してほしいです。
98 名前:LILIN [2014/04/12(土) 21:11:39.73 ID:3XpcVmBg] >>95 ありがとうm(_ _)m
99 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 10:26:55.87 ID:N/BcLaK6] クラス変数で、 static const int a=1; がなんで宣言であり定義とどこがちがうんですか? クラス変数で const int a; と定義してコンストラクターで初期化するのと 上の方法の違いってなくないですか? constでメモリが参照されなければ最適化で変数は値に置き換えられるじゃないですか。 staticをつける意味はなくないですか?
100 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 10:35:39.32 ID:+E56QUWv] インスタンス2つ以上作ってから言え
101 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 10:40:29.73 ID:+SJW0QdK] >>99 出来るならそれでいいんじゃね
102 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 11:29:02.12 ID:N/BcLaK6] >>100 作るとどうなりますか? >>101 できるんですか?
103 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 12:20:48.14 ID:g6kjuewa] >クラス変数で >const int a; >と定義してコンストラクターで初期化するのと 初期化とは言えない。 constだからコンストラクターでは代入できない。 constじゃなくする場合、クラス変数なのにインスタンス作るたびに値が変化しうるけど、それで目的にあってる?
104 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 12:51:07.94 ID:N/BcLaK6] えっ,コンストラクターの横についてる:の後ろのやつならできるでしょ
105 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 12:54:16.29 ID:ZK38pnpA] >>99 まず>>100 の通り実体の数が違います。 あと前者の方が最適化されやすい。 >>103 は何か勘違いしてる。
106 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 14:36:26.43 ID:N/BcLaK6] >>105 実態の数は両方とも0だと思いますけど あと、一番初めの質問も教えてください。 static const int a=1;が宣言であり 定義ではないということです。
107 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 14:46:15.01 ID:N2UMgO6H] メンバ変数での static const int は特別でコンパイル時定数になります
108 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 14:58:37.13 ID:g6kjuewa] >>105 >>99 はクラス変数でって言ってるんだぞ?
109 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 15:03:28.42 ID:Eo6+lIk6] >>106 定義でないという根拠は? 9.4.2段落2から読んだのならそこは 「チョーンジン=犯罪者ではない」と同じで チョーンジンに犯罪者がいないと言ってるわけではないと思う。 段落3を読む限りstatic constは定義では
110 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 15:29:45.13 ID:N/BcLaK6] >>109 effective C++に定義ではなく宣言ですと書いてある。
111 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 15:39:19.06 ID:N2UMgO6H] ttp://ideone.com/RE6p09 これが違いだ 分かったか? これだけのことなのに
112 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 15:57:46.28 ID:N/BcLaK6] sizeof(test2)をやるとaのアドレスを参照するから メモリーが確保されるってことですか?
113 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 16:02:35.92 ID:g6kjuewa] >>111 で、 君が>>107 で言ってる「メンバ変数でのstatic const int」ってのはどれのことだ?
114 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 16:03:44.45 ID:N2UMgO6H] >>113 5行目
115 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 16:51:27.64 ID:g6kjuewa] >>114 クラス変数のことをメンバ変数とか呼ぶから混乱するんだろ
116 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 16:54:02.69 ID:LghAmP6/] >>115 混乱してるのはお前だろ… javaじゃないんだから用語はメンバ変数で正しい
117 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 16:57:29.50 ID:g6kjuewa] >>116 おおもとの>>99 がクラス変数って言ってるんだからそれに沿えばいいだろ? そもそもstaticのあるなしが問題になってるんだから呼び分けろ。
118 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 17:00:06.00 ID:N2UMgO6H] 混乱とか言ってるのID:g6kjuewa だけなんだが なんで突っかかってきたんだ?
119 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 17:06:05.85 ID:g6kjuewa] 1.クラス変数という言葉はc++で言うstaticメンバ変数の意味で使われる 2.もとの>>99 もその意味で使ってるようだが、ちょっと間違ってる 3.>>100 でその点を指摘した という流れだが?
120 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 18:26:10.37 ID:rD/qzpQw] >>119 もともとの>>99 を読んだら グローバル変数や自動変数でなくメンバー変数の意と して使っているとわかりそうなものだが。 >1.クラス変数という言葉はc++で言うstaticメンバ変数の意味で使われる お前の脳内ではな
121 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 18:51:23.38 ID:g6kjuewa] >>120 >>1.クラス変数という言葉はc++で言うstaticメンバ変数の意味で使われる >お前の脳内ではな 「クラス変数」とか「インスタンス変数」言語を特定しないは一般的な用語であり、 C++においてはそれぞれ「staticメンバ変数」と「メンバ変数」と解される。 ・・・と理解していたが、それは俺の脳内だけなのか? もし違ってたら謝ります。
122 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 19:00:10.00 ID:g6kjuewa] 読み返してみた。 >>99 が「クラス変数」と「インスタンス変数」を使い分けて質問してるもんだ、と頭から思い込んでいた。 すまんかった。
123 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 04:44:21.59 ID:zT5aQk31] >>121 うむ、Javaの知識と感覚でC++の質問に答えたお前が悪い メンバイニシャライザも知らんかったみたいだし
124 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 06:18:59.60 ID:ylD7aR0F] 参考までにJava言語仕様8.1.6には クラス変数などという用語は出てこない
125 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 06:30:03.60 ID:ylD7aR0F] ちなみにstatic Fields(8.3.1.1)がJavaの用語。 対する用語は「インスタンス変数」なんだよな。 『A field that is not declared static (sometimes called a non-static field) is called an instance variable』
126 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 06:32:31.54 ID:zT5aQk31] >>111 それは静的メンバが含まれないってだけ ideone.com/LgJlvX >>110 宣言とは、その名前の何かを使うというだけの記述 静的メンバ変数は、宣言だけでは定義となりえないので、 外部での実体の定義が必要になる そしてconstな静的メンバに限り、初期化子(初期値)を付けて宣言でき、 この場合、定義無しだとコンパイル時定数となるが、実体は無い ideone.com/wpfWZz
127 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 07:22:24.24 ID:zT5aQk31] 重要な事を忘れていた ただのconstのメンバ変数でも、実体が必要になる コンパイル時定数となりうる物は、 この実体がなくても良い、という部分が決定的に異なる
128 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 08:13:35.96 ID:n9bi2Qgd] >>126 >この場合、定義無しだとコンパイル時定数となるが、実体は無い それは規格のどこから読みとりましたか?
129 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 08:46:57.77 ID:/ePxSNZc] 9.4.2 p3 > If a non-volatile const static data member is of integral or enumeration > type, its declaration in the class definition can specify a > brace-or-equal-initializer ... > ... The member shall still be defined in a namespace scope if it is > odr-used (3.2) in the program and the namespace scope definition shall > not contain an initializer.
130 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 08:53:18.11 ID:zT5aQk31] >>128 先に規格のバージョンを明記してくれ
131 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 08:59:53.32 ID:zT5aQk31] すまん、レス見えてなかった
132 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 09:09:37.16 ID:kTPbyAAA] 規格が改訂されたばかりというわけでもないのに バージョンを示せとはこれ如何に
133 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 09:35:50.91 ID:zT5aQk31] >>132 昔の規格を言ってるのかなと思ってさ
134 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 12:20:31.03 ID:TPz1PbMj] クラス変数とかインスタンス変数とかって java用語じゃなくてUML用語ではなかった?
135 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 21:40:51.85 ID:ViqegF57] >>126 俺、constな静的メンバって使ったことはないと思うけど特殊なんだな 定義無しだと#defineと同じようになるのか。メモメモ
136 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 21:54:30.89 ID:zBaLgPlx] じつは>>126 =>>135
137 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 22:08:41.76 ID:TPz1PbMj] >>135 それは少々珍しいと思う。 テンプレートパラメータにint Nがあって static const int value = N; とやって公開するのは結構ある。
138 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 06:54:06.40 ID:LKf0w0dM] >>134 入門 UMLしか読んでないにわかですが UMLだと、クラスと対になるのはオブジェクトで、 インスタンスという用語は、ある抽象概念に対する具象概念を指すものだったはず 例: クラスのインスタンスはオブジェクト、関連のインスタンスはリンク
139 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 11:47:27.55 ID:Kk2d82mo] >>134 クラス変数もインスタンスも変数も一般的に 使われる用語だしwikipedia等にも出てるけど、 UMLではより一般的にクラス属性`/インスタンス属性 って呼んでると思う。
140 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 14:32:57.64 ID:MSpw9Zgl] まとめると次のようなことですか? constなインスタンス変数はアドレスを参照しない限り最適化でコンパイル時に定数に置き換えられる。 クラス変数はアドレスを参照しない限りコンパイル時に定数に置き換えられる。(アドレスを参照できないようにするにはenumをつかう) これは関数のconstかつstaticな変数とconst な変数でもおなじことですか?
141 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 15:37:07.75 ID:tBkVUf7m] constがついているからといってコンパイル時定数に置き換えられるとは限りません コンパイル時定数に置き換えられるのは基本的にメンバ変数のstatic const intだけです
142 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 15:54:55.16 ID:ZhvDr343] なにいってんの? ヘッダにconstで定義しておけば定数に展開される 変数と違ってコンフリクトせずにリンクされるだろ
143 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 17:14:40.81 ID:pNCuTv8p] 最適化畳み込みと定数を一緒にすんな
144 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 17:36:22.42 ID:ZhvDr343] なにその最適化論馬鹿なの? ヘッダに const 書く場合とソースに const 書くのとは まったく別なんだけどさ
145 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 17:40:17.93 ID:nGPCY0pH] なぜヘッダならソースならの話になるんだ 必ずコンパイル時定数になるのと もしかしたら最適化で定数にしてくれるかもしれない は全く別の話だろう
146 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 19:53:01.86 ID:X1tE4sNn] ヘッダーは処理系が提供するもので プログラマーが書くファイルはヘッダーとは言わないんだけど そこんとこOK?
147 名前: ◆QZaw55cn4c mailto:sage [2014/04/15(火) 20:00:16.02 ID:IcL8WQqn] >>146 いや,自前でヘッダを書くことは普通のことかと 分割コンパイルしたことありますか?
148 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:16:04.89 ID:Kk2d82mo] >>146-147 >>19
149 名前: ◆QZaw55cn4c mailto:sage [2014/04/15(火) 20:24:16.19 ID:IcL8WQqn] >>148 >>19 >ヘッダーという用語は規格上は処理系が提供するものを指す 規格とやらののどこにかかれているか引用してくれ
150 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 21:17:34.56 ID:Kk2d82mo] >>149 それはドヤ顔の>>146 に聞け。
151 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 22:10:01.92 ID:5PwrNHty] ISO/IEC 14882:2011の16.2段落1〜7あたり? 微妙な記述だな
152 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 22:28:34.12 ID:LKf0w0dM] >>146 あなた上のJava知識で答えてる人ですよね 初心者でも言いませんよそんな事
153 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 22:58:47.22 ID:LKf0w0dM] >>142 ただのメンバ変数を実際に初期化するのは、コンストラクタですので 定義の場所は関係無いです その上コンストラクタのインライン化で、constメンバが最適化で定数になろうが、 ソース上では定数式として扱えることとは別次元の話です
154 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 23:13:47.00 ID:UvYr1D+z] データメンバに構造体配列があんだけど{{,,,},{,,,}…みたいなやつで初期化できない 案として関数で同じ型tempに入れた後memcpyするって考えたんだけど、 {{,,,},{,,,}…みたいなやつ以外で配列に楽に数値入れられる方法ない?
155 名前:とんぼ ◆0ioouYq6qF8x mailto:sage [2014/04/15(火) 23:14:43.49 ID:GMTmmGNh] 質問です。 「ロベールのC++入門講座」って良い本でしょうか?ちょっと興味を持っています。 www.amazon.co.jp/dp/4839926050
156 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 23:21:17.29 ID:tBkVUf7m] >>154 ideone.com/VQzRHQ
157 名前:デフォルトの名無しさん [2014/04/15(火) 23:43:50.57 ID:irAkhtzu] 取り替え 新しい
158 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 23:55:03.42 ID:UvYr1D+z] >>156 試してみますありがとう
159 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 00:18:42.75 ID:33nvow5c] >>155 はい
160 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 00:28:28.07 ID:2jM3l7Be] >>152 part109から出てる話(のコピペ)だが、実は規格的にはその通りらしい。 ドヤ顔がうざいので>>18-19 あたりでテンプレ化が提案された。
161 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 00:54:02.89 ID:j3CsnXmn] 403 デフォルトの名無しさん sage 2014/01/04(土) 03:26:18.89 >>>400 >ヘッダーというのはコンパイラが提供するものなので >アナタは書かないで下さい 429 デフォルトの名無しさん sage 2014/01/04(土) 13:36:43.48 >おそらくど初心者の寝言 432 デフォルトの名無しさん sage 2014/01/04(土) 13:52:11.33 >iostreamのようなものがヘッダーで >プログラマーが書いたmy.hはヘッダーじゃないってことだろ。 >「インスタンスと言ったらテンプレートの話」レベルでは厳密には正しい。 >規格上は >#include "my.h" >はヘッダーでなくソースファイルのインクルード。 「インスタンス」のテンプレ化も誰か考えてくれ
162 名前: ◆QZaw55cn4c mailto:sage [2014/04/16(水) 01:33:54.12 ID:QJ8zo2+Q] >>151 16.2 Source file inclusion [cpp.include] 1 A #includedirective shall identify a header or source file that can be processed by the implementation. この or は「すなわち」と読んでしまいそうだ
163 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 01:44:38.87 ID:d9mP/+D0] …どう迷訳したら>>162 が>>19 になるんだ
164 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 02:03:28.59 ID:tL+eav+5] 私も>>162 の意図は理解できかねますが、 規格には確かに明示的には書かずとも、使い分けているようです 初心者でも言わない、と言った事を謝ります > A preprocessing directive of the form > # include < h-char-sequence> new-line > searches a sequence of implementation-defined places for a header identified .... > 3 A preprocessing directive of the form > # include " q-char-sequence" new-line > causes the replacement of that directive by the entire contents of the source file identified... > [Note: (略) in general programmers should use > the < > form for headers provided with the implementation, > and the " " form for sources outside the control of the implementation.
165 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 07:37:56.51 ID:+jbsyRAW] どっちが初心者だってことか。C++の世界は奥が深いな。
166 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 08:08:09.96 ID:KLaNkKwv] 一つ言えるのは、 この知識が役に立つことは今後無い
167 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 08:51:59.21 ID:hgB94LTZ] >>156 vs2012に張り付けてみたらtest::innerのところ波線引かれてるんだけど
168 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 09:09:57.22 ID:Im3wLyAK] >>167 それって規格準拠度が(ry 実は俺も::innerは初めて見た……ググっても内部クラスのことしか出てこねぇw
169 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 09:10:27.93 ID:diJ3rZ34] vs2010でデフォルトエンコードをUTF8にする方法ってないですよね・・・?
170 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 09:11:43.32 ID:B883BlvZ] ヘッダがマシーンによってプロデュースされるなんて話は初めて聞いた
171 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 09:15:51.92 ID:hgB94LTZ] >>168 2013だと波線でなかった。新しめの方法なんですね
172 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 12:06:12.86 ID:C8nNiAQg] >>164 使い分けてることと、提供するかどうかは別だと思うが #include "〜" はソースもインクルードできるからヘッダーって言ってないだけじゃね?
173 名前:デフォルトの名無しさん [2014/04/16(水) 14:57:05.92 ID:cUKcFdx2] だな >>164 を読んで#include ""するソース(ヘッダ含む)はヘッダと呼んじゃいけない と判断するやつはどこかおかしい
174 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 15:05:12.66 ID:d9mP/+D0] つか".h"".hpp"なんだから素直にヘッダって呼んでやれよ なにか?じゃあこのhは別の意味のhか?
175 名前:片山博文MZバグロボ ◆T6xkBnTXz7B0 mailto:sage [2014/04/16(水) 16:00:32.29 ID:/cD6mxuW] >>169 neareal.net/index.php?Programming%2FEnvironment%2FVisualStudio%2FChangeTheCharacterCode >どうやらVisualStudio2012以前のVisualStudioには >デフォルトのエンコードを設定する方法はないようです。
176 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 16:04:36.82 ID:eXrLUXWn] 第一段落で A #include directive shall identify a header or source file と言う説明があるからheaderとsource fileは別物 むしろ>>164 を読んでhがheaderと思う方が変
177 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 16:39:17.50 ID:bROaamlw] ヘッダーファイルって文字通り先頭で読み込むファイルのことでしょ。 その拡張子はCでは慣習的に.hにしてた。 ってことじゃないの?
178 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 17:22:26.81 ID:RlYL1+PT] 規格から読みとれるのは以下 ・#include<>は処理系定義のheaderをインクルードする ・#include""はソースファイルをインクルードする ・#include""はソースファイルが見つからなかったら #include<>として再解釈する ・headerとソースファイルは別物らしい(16.2p1) そのためheader fileなどという用語はない ・stdio.hは処理系提供のheader ・unistd.hも処理系提供のheader ・myprog.hはソースファイル ・規格にはファイルの拡張子(.hと.cpp)についての言及無し さあmy.hはヘッダーか否か?
179 名前:デフォルトの名無しさん [2014/04/16(水) 17:23:29.68 ID:cUKcFdx2] ヘッダー/ソースっていうんじゃなくて ヘッダー/実装っていう2分だよな 規格中の言葉遣いが完全じゃないところに拘るのはちょっと。。。 ソースファイル納入を条件の仕事で下請けがヘッダファイルを除外して納入してきたらどう思う?
180 名前:KAC mailto:sage [2014/04/16(水) 17:35:03.48 ID:JwWRkONO] ソースファイルってのは、ソースコードがかかれたファイルの事。 なので、ヘッダファイルと呼ばれているものもソースファイルの一種。 ヘッダファイルというのは、 ソースファイルのうち先頭で読み込まれることを前提としたもの。 #include "my.h" void main(){ #include "my.c" }; なら、"my.h"はヘッダで、 "my.c"はヘッダじゃない。 処理系がヘッダ以外のものを提供することは前提としていないから 処理系が提供するヘッダという記載になっただけじゃ?
181 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 17:49:52.35 ID:1uhiGx2H] ソースAにグローバル変数で以下のように宣言されていて static double gdatanum=0.0; これをGetSetする関数があるのですが ソースBでSetしてソースCでGetすると値が0.0でした なぜでしょうか
182 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 17:51:21.85 ID:NuAUVtDw] Setでgdatanumに代入ができてないのだろう
183 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 17:52:54.26 ID:RlYL1+PT] >>180 >ヘッダファイルというのは、 >ソースファイルのうち先頭で読み込まれることを前提としたもの 自分の脳内定義を居丈高に主張されても >・headerとソースファイルは別物らしい(16.2p1) >・myprog.hはソースファイル この状況でmy.hがヘッダーと言う人は論理的な思考が出来ない人
184 名前:KAC mailto:sage [2014/04/16(水) 17:54:52.47 ID:JwWRkONO] >>181 GetSetする関数とそれを使う所のソース貼ってみたら?
185 名前:KAC mailto:sage [2014/04/16(水) 17:55:35.03 ID:JwWRkONO] >>183 おまえ、"ヘッダ"の意味辞書で引いてみ?
186 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 17:56:17.15 ID:1iwpwwyp] >>181 staticなんか付けたから
187 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 17:59:17.93 ID:HsjrRpyw] includeするユーザーのファイルはheader fileに限定できないから source fileと書いているだけなんじゃ。 でも、その表現だと、処理系が独自にヘッダーじゃない includeするファイルを提供することが出来ないような。
188 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 18:22:01.22 ID:RlYL1+PT] >>187 規格はmyprog.hがソースファイルだと言っているのけれど header file以外のsource fileって何? >>185 C++の話をする文脈で断りもなく 規格の用語を異なる意味で使ったらおかしいでしょ
189 名前:とんぼ ◆0ioouYq6qF8x mailto:sage [2014/04/16(水) 18:36:18.46 ID:VWOXLAN+] >>125 Java言語でもクラス変数で意味は通じると思うよ
190 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 18:38:42.19 ID:oc0x5q+M] × Java言語でもクラス変数で意味は通じる ○ Javaドカタとの会話でもクラス変数で意味は通じる
191 名前:とんぼ ◆0ioouYq6qF8x mailto:sage [2014/04/16(水) 18:52:16.09 ID:VWOXLAN+] >>190 Java言語仕様でも「クラス変数」って使われてるよ
192 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 19:19:38.95 ID:RlYL1+PT] すごく細かいことだけど JAVA()ではstatic fieldとclass variableは 両方とも用語が定義されていて意味が違う 4.12.3 A class variable is a field declared using the keyword static within a class declaration (§8.3.1.1), or with or without the keyword static within an interface declaration >>124 みたいな嘘がどこから出てくるのか不思議
193 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 19:25:22.97 ID:HsjrRpyw] >>188 C++の規格では、headerもsource fileも明確に定義されているわけではない。 #includeの定義に定義されていない(がおそらく自明な)用語として用いられているだけ。 そもそも16.2のタイトルがSource file inclusion その中で<>は指定されたheaderの内容を取り込み、 ""は指定されたsource fileの内容を取り込む とあるからタイトルからして、source fileという表現はheaderという表現を内包している。 6 A #include preprocessing directive may appear in a source file that has been read because of a #include directive in another file, up to an implementation-defined nesting limit. さらにこんなことも書いてあるが、ここでいうsource fileって<>で指定したheaderも含んでいるだろ。 headerという用語をユーザー側のファイルで使ってはいけないなんて ルールはどこにも書いていない。
194 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 19:34:33.23 ID:RlYL1+PT] >>193 都合の悪いところを読み飛ばすなよ >>178 で書いたとおり 「ソースファイルを取り込むものだけど 失敗したらheaderの取り囲み」だからタイトルが Source file inclusionなんだよ >ここでいうsource fileって<>で指定したheaderも含んでいるだろ どこからそんな妄想が? もう一度書いてやる。 >・headerとソースファイルは別物らしい(16.2p1) >・myprog.hはソースファイル この状況でmy.hがヘッダーと言う人は論理的な思考が出来ない人
195 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 19:41:22.60 ID:d9mP/+D0] 小保方みたいなこといってんじゃねーよ
196 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 19:52:33.61 ID:HsjrRpyw] >The method by which a sequence >of preprocessing tokens between a < and a > preprocessing token pair or a pair of " characters is combined >into a single header name preprocessing token is implementation-defined. ここに関しても良く分からんというか、single souce file nameの時は 実装定義とも未定義とも書いていないが。 明確に定義されないで使われている用語に関して その使われ方から類推して一般的に用いられているのと 違う意味として定義されているように解釈するのは それこそ、論理的思考ではないだろ。
197 名前: ◆QZaw55cn4c mailto:sage [2014/04/16(水) 20:01:23.76 ID:QJ8zo2+Q] >>176 お前、そんなところでちょん切るから 「A or B において A≠B」 という誤解が生じるんだ、ちゃんと全文を書け 1 A #includedirective shall identify a header or source file that can be processed by the implementation. この場合、. 「A or B において A≒B」の可能性を否定できない 「A いいかえると B」「A すなわち B」「A つまり B」と解釈する余地がある。 高等学校リーダーの初歩だからしっかり復習したまえ
198 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 20:12:58.87 ID:Im3wLyAK] >>197 論理の世界じゃ「AもしくはB」は排他的論理和だからな…… 「AまたはB」だと両方真でもOKだから。これはプログラムでも同じこと
199 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 20:13:18.78 ID:KbgAUGrE] そのあとに>>164 の使い分けが続くのに どうしてそんな曲解ができるだぜw
200 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 20:15:36.81 ID:1tTmzh2z] >>197 高等学校リーダーの初歩が分かっているなら 能書きは良いから、その文を和訳しろよ
201 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 20:20:54.95 ID:2jM3l7Be] >>198 排他的!?
202 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 20:41:08.27 ID:d9mP/+D0] 「1行の#includeディレクティブは唯1つの、処理系が処理できるヘッダーもしくはソースファイルを識別する(様に記述する)べきである」 そりゃそうね。ここではheaderとかsourceとか主題からはどうでもいい
203 名前:とんぼ ◆0ioouYq6qF8x mailto:sage [2014/04/16(水) 20:42:13.58 ID:VWOXLAN+] >>192 英語苦手だから間違ってるかもしれないけど Java言語では、「static フィールド = クラス変数」だと思うよ > 8.3.1.1. static Fields > ... > A static field, sometimes called a class variable, is incarnated when the class is initialized (§12.4). スレ違いごめんなさい。
204 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 20:42:44.40 ID:tL+eav+5] >>197 このような堅い文章で、カンマなしのorを、すなわちなんて訳さないと思いますが
205 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 20:44:09.48 ID:tL+eav+5] >>203 その一文だと、正式名称はスタティックフィールドという意図になると思います
206 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 20:54:52.75 ID:1tTmzh2z] >>202 なんで、 ヘッダーいいかえるとソースファイル ヘッダーすなわちソースファイル ヘッダーつまりソースファイル ってしないんだ?
207 名前:とんぼ ◆0ioouYq6qF8x mailto:sage [2014/04/16(水) 22:23:16.70 ID:VWOXLAN+] >>205 私には、正式がどうかはわかりません。 staticフィールド (staticのついてるフィールド) = クラス変数 非staticフィールド (staticのついていないフィールド) = インスタンス変数 「クラス変数」と「インスタンス変数」の方が、世間一般的な用語だと思います。 なお、「クラス変数、インスタンス変数」の用語も使われていますので、 意味は通じると思います。 Java Language Specification docs.oracle.com/javase/specs/jls/se8/html/jls-8.html スレ違いすみません
208 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 22:37:47.15 ID:2jM3l7Be] でもこの話の発端となった>>99 では「クラス変数」という表現でインスタンス変数のことも指してたし、 あんまり一般的じゃないのか?とも思った。
209 名前:デフォルトの名無しさん [2014/04/16(水) 22:51:59.76 ID:cUKcFdx2] 何の役にも立たない、どーでもいい重箱の隅のトンチクイズみたいなのばかり盛り上がるね
210 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 23:15:11.18 ID:RlYL1+PT] >>207 Java言語仕様では>>192 に示した「class variable」は 斜体つまり特別なterm。 その定義(4.12.3)が「class宣言内のstaticなフィールドおよび インターフェース宣言内のフィールド」なの。 そして何故かclass内のstaticなフィールドのみをstatic fieldと呼んで(8.3) インターフェース内のstaticなフィールドを static fieldと呼ぶ記述は見あたらない(9.3)。 ちなみに先月のJava言語仕様改訂までは static field=class variableでいいと思う
211 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 23:22:18.50 ID:tG4IqjPv] インクルードパスが通ってるところがヘッダーでそれ以外がソースファイルってことか
212 名前:デフォルトの名無しさん mailto:sage [2014/04/16(水) 23:24:08.08 ID:+Gnb3ikJ] 一般的に使われている用語の話と規格の定義を一緒にする人がいるから 規格の解釈を語ろうとする人との会話が噛み合っていない
213 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 00:43:29.79 ID:j9nnbtNK] 盛り上がってるとこ悪いけどコンパイル時定数にしたいならconstexpr使えよ
214 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 01:06:16.22 ID:471VrbUx] >>213 爺がが多いこのスレ住人はC++11は使わない C++11は完全にゆとり用だし
215 名前: ◆QZaw55cn4c mailto:sage [2014/04/17(木) 02:34:02.07 ID:7Na2DDXs] >>204 たしかに >>197 の解釈をしたいのなら同格のコンマ、がほしいところではありますね それにしても「ヘッダ」と「インクルードファイル」を分けた思想がよくわかりませんね、内容に差はないのに
216 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 02:34:56.33 ID:7Na2DDXs] 失礼、非限定用法のコンマ、としたほうがいいかな
217 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 07:53:47.81 ID:sHAbMX/D] 爺はC++すら使いませんが…。 何度注意してもmemsetでクラスを初期化しようとするし むしろ使わせてはいけない。
218 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 08:05:40.50 ID:INoT3wR+] baad f00d とかdead beef じゃ無いだけまし
219 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 09:01:27.72 ID:63MO/YQs] >>215 ヘッダはコンパイラから見て内容がほぼ固定であり、ファイルとして処理するよりも効率的な、 (たとえば規定どおりの宣言を有効にするコンパイラ内部のフラグを立てるだけ、とかいう) 実装があるかもしれない・・・ってことだと理解している。そういう実装を見たことは無いんだけど。
220 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 10:04:15.07 ID:BAGutlSP] ヘッダはファイルじゃなくてもいいんじゃなかった?
221 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 12:50:13.74 ID:WzS6AOuu] ヘッダーはファイルである必要はないよ メジャーなコンパイラの実現方式がファイルであって プログラマがヘッダーをコンパイラに追加させる仕組みが インクルードディレクトリ
222 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 15:21:05.38 ID:cqNmjTsF] ディレクティブ
223 名前:とんぼ ◆0ioouYq6qF8x mailto:sage [2014/04/17(木) 17:43:00.61 ID:yCqA9Csi] >>210 「 class variable 」の説明部分見ました。ありがとうございます。 interface のフィールドは、実質的に public static final がついた状態になるので、 あえて static フィールドとは言わないのだと私は思います。 スレ違いごめんなさい。
224 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 22:44:49.70 ID:BPlv1lov] スパゲッティつくってくる
225 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 23:04:51.62 ID:Y7Fdq8Iy] 食いもんの方か、プログラムの方かわからんから突っ込みづらいわ
226 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 00:28:18.50 ID:fMz311pO] >>225 コードの方なら普通全力で止めに入るもんだろ……
227 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 04:04:49.92 ID:o8YE1PQa] そういや実装が見事にスパゲッティなMonacoinが近日高騰するそうですよ
228 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 04:47:38.93 ID:W8zdUC/x] そんな二番煎じの通貨では小麦も買えぬわ
229 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 06:00:04.50 ID:Mr51hVCQ] 昭和の労害:スパゲッティ 普通の人:パスタ
230 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 07:53:09.03 ID:X42XW7L4] >>226 自分に関係するなら止めるけど、関係しないなら割りとどうでもいい。 本人趣味でやってるかも知れんし。
231 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 08:13:22.34 ID:9F2L+G8f] >>229 スパゲッティ以外のパスタを知らない田舎者。
232 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 08:29:21.30 ID:DFRxgHMB] これどういうことですかね… /* g++ 4.7.2 */ #include <iostream> #include <chrono> #include <unistd.h> int main() { std::chrono::system_clock::time_point tp1; std::chrono::system_clock::time_point tp2; tp1 = std::chrono::system_clock::now(); sleep( 3 ); tp2 = std::chrono::system_clock::now(); std::chrono::milliseconds m1 = std::chrono::duration_cast<std::chrono::milliseconds>( tp2 - tp1 ); std::cout << m1.count () << " msec." << std::endl; std::time_t tt1, tt2; tt1 = std::chrono::system_clock::to_time_t( tp1 ); tt2 = std::chrono::system_clock::to_time_t( tp2 ); std::cout << std::ctime( &tt1 ) << std::ctime( &tt2 ) << std::endl; return 0; } // 3000 msec. // Fri Apr 18 00:05:57 2014 // Fri Apr 18 00:05:57 2014
233 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 08:31:48.36 ID:IuBLW4Yt] どうって、その情報からは お前がコミュ障ってことしかわからん
234 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 08:34:01.00 ID:6aub1SvC] sleep(3000)ってしようとしたのかな
235 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 08:35:49.18 ID:VaFc+PBF] now()で3秒空けて2回時刻取得したのに to_time_t()で文字列に変換したら差が無かったって事でしょ
236 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 08:38:16.45 ID:DFRxgHMB] >>235 こういう仕様なんですか?
237 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 08:43:43.17 ID:Ovl+7gT1] sleepは秒指定なのか? と>>234 が言ってるぞ。
238 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 08:45:19.05 ID:DFRxgHMB] >>234 >>237 <unistd.h>のsleep()は秒指定です
239 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 09:48:44.05 ID:DFRxgHMB] >>232 の std::cout << std::ctime( &tt1 ) << std::ctime( &tt2 ); を、 std::cout << std::ctime( &tt1 ); std::cout << std::ctime( &tt2 ); に変更したら上手く行きました…
240 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 10:17:59.35 ID:nz5iU1yO] そりゃぁねぇ。ctime()は結果を同じ場所に置くから。
241 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 10:57:08.78 ID:DFRxgHMB] strtok()は知ってたんですが、ctime()もそうだとは! お騒がせしました
242 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 16:59:43.47 ID:W8zdUC/x] >>240 スレッドが関わるとどうなるんだこういうの?thread_local?
243 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 17:43:11.46 ID:kmb+8Ph3] 20.11.8/2 The contents are the same as the Standard C library header <time.h>.230 The functions asctime, ctime, gmtime, and localtime are not required to avoid data races (17.6.5.9).
244 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 18:02:14.18 ID:W8zdUC/x] なる。もう使うな状態なんだな…
245 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 22:00:22.34 ID:FjJDc/SF] >.... are not required to avoid data races 変更したくても影響大で出来ないのか?
246 名前:デフォルトの名無しさん mailto:sage [2014/04/18(金) 22:57:33.82 ID:D85r3WZf] C++11時点で最新のC言語規格にスレッドは無かったし C++の規格書の中で別の規格であるC言語についてはあーだこーだ言いたくないんじゃない? 歴史を見ればCfrontやMinGWみたいにC++処理系とCランタイムが別々の開発元とかになると手の出しようが無いし
247 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 04:36:37.42 ID:uixitbPb] ちなみにISO/IEC9899:2011でもctimeはマルチスレッド非対応
248 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 04:38:22.41 ID:uixitbPb] そもそも内部で確保したC文字列を返す関数を使う奴は低能
249 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 07:59:44.33 ID:mm0uPHzd] 領域解放の必要のない構造体返して来る関数全般はマルチスレッド対応してないよ。
250 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 08:13:39.74 ID:mm0uPHzd] そもそもctimeが返して来る領域は一時的なものであるのでつかいまわす場合は、 std::cout << std::string(std::ctime(&tt1)) << std::string(std::ctime(&tt2)) ; と記述すべきところ。
251 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 08:41:29.66 ID:aOosZTdR] >>250 激しく同意。 struct tm st = *localtime(&t); とかも良くやる。 _r 系があればそっち使うけどね。
252 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 09:41:12.82 ID:5Hp05dG5] >>248 スレッドがない環境で作られた仕様にダメ出しして悦に入るって...
253 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 09:45:15.09 ID:uixitbPb] >>250 >std::string(std::ctime(&tt1)) << std::string(std::ctime(&tt2)) 頭が悪いにも程がある >>252 一つ二つ前のレスくらい呼んだらどうなの?
254 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 20:16:02.49 ID:5Hp05dG5] >>253 > 一つ二つ前のレスくらい呼んだらどうなの? 意味わからん。 ひょっとして、バカなの?
255 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 20:34:59.05 ID:uCk0NbPn] そうだよ お前の頭が馬鹿なの
256 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 21:18:23.95 ID:/NVZ6Ial] C++11からマルチスレッド対応したのに色々使えない関数があるって 増築言語らしいよな。
257 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 21:22:47.27 ID:Db2IzPol] >>249 ダウト
258 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 21:26:36.87 ID:8AHQat+M] >>256 はマルチスレッドの知識ゼロ アホ過ぎる
259 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 21:36:56.46 ID:/NVZ6Ial] マルチスレッド非対応の関数を新しい関数を作って 対応させる話なんてないのか?
260 名前:デフォルトの名無しさん mailto:sage [2014/04/19(土) 22:10:47.46 ID:qMQpXs4I] ctime_s
261 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 04:16:34.27 ID:ASih51cE] >>260 Cのctime_sならスレッドセーフだとでも?
262 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 07:04:22.94 ID:NvL/wT5B] スレッドセーフじゃないの?
263 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 08:11:12.17 ID:F5kkg2x4] >>255 ああなるほど、それは悔しいね (w
264 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 10:29:15.15 ID:vBgzPsoc] >>262 保証は無い でも規格で定められている項目を守ったうえでctime_sをアンセーフに書く奴は頭が悪い
265 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 10:46:03.02 ID:ASih51cE] つまりスレッドセーフじゃないんだよね
266 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 11:05:23.40 ID:CbBx3K3H] 頭悪いな。 「スレッドセーフであることは保証されていない」の否定は「スレッドセーフじゃない」ではない。
267 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 11:13:06.38 ID:ASih51cE] それは *(int*)0 = 0; がundefinedなので、落ちるかもしれないけど落ちないかもしれないので 『「安全でない」は誤り』と言うようなもの
268 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 11:19:13.27 ID:jKhGiMdp] ぬるぽ!
269 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 13:05:04.06 ID:Zm/mlPmi] ヌルヌルってなんかいやらしぃ
270 名前:デフォルトの名無しさん [2014/04/20(日) 13:21:32.24 ID:WoZ5UmxT] 別にスレッドセーフじゃないのをラップしたスレッドセーフな関数/クラスを作るなんて簡単なことだから そんなものはそれぞれの事情に合わせて各人が実装すれば良い事で 互換性が至上な規格側で対応する必要なんてない それが嫌な人間はC/C++なんてやるべきではない
271 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 16:17:12.26 ID:20s7jMoi] それ以前にC++に限らず 全ての関数がマルチスレッド対応した 言語なんて存在しない
272 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 16:35:59.97 ID:PbdtxenD] VCでライブラリがマルチスレッド対応になってる理由はどうしてなん?
273 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 16:49:01.78 ID:ASih51cE] >>272 std::mallocなど主要な関数をスレッドセーフにしたものを 「スレッドセーフ版」と呼んでいるだけだが
274 名前:デフォルトの名無しさん [2014/04/20(日) 16:50:51.43 ID:Cj94JKP5] WindowsAPIはマルチスレッド用しかないだろ? それを利用するコンパイラも、素直に実装したらマルチスレッド用だろ。
275 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 17:00:19.48 ID:ASih51cE] >>274 の論法だとReadFile,WriteFileがスレッドセーフだと DBMS製品開発者は何もしなくても データベースがスレッドセーフになってしまう
276 名前:デフォルトの名無しさん [2014/04/20(日) 17:08:13.77 ID:Cj94JKP5] APIが再入可能でも、ソフトウェア製作者がそれを破ればそこで終わる。 リエントラント - Wikipedia リエントラント(reentrant、再入可能)とは、プログラムやサブルーチンが、実行の途中で割り込まれ、その実行が完了する前に再び呼び出され実行されても安全だという性質を指す。 リエントラント性の原則 リエントラントなコードは、静的変数やグローバル変数を保持しない。 リエントラントなコードは自分のコードを書き換えない。 リエントラントなコードは、リエントラントでないプログラムやサブルーチンを呼び出さない。
277 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 18:08:52.69 ID:vBgzPsoc] >>274 https://www.google.co.jp/search?q=site%3Amicrosoft.com+%22To+avoid+this%2C+you+must+synchronize+all+concurrent+calls+from+more+than+one+thread+to+this+function.%22
278 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 21:09:11.78 ID:wGZJ24HN] あれ? VC++はマルチスッドレ用ライブラリとシングルスッドレ用ライブラリのどっちをリンクするか選べるようになってなかったっけ 最新のは違うのかな…・_・:
279 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 21:11:52.47 ID:NvL/wT5B] staticかdllかを選べるだけ
280 名前:デフォルトの名無しさん [2014/04/20(日) 21:20:00.67 ID:Cj94JKP5] 互換性に影響する変更点 (CRT) Visual Studio 2005 シングル スレッド CRT ライブラリの libc.lib と libcd.lib は削除されました。 マルチスレッド CRT ライブラリを使用してください。 /ML コンパイラ フラグはサポートされなくなりました。 いくつかの関数について、マルチスレッド コードとシングル スレッド コード間の パフォーマンスの違いが重要な問題になる状況に備えて、ロックのないバージョンが追加されました。 msdn.microsoft.com/ja-jp/library/ms235497 (VS.80).aspx
281 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 23:48:47.43 ID:jKhGiMdp] マルチスレッド対応していない関数に CRITICAL_SECTION で囲えばどれもこれも一発で済む問題だけどねん
282 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 23:58:42.69 ID:ASih51cE] >>281 >囲えばどれもこれも一発で済む 本気で言っているのか?
283 名前:デフォルトの名無しさん [2014/04/21(月) 00:07:24.73 ID:8o/8KwGl] 再入される時点で、停止させて待つだけだろ。それだとマルチスレッド風プログラムが出来るシングルスレッドだがな。
284 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 00:12:20.75 ID:p/5mORia] >>281 ,>>283 はマルチスレッド童貞
285 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 00:20:29.00 ID:p/5mORia] ああ、プログラムから呼び出している全ての関数を 一つのCRITICAL_SECTIONでガードすると言う話か。 そんか糞な発想は無かったわ
286 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 00:22:05.63 ID:CRoobOqZ] その関数が状態をもたないなら囲えば済む話だけど 大抵、陰に陽に状態をもつ事情があるから非対応なわけで
287 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 01:12:42.14 ID:A29MM/CQ] セキュリティスペシャリストのC++ソースがなんともいえない感じ docs.google.com/viewer?url=http%3A%2F%2Fwww.jitec.ipa.go.jp%2F1_04hanni_sukiru%2Fmondai_kaitou_2014h26_1%2F2014h26h_sc_pm1_qs.pdf の7ページ目から 結構突っ込みどころ満載だと思います
288 名前:デフォルトの名無しさん [2014/04/21(月) 03:17:20.97 ID:cBJEGQuq] ipaが矢口以上に問題外なのは分かりきってること
289 名前:デフォルトの名無しさん [2014/04/21(月) 06:06:10.48 ID:ZAPzIyVf] a は、RangeOverFlow で b は、AccessViolation というのは大体分かるけど C++ というより C だよなw
290 名前:デフォルトの名無しさん [2014/04/21(月) 06:37:37.90 ID:ZAPzIyVf] a の条件というのが、 (画像の列数*3+255-(画像の列数*3)%255) *画像の行数 の値が kMaxIntegerよりでかいときだな
291 名前:デフォルトの名無しさん [2014/04/21(月) 06:43:33.92 ID:ZAPzIyVf] おおっと、 もう一個+255 が抜けていた 糞面倒くさい問題だなw (画像の列数*3+255-(画像の列数*3+255)%255) *画像の行数 の値が kMaxIntegerよりでかいとき
292 名前:デフォルトの名無しさん [2014/04/21(月) 06:47:25.74 ID:ZAPzIyVf] c は、 kMaxInteger/bytesOfRow で d が fhBuf.rows だなっ カンタン!カンタン!
293 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 07:35:12.38 ID:O/wmSMY2] >>274 「UIパーツは UIスレッドからしかアクセスしてはいけない」という MSDN にもない掟が流布されている理由は?
294 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 08:12:44.61 ID:lfASPZAR] UIパーツって何
295 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 08:44:56.13 ID:FEeaacIP] >>287 引数がポインタだとかstructとかfseekとかで草生えるw
296 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 08:51:30.92 ID:o5G2YLhQ] >>293 Win32 APIは知らんが .NETとかJavaではフレームワークがそういう仕様になっているから そう思いこんだんだろ
297 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 10:31:38.82 ID:kg/kzh8d] 京都府警は当初、地元の暴力団による犯行説を含め少なくとも3〜5つの見立てに沿って捜査を進めていたようですが、 目撃情報や遺留品がほとんどないことから早々に捜査は行き詰まりました。 ある捜査関係者は事件発生から1週間も経たないうちに『事件がまったく読み解けない』と白旗を上げていました」 そう話すのは犯罪に詳しい編集者の久田将義氏だ。 久田氏は近年の警察の対応力の低下を指摘する。 「これは京都府警だけの問題ではなく、警察全体から『捜査のスキーム』が失われつつあるという実態を示すものだと思います。 最近の警察は『事件の裏に潜む真実』よりも、『解決したという実績』を欲しがる。 だから、『解決すべき事件』より『解決方法の分かっている事件』に力を入れる傾向が強まっています。 捜査に対する意識の低下も著しい。 以前、繁華街を所轄する警察署の刑事に街頭監視カメラの死角を指摘したら、『それならカメラを増やせばいい』と言われました。 本来は警らの強化等で対応すべきなのに、監視カメラに頼ろうとする。 これでは警察官の経験を積むことも、捜査の勘を養うこともできません。警察は捜査の原点に立ち返るべきです」 ai.2ch.net/test/read.cgi/newsplus/1398042639/
298 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 11:50:37.55 ID:fKV6ATCG] MFCだとUIスレッドでハンドルから一時オブジェクトの構築・破棄とかしてたはず
299 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 12:38:49.30 ID:40ZFOiZP] long double とdoubleを切り替えて2つの同じアプリケーションを作るにはどうやりますか?
300 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 12:55:31.14 ID:yMOWJNk+] >>299 #if defined(MY_DOUBLE_IS_DOUBLE) typedef double MyDouble; #else typedef long double MyDouble; #endif
301 名前: ◆QZaw55cn4c mailto:sage [2014/04/21(月) 22:42:36.69 ID:nDf0t8Hx] >>296 win32 API でも,別スレッドから GetDlgItem() SetWindowText() とすると,バグるよ, 今は UI スレッドにユーザー定義のウィンドウメッセージをPostMessage() して,UI スレッドに拾ってもらってるよ
302 名前:デフォルトの名無しさん mailto:sage [2014/04/22(火) 11:53:45.00 ID:fuQXYmIY] というか、どのスレッドからでもUIをいじっていいと思った理由が知りたいわ。
303 名前:デフォルトの名無しさん mailto:sage [2014/04/22(火) 13:07:16.18 ID:xKI6RasN] >>293 お前が知らないだけだろ http://msdn.microsoft.com/en-us/library/windows/desktop/ms632597.aspx#multithread_apps
304 名前: ◆QZaw55cn4c mailto:sage [2014/04/22(火) 18:06:32.75 ID:yUmGGVT5] >>303 そのページのどこにそんなことが書いてあるんだ?
305 名前:デフォルトの名無しさん mailto:sage [2014/04/22(火) 18:14:27.10 ID:fuQXYmIY] >>304 えーと、UIスレッド以外のスレッドからも、直接UIスレッドを操作してもいいという主張をしたいの?
306 名前:デフォルトの名無しさん mailto:sage [2014/04/22(火) 18:15:20.49 ID:fuQXYmIY] 訂正: 直接UIスレッドを操作してもいい ↓ 直接Uを操作してもいい
307 名前: ◆QZaw55cn4c mailto:sage [2014/04/22(火) 18:18:43.91 ID:yUmGGVT5] >>305 するとバグるからしないのだが,そんなに大事なことが実は MSDN には明記されていないのではないか?と主張したい
308 名前:デフォルトの名無しさん mailto:sage [2014/04/22(火) 18:29:10.13 ID:fuQXYmIY] >>307 そういうことね。 めんどくさいから調べないけど、MSDNにもちゃんと書かれてると思うよ。
309 名前:デフォルトの名無しさん mailto:sage [2014/04/22(火) 18:46:42.98 ID:NZU8WoRa] >>303 の先に書いてあるように見えるのだが やっぱりQは文盲なの?
310 名前:デフォルトの名無しさん mailto:sage [2014/04/22(火) 22:07:38.22 ID:yUmGGVT5] >>309 うん,たぶんね,でも各種コントロールのところでいちいち書いてほしかった‥‥ >>310 英文盲です
311 名前:デフォルトの名無しさん mailto:sage [2014/04/22(火) 23:32:40.28 ID:N7biVaey] Qはキチガイだからお触り禁止
312 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 08:01:29.21 ID:Fk2AHs0t] >>300 ありがとうございます。 コンパイラーでintを64bitに doubleを128bitにする方法ありますか?
313 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 08:20:59.11 ID:jbfJ4TDr] >>312 こんなところで糞な質問をするのではなく コンパイラーのマニュアルを読んで下さい
314 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 09:03:12.71 ID:Fk2AHs0t] clang++とg++の変更の仕方教えてください。 調べてもわかりませんでした。
315 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 15:31:10.12 ID:To415BTT] classってソースファイルとヘッダーファイルでどんな風に分けるんですか?
316 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 16:45:54.81 ID:jbfJ4TDr] >>315 他のファイルにみせる必用のあるものとそうでないもの という基準で分けます
317 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 16:52:53.22 ID:lyxOexcu] (お、PImpl戦争かな?)
318 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 17:44:25.09 ID:jbfJ4TDr] ただしp_implはコンパイル時間が問題となったり ここぞと言うときだけにした方がよいでしょう
319 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 17:53:42.01 ID:U/+ppQ2B] pimplでなんでコンパイル時間が問題になるんだ? 逆に減らすために使うものだろ
320 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 18:06:48.80 ID:lyxOexcu] >>319 おちつけ。言ってることは同じだ
321 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 18:11:23.13 ID:U/+ppQ2B] ニホンゴムズカシイデス
322 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 18:29:01.25 ID:y0HH+fn0] 味方同士の撃ち合いワロタ
323 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 18:31:47.37 ID:y0HH+fn0] >>315 まずは宣言と定義(実装)で分けると良いよ
324 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 23:17:09.90 ID:k48oXhUz] 話についていけない
325 名前:デフォルトの名無しさん mailto:sage [2014/04/24(木) 18:39:00.39 ID:PqcPyz4U] ファイルの日付変更したいんだが 2014/01/20 16:57:39の場合 0x01CF15B549E45B80となってる物を指定したいのだが 何使えばいい?
326 名前:デフォルトの名無しさん mailto:sage [2014/04/24(木) 18:45:33.35 ID:UcaZdIF2] まず「常識」と「人とのコミュニケーション能力」を 身につけて駆使することが必用
327 名前:デフォルトの名無しさん mailto:sage [2014/04/24(木) 18:54:12.20 ID:cFYNvq0Y] >>325 どう変形してるんだよ……
328 名前:デフォルトの名無しさん mailto:sage [2014/04/25(金) 16:20:49.39 ID:ERt+6QIp] perlでのunixtimeへの変換 $unixtime = ($unknowntime)/10000000-11644473600; なんてやる変な日時 >>327 ゲームとかのアーカイブファイルに格納されてる時間 今まではperlでやってたんだけどbignum使うと処理速度が遅くなるんでCで書く事になった
329 名前:デフォルトの名無しさん mailto:sage [2014/04/25(金) 18:39:55.70 ID:CCVAHBoy] pimplで.cppに書いたやつってインライン展開されるの?
330 名前:デフォルトの名無しさん mailto:sage [2014/04/25(金) 18:42:49.17 ID:ldQxBRm0] されない
331 名前:デフォルトの名無しさん mailto:sage [2014/04/25(金) 21:13:03.80 ID:Lf2qM7ZJ] pimplどころかデータメンバ一切持ってないのにsetterとgetter持ってて動くクラス作ったことある。
332 名前:デフォルトの名無しさん mailto:sage [2014/04/25(金) 21:34:02.18 ID:UXf8CmSv] pimplとデータメンバーは関係ないが データメンバーが無いのにsetterとは とんだ糞プログラムだな
333 名前:デフォルトの名無しさん mailto:sage [2014/04/25(金) 21:53:56.57 ID:0oO7C4De] バレーボールのシミュレーターだったんだよ
334 名前:デフォルトの名無しさん mailto:sage [2014/04/25(金) 22:37:39.80 ID:vKWRVcWD] >>328 あんたは>325か? だとしたら、自分で答えを書いているようなもんじゃないか。
335 名前:デフォルトの名無しさん mailto:sage [2014/04/25(金) 22:54:35.68 ID:LtcOoigK] >>334 よっぽど自分でスクリプト書きたくないとしか……
336 名前:デフォルトの名無しさん [2014/04/26(土) 00:06:17.38 ID:fIjhv7f7] 64ビット整数(long longか__int64かint64_t)を使え
337 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 05:30:35.15 ID:H4OEZVXF] 128bit 時代になったら long long long になるんだろうか…
338 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 08:01:35.73 ID:/IqLL/o+] きっとlong long long longだよ
339 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 12:02:56.50 ID:FOzpDrfL] じゃあそのときはlong long longは何になるんだ? 96ビット整数か?
340 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 12:22:22.08 ID:J0aLOZMr] template<int n> LONGN{ typedef long typename LONGN<n - 1>::type type; }; template<> LONGN<1>{ typedef long type; }; LONGN<4>::type a; //long long long long a;
341 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 12:28:21.25 ID:dMJ+hsKf] 64bit OSでもLP64というモデルがあってですね…
342 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 12:50:15.63 ID:H4OEZVXF] ここは超超超絶技巧でみたいな・・・
343 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 18:17:32.95 ID:ynFN81Em] >>339 コンパイルエラーじゃないの?
344 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 19:31:52.70 ID:rMovUfm2] very long signed integer っていう言葉がすでにあってですね VLSI などと呼ばれています、 その次は、ultra であることも決まってます ULSI ですね
345 名前:デフォルトの名無しさん mailto:sage [2014/04/26(土) 20:20:43.53 ID:ahYJ/99m] >>343 longとtypename LONGN<n - 1>::typeはそれぞれtrailing-type-specifierなので 複数回出現は不可と思われ
346 名前:デフォルトの名無しさん [2014/04/26(土) 22:39:38.79 ID:fIjhv7f7] >>345 どこに書いてあるの?
347 名前:デフォルトの名無しさん mailto:sage [2014/04/28(月) 23:17:00.56 ID:qD9oODa6] Visual C++でDICのプログラム作らなきゃあかんのだけど、なんか参考になる本とかサイトあったら教えて
348 名前:デフォルトの名無しさん mailto:sage [2014/04/28(月) 23:22:01.11 ID:kXaBUVy8] fcloseする前にfflushするべき?
349 名前:デフォルトの名無しさん mailto:sage [2014/04/28(月) 23:24:00.60 ID:CvTpEXXH] fcloseはまずfflushするからせんでもいい。
350 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 00:19:38.56 ID:PvmweMHQ] >>349 どうもです
351 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 00:22:02.07 ID:Br1Uxtes] >>345 long long int はNGなの?
352 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 03:41:24.36 ID:c3V/vf3p] >>350 戻り値のエラーチェックを忘れずになー ファイルクローズの失敗って致命的なはずなのにエラーチェックしないひと多い。
353 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 03:46:10.54 ID:6FPZ981r] read、writeでエラー出てなかった時は、close全然気にしてなかったw
354 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 06:28:08.91 ID:kVygpKR5] >>347 つ www.me.aoyama.ac.jp/~yoneyama/DIC.html
355 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 12:18:26.09 ID:TvL0I6wZ] >>352 エラーチェックするのは良いとして、どう対処するの? ユーザーへの通知くらいしか出来ないでOK?
356 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 12:46:31.98 ID:cLunpA27] >>355 他のエラーと何が違うと思ってるの?
357 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 12:50:17.29 ID:pH50e3ah] closeに失敗するようなパソコンを持ってる方が悪い
358 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 13:03:45.58 ID:TvL0I6wZ] >>356 エラーにもよるけど、fcloseは失敗しても実質何もできない部類のエラーなんだけど、そこの意識は俺と合ってる?
359 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 13:13:46.40 ID:rczhsOKu] >>358 メッセージ出すとか、リトライするとか、違うデバイスに保存し直せるようにダイアログ出すとか... ちゃんと書けてないのにそ知らぬ顔してるアプリの作者はマジプログラマー辞めろと言いたい。
360 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 13:13:51.89 ID:QmOywj8Q] >fcloseは失敗しても実質何もできない そうやって問題が発生した事実を 利用者に隠すんですねわかります
361 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 13:18:00.13 ID:cLunpA27] >>358 他のエラーと同じく通知も分岐もできるだろ。 繰り返しになるけど、何を以って他のエラーと違う「部類」になると思ってるの?
362 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 13:58:19.80 ID:eNexNAiy] fcloseの仕様も読まずにリトライしろという馬鹿
363 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:03:54.68 ID:TvL0I6wZ] >>359 結局、エラー通知しか出来ないって事でOK? リトライするならfopenからやり直しになるけど、そこは認識合ってるかな?
364 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:04:40.27 ID:VfEVh/tP] まあユーザへの通知ぐらいはしといた方がいいわな ハンドル系は閉じる関数違えるミスが結構あるのでその予防にも
365 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:05:09.65 ID:TvL0I6wZ] >>361 分岐って、、、そりゃ出来るけど、分岐してどうするかが知りたいんだけど。。。
366 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:09:39.88 ID:cLunpA27] >>363 ,365 分岐したうえで perror("Closing file"); return EXIT_FAILURE; .だとか、fopen()からやりなおしだとか、 プログラムや対象のファイルに応じていくらでも考えられるだろ。 他のエラーと同じだと言ってる。 いい加減に何が違うと思ってるのか言ってくれ。
367 名前:KAC mailto:sage [2014/04/29(火) 14:10:09.18 ID:3cTlepGQ] 普通に考えたらわかりそうなもんだけど。 データをファイルに保存する→エラーになった。 破棄する訳にはいかないからもう一度保存を試みる。 ってプログラムを作るのは別に変な話じゃない。
368 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:10:25.50 ID:TvL0I6wZ] >>361 fcloseが他のエラーと違うのは、そのファイルポインタが一切使用できなくなるとこかな。 つまり、最初からやり直すしか手がない。 出来るなら有限でfopenからリトライするけど、そもそもローカルストレージ相手の場合、この手のリトライはあまり有効じゃないよね。
369 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:14:00.02 ID:TvL0I6wZ] >>367 別に変じゃないけど、多くの場合あまり意味が無いよ。 ネットワークストレージじゃない限り、リトライで救えるケースてあまりないと思うんだけど、どう?
370 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:17:21.02 ID:TvL0I6wZ] >>366 多くの場合でリトライが意味をなさない所。 つまり、エラー通知くらいしか対処法が無いって事でいいんだよね? ネットワークストレージ以外で、リトライで救えるケースを教えてくれないか?
371 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:29:16.93 ID:VfEVh/tP] 1.USBストレージでユーザが早まって抜いちゃいました 2.「書き込みに失敗しました、リトライしますか?」 3.ユーザUSBを挿し直す(最近はLinuxなんかでも自動で同じマウントポイントにマウントされる) 4.fopenからやり直し→幸せ
372 名前:KAC mailto:sage [2014/04/29(火) 14:29:21.87 ID:3cTlepGQ] >>369 リトライといっても色々考えられるから。 別のストレージに緊急退避するってのもあるし、 異常の起きたものを待機系に切り替えてリトライってのもあるし、 パソコンとかならユーザーに保存先入力させるのもあるし。 関数レベルでリトライできないけどエラーを返す仕様になっているのはそういうこと。
373 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:30:58.54 ID:cLunpA27] >>368-370 エラー通知しかできないことも多いだろうが、既に挙がっているリトライの例のように、それ以外の対処をすることだってあり得る。 通知以外の対処が有効かどうかってのはプログラムや操作対象に応じて変わるだろうとしか言えない。他のエラーと同じ。 「エラー通知くらいしか対処法が無い」を強弁して何がうれしいのかわからないので、エラー処理サボる口実が欲しいのかな?と思ってる。
374 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:52:10.17 ID:TvL0I6wZ] >>373 >エラー処理サボる口実が欲しいのかな?と思ってる。 って言うか、これが全てだよね? 最初から喧嘩腰だった点で、ああ、俺のレスが気に入らなかったんだな、とは感じたよ。 誰もサボりたいなんて言ってはいないし、それは君の思い込みだった点は認めて欲しい。 単純にエラー処理すべ事例が思い浮かばなかったから、聞いてみただけだよ。
375 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:53:16.31 ID:TvL0I6wZ] >>372 なるほど、確かにそう言う事例はありそうだね。 ありがとう、勉強になったよ。
376 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:55:47.85 ID:TvL0I6wZ] >>371 活線挿抜(だっけ?)系のストレージか、確かに確かに。 SDカードの接触不良とかもありそうだなあ。
377 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 14:59:31.78 ID:yMt+E2dH] ID:cLunpA27 が一番偉そうにしてるわりに一番無益な情報しか書いてない件
378 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 15:13:06.94 ID:cLunpA27] >>374 サボりたいと思ってるわけじゃなかったのなら、確かにそこは思い込みだったよ。ごめん。 「エラー通知くらいしか対処法が無い」なんてことは無いのを理解してもらって、あとは 具体的に有効な対処をコーディング時点で知ってるかどうかに関わらずエラーチェックを 入れてくれてるなら文句は無いんだ。
379 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:20:13.81 ID:+oyspTjV] ケースバイケースだろ。 プログラムの処理目的によっては、fcloseに失敗しようがどうでもいい場合もあるんだから、そういう場合にあえて書かなくたっていいでしょ。 まあ、癖としてエラー処理を書くようにするというのは悪いことではないと思うけど。何が何でも絶対にエラー処理を書かないといけない、みたいな原理主義はよくないでしょ。
380 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 16:55:31.42 ID:VfEVh/tP] いや、これについては原理主義ぐらいがちょうどいいね 研究で書く捨てコードでさえ例外ぐらいは投げとくべき 年度末の追い込みの時期にバグ探しで泣くことになる
381 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 17:00:32.58 ID:6FPZ981r] 多分、直前のread、writeまでは正常に実行できて、closeしようとしたらエラーになった 疑わしいのはハードウェア障害。だからこのまま使い続けると致命的な問題が起こるかも知れない。 直前の処理結果が失敗してないか、ハードウエアの修理交換をする必要があるか、調べたりする。 警告を出すことは意味がありそう。
382 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 17:07:35.52 ID:B/znruqO] 可能性は考えたらきりがない
383 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 17:09:45.51 ID:B/znruqO] すべてのエラーの可能性を汲み取ったからといって 後々の動作がすべてうまく動く保障などどこにもない
384 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 17:15:13.39 ID:B/znruqO] コンシューマと違ってトンでも環境でプログラムを動かそうとする 典型的なキチガイユーザーは除外するに限る
385 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 17:27:52.73 ID:kVygpKR5] 割り込み禁止にしてしまえばいいんじゃね
386 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:14:20.81 ID:/hP837aC] >>381 みたいなのは経験上メモリ破壊とかただのバグの可能性が一番高い
387 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:51:14.18 ID:u8cJRNln] //as-util.h namespace as { int open_or_die(const string& filename, int flags, int mode = 0) { int fd = open(filename.c_str(), flags, mode); if (fd == -1) { fprintf(stderr, "Could not open %s (%s)\n", filename.c_str(), strerror(errno)); exit(-1); } return fd; } int write_file(const string& filename, const void* buff, unsigned int len) { int out_fd; out_fd = open_or_die(filename, 33537, 384); write(out_fd, buff, len); return close(out_fd); } }
388 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 18:58:20.86 ID:QpcbJXpT] しかしなぜファイルディスクリプタ使うようなC言語的コーディングしてるんだろう C++のfstreamをつかわないのか
389 名前:KAC mailto:sage [2014/04/29(火) 19:04:33.24 ID:3cTlepGQ] >>387 えーと、そのソースで何を主張したいのかよく解らんけど もしかしてツッコミ待ち?
390 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 19:12:26.80 ID:QpcbJXpT] というか大多数の人はネット上にあふれるbetterCのコードパクって書いてる だけなんじゃないかと・・・C++を書けよ、と煽ってみる
391 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 20:19:03.82 ID:MWWV62uz] 例外投げろってこと?
392 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 20:30:22.41 ID:5kHCxYgx] RAII
393 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 21:12:04.85 ID:8ogaN1qJ] >>388 fstreamはアレが気持ち悪いからいやだ fprintfっぽいラッパ書けばいけるのだろうか・・・
394 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 23:21:41.41 ID:GLIPATnB] sprintfで整形すれば解決 :-)
395 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 23:57:37.59 ID:tzWpsPe5] >>393 streamが気持ち悪いとな
396 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 03:08:07.99 ID:G3N8SJAi] 食わず嫌いって奴だな 「生理的に受け付けない」から使わないってたぐい
397 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 03:19:58.03 ID:6UO7iz+Z] std::cout << "フィーリング、大事" << "とても大事" << endl;
398 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 04:29:27.38 ID:lAD+rioe] そもそも書き込み後のfclose()の失敗は、しばしばバッファのフラッシュによる書き込みの失敗なのは分かっているんだろうか。 読み込み後のfclose()でフォローが必要な失敗はほぼあり得ないのとはわけが違う。
399 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 07:48:46.64 ID:+uCJ/EHs] printf("%s、とても大事","マユゲ");
400 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 08:02:11.79 ID:cWCEN50W] printfの戻り値もちゃんと見ないと危ないよな。
401 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 08:10:03.25 ID:6UO7iz+Z] printfがユーザへの進捗提示ならわざわざ見ない 標準出力に結果を出すタイプのプログラムなら当然見る
402 名前:デフォルトの名無しさん mailto:sage [2014/04/30(水) 10:56:44.51 ID:Cv22JJej] そして標準出力にエラー表示ですね、わかります
403 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 08:27:39.11 ID:jd6Q9ZC+] そこは標準エラーに繋いでくれよ
404 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 09:56:10.26 ID:Nc3v+u2j] 出力先ではなく、目的でエラー処理をするかどうかを分けたい。
405 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 23:31:41.91 ID:WBIpX+Sx] 今どきそんな糞プログラム書いてる奴おるんやなw
406 名前:デフォルトの名無しさん mailto:sage [2014/05/01(木) 23:46:29.89 ID:aTJt6vU6] >>405 とりあえず上の書き込みには一人もいないようだが、職場にでもいるのか?
407 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 14:44:29.03 ID:QC3YDLjT] >>398 そう、根本的なのはこういうことだよね。 読み取り専用なら最後になんかエラーでたなで無視しても大きな問題にはならないけど、書き込み時のclose失敗は書き込みエラーの可能性が高いから、出力したファイルは壊れてると思うべき。 やるべきエラー処置はその時々かなー
408 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 15:22:09.91 ID:wOX1O7vl] 世間ではマイクロソフトのInternet Explorerの セキュリティ脆弱性が問題となっているけど この会社は10年経っても学習しないんかね? バッファオーバーラン対策なんて特別難しいわけでもないし、 いわゆる「バグの無いソフトウェアを開発することは困難」な類の問題でなくて 適切な開発プロセスを経ずに作られていることが問題だと思うんだ。
409 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 15:26:08.57 ID:1eT74Y+3] 何を今更
410 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 15:32:17.56 ID:Ws6wlKTr] 他のブラウザにも脆弱性あるだろうし、問題となっているのではなく、問題にしているだけだけど
411 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 15:41:31.52 ID:lDfNkxxi] ニムダの失敗でget_sみたいな糞関数を広めて Cの規格にまで入れさせた企業が オーバーフローするとは嘆かわしい
412 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 15:55:15.70 ID:1eT74Y+3] xxx_s セーフ関数郡は良い布教だと思うがね ie は大昔から制作しているからその思想で創られていなかったと思われ
413 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 16:00:51.23 ID:PStMJZn4] >ie は大昔から制作しているから つまりWindowsオペレーティングシクテム自体が欠陥だらけ
414 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 16:02:20.30 ID:1eT74Y+3] いや、ANSIの規格が欠陥だらけなんだよ
415 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 17:00:18.88 ID:wV2eK816] >>414 なにいってんだ? 包丁で怪我したら包丁が欠陥なのか?
416 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 17:04:23.91 ID:Ws6wlKTr] 包丁で怪我したら人間のほうに欠陥あるわな
417 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 17:14:00.60 ID:+HoqucNW] >>414 道具のせいにする奴は無能
418 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 17:19:08.17 ID:CknGmgvF] つまり413が無能
419 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 17:22:18.84 ID:jIwzpAmb] プロは間違った道具を使わない
420 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 17:29:50.65 ID:+HoqucNW] 無能な鷹は爪がない
421 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 18:38:37.06 ID:a3LSTdDG] >>415 何を言ってるんだお前は。 使い方の問題じゃなくて使い方ではどうにもならない getsみたいなKUSO関数が存在するってことだろ。 包丁は正しく使えばよいけど糞関数は正しく使うことが出来ないとKUSOなんだよ
422 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 18:55:57.81 ID:K/1gjWeH] >>421 使えないとか意味不明
423 名前: ◆QZaw55cn4c mailto:sage [2014/05/02(金) 19:33:38.47 ID:uljkUnkD] いくら規格にあるからといっても, scanf()群とか,使った時点で「私は馬鹿です」といっているようなもの 自 分 の 頭 で 考 え よ う ね
424 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 20:21:06.60 ID:u61DiI65] getsは擁護しようがないけど、scanfはまだいいじゃない…… (バイト数制限・バッファクリア等、意外に細かい処理まで行えるため) いやまあ現実的にはcinなどのストリーム機構使った方がいいんだが
425 名前: ◆QZaw55cn4c mailto:sage [2014/05/02(金) 22:26:12.79 ID:uljkUnkD] データを取りそこなったときの扱いが見えないんです、*scanf() は。 ああ、馬鹿なのは私です‥‥
426 名前:KAC mailto:sage [2014/05/02(金) 22:27:22.69 ID:I4CxCkey] >>425 リターン値見ないのか?
427 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 22:31:22.33 ID:JCTbZqGD] 俺はfgetsで一行読んでからsscanfだな
428 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 22:36:57.53 ID:uljkUnkD] >>426 問題はその後 ストリームには何が残っている? >>427 それが一番わかりやすいね‥‥ま、なんだかんだいって sscanf() はよく使うね、fscanf() とか scanf() はよくわからないので避けるけれども ごめんね矛盾したことをいっているね
429 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 22:38:10.04 ID:u61DiI65] www.kijineko.co.jp/tech/superstitions/buffer-overrun-of-scanf.html
430 名前:デフォルトの名無しさん mailto:sage [2014/05/02(金) 23:17:10.56 ID:uljkUnkD] >>429 いやもう scanf() 族のそんなややこしい書式指定を考えるくらいなら、自由長な fgets() を作って、あとで好きに parse する方を選びます その url の記事はは結局 scanf() 族を使う限りオーバーフロー/アンダーフローを検出し得ないという問題は認めていますよね 結論:scanf() は使うな‥‥
431 名前:デフォルトの名無しさん [2014/05/03(土) 00:31:10.73 ID:NUTNzwaZ] UFC 128 - エリック・コク vs. ハファエル・アスンサオ https://www.youtube.com/watch?v=n2CcU1A1i-0 UFC 134 - エリック・シウバ vs. ルイス・ラモス https://www.youtube.com/watch?v=x25xIpNmhCo
432 名前:デフォルトの名無しさん mailto:sage [2014/05/03(土) 00:55:33.17 ID:4wSZ1uzA] 能ある鷹は見えないとこにピック隠すんです
433 名前:デフォルトの名無しさん mailto:sage [2014/05/03(土) 01:34:21.62 ID:uWeyjha1] なんかの歌詞だったような気がするが思い出せない・・・
434 名前:デフォルトの名無しさん mailto:sage [2014/05/03(土) 01:40:01.06 ID:cKwAiZbq] >>433 ひょっとして:Don't say "lazy"
435 名前:デフォルトの名無しさん mailto:sage [2014/05/03(土) 01:44:23.55 ID:uWeyjha1] >>434 あー、それかthx
436 名前:デフォルトの名無しさん mailto:sage [2014/05/04(日) 01:03:01.96 ID:tByDu0vN] アプリが自分で書いた中間ファイルのように 内容に関して保証ができているケースでなら、 fscanf()も使わないではないけどねぇ。 まぁ、大抵は設定ファイル用のクラスがあるから それを使っちゃうけど。
437 名前:デフォルトの名無しさん mailto:sage [2014/05/06(火) 09:55:48.60 ID:5c9kkQ6j] 宣言と定義の違いがわかりません。 Hに宣言、CPPに定義を書くのが普通らしいですが、 class a{}; なんてのたくさん見かけるのですが・・・
438 名前:デフォルトの名無しさん mailto:sage [2014/05/06(火) 09:58:36.30 ID:5ztZHmoZ] 宣言は、概要 定義は、実体 と捉えると良いよ
439 名前:デフォルトの名無しさん mailto:sage [2014/05/06(火) 10:02:29.99 ID:5ztZHmoZ] 本で例えるなら、 ヘッダの宣言が索引 ソースの定義が中身
440 名前:デフォルトの名無しさん mailto:sage [2014/05/06(火) 10:08:33.24 ID:5ztZHmoZ] 本気で理解したければgccのプリプロセッサ走らせて出力された結果を見た方が早い それ見て理解できなければ触らないほうがいい
441 名前:デフォルトの名無しさん mailto:sage [2014/05/06(火) 18:02:55.83 ID:Fm+h5E30] >>437 基本的には定義はプログラム中でひとつだけである必要がある(One Definition Rule という)ので 複数の翻訳単位(cppファイル)でインクルードされるヘッダファイルには書けない。そのため ヘッダファイルには宣言だけを書くことになる。 ただしクラス定義やインライン関数など一部の定義は、厳密に同一である限り、別の翻訳単位に 複数あってもよいという特例があるので、ヘッダファイルに書いてもよい。 ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#basic.def.odr
442 名前:デフォルトの名無しさん mailto:sage [2014/05/06(火) 18:54:34.25 ID:+RcwTu4z] >>438 嘘つくな >>439 嘘つくな >>441 リンク先には適切なことが書かれているが お前のレスは回答になってない
443 名前:デフォルトの名無しさん mailto:sage [2014/05/06(火) 19:20:23.59 ID:5ztZHmoZ] class a{} がソースに書いてあってなんでかと疑問に思っているのなら、その class a といやつは、そのソース上でしか使わないこと前提としてコーダーが記述したとおもわれるよ。 別に宣言だからといってすべてをヘッダに記述しなくてもいいし、他のソースでも class a 参照したければ、ヘッダにかけばいいし、その場合はテンプレートでもなければ、定義と宣言にわけて書いたほうがオーバーヘッドも少なくて済むよ。
444 名前:441 mailto:sage [2014/05/06(火) 19:29:27.72 ID:Fm+h5E30] >>442 元の>437の聞きたいことが曖昧な中で、ヘッダファイルにクラスの定義となるclass a{};なんてのが 書かれてるのをたくさん見かけるのを不思議に思ってるのかと思ったんだけど、違ったのか? >437の聞きたいことがわかってるんなら書いてくれよ。そのまま回答してくれてもいいだろうし。
445 名前:デフォルトの名無しさん mailto:sage [2014/05/06(火) 19:31:22.38 ID:lUtiA3Gx] 宣言と定義は441の通り。 HとCPPは他のCPPに見せる必用があるもののみをHに書いてそれ以外はCPP。 この二つの話は関係がない。
446 名前:デフォルトの名無しさん mailto:sage [2014/05/07(水) 01:19:45.06 ID:nYkhIpU9] >>443 ステートフルパターンの時、こんな感じになるね。 ヘッダにはベースとなる基底クラスだけ宣言して、サブクラスは実体含めて全部.cppの中。
447 名前:デフォルトの名無しさん mailto:sage [2014/05/07(水) 12:40:29.55 ID:2YBlKf+p] テンプレートの定義部をcpp ファイルに書きたいな
448 名前:デフォルトの名無しさん mailto:sage [2014/05/07(水) 19:11:39.34 ID:NdWRqyVL] 別ファイルに定義書くことならできるだろ それをヘッダでincludeすればいい
449 名前:デフォルトの名無しさん mailto:sage [2014/05/07(水) 19:40:49.31 ID:6lWI7A3V] できないことはないよ。 ただ、テンプレートを利用できるようにするために、 ソースにテンプレートの実体を記述する必要があるよ。 たとえば、template<typename T> class matrix {} というクラスを宣言した場合、 メソッドを定義するには、 template<typename T> matrix<T> matrix<T>::inverse() {} template<> float matrix<float>::det(float *pa, int r) {} //特化 のように記述できるし、 実体を定義するには、 template class matrix<float> ; template class matrix<double> ; のようにして T のバリエーションに応じて記述する必要があるから、T のすべての可能性には必然的に対応できなくなるよ。
450 名前:デフォルトの名無しさん mailto:sage [2014/05/07(水) 20:08:51.38 ID:vyc3Cb2X] Comeau使え
451 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 00:58:47.90 ID:Pg9NfjKp] C++でメソッドって呼ぶのは違和感あるからやめてぇええw
452 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 01:03:23.78 ID:faglvFea] 違和感でなく間違い。 オブジェクト指向に於けるメソッドをC++で実現 するための手段としてメンバー関数を使用するのが 一般的ではあるけれど、 C++の言語仕様の質問をしている文脈では「メンバー関数」が適切
453 名前: ◆QZaw55cn4c mailto:そういえば最近一つみつけた [2014/05/08(木) 01:12:13.64 ID:Lwvjy9Um] 単に言葉の問題なのでは? 仕様書にそう書いてある、とかならその論議はもういい‥‥ Java のメソッドと C++ のメンバ関数で何がちがうというのか?
454 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 01:15:34.03 ID:sd5r7+pW] >>453 違わんよ。言葉の違いだけ。
455 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 09:09:26.17 ID:hZLGjZvC] >仕様書にそう書いてある、とかならその論議はもういい 言語仕様などどうでもよく自分の妄想がすべてというのはいかがなものか
456 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 09:10:56.34 ID:XNGXWkVF] それ関数じゃねーよ、サブルーチンだろ? なんてうるさいこと言う人を黙らせるための総称くらいに思ってた
457 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 18:12:00.68 ID:JZCmTzL0] メンバ関数はfinalがデフォだが メソッドはそうではないという大きな違いがある
458 名前:デフォルトの名無しさん mailto:sage [2014/05/08(木) 20:38:51.44 ID:Lwvjy9Um] >>457 デフォルトがどっちに振っているか、という議論が本質をあらわすのか? final をつけないと継承禁止にできない virtual をつけないと継承できない 単にそれだけの違いでしかないと思うが‥‥まあ、vtable は重荷だから後者の C++ 流が好み
459 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 10:02:33.99 ID:6vfzlC6q] ポインターを2つ定義するときの書き方は int * a,b; int * a,* b; のどちらが正解ですか?
460 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 10:07:10.33 ID:vWx61Bp4] int* a; int* b; が正解です
461 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 10:32:03.78 ID:BTCa0fTB] typedefを使ったほうがいいです。 typedef int* integer_pointer; integer_pointer a, b;
462 名前:デフォルトの名無しさん [2014/05/10(土) 10:33:23.23 ID:4sLYkLKE] int * a,b; のときはbがポインタにならない
463 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 10:52:04.56 ID:LsIUsMuh] >>459 int *a, *b; これだけが正解。 int *a, **b, c, d[], e, *f, *g[]; ね?
464 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 11:42:44.95 ID:OTeYCqZJ] めんどくさいから何でもいい。 だが正解は>>460 かな。
465 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 11:52:16.08 ID:KT+pYMn+] >>464 いくらなんでも「int * a,b;」で>>462 だと分からない方が……
466 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 13:21:12.78 ID:vuipbNsY] 他人の突っ込んだバグに苦しめられたことのない者だけが >>460 に石を投げよ
467 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 14:21:04.30 ID:KdDOFXms] 石を投げる資格のあるものは、石を投げる必然性を感じない罠。
468 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 14:46:05.32 ID:OTeYCqZJ] >>465 正しい書き方のうちより良いものはどれかって議論なんだから、間違ってる>>462 なんか考慮外だよ。
469 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 19:34:13.82 ID:z3mnBQ4A] C言語はわからん、特にクラスとか全然・・・ なんていう先輩がいるんですが、どう対処していいものやらw
470 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 19:36:48.53 ID:KT+pYMn+] >>469 会社なのか学校なのか知らんが教えてやれよw
471 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 19:45:12.65 ID:libkbDSO] >>469 アセンブラから始めて絶望の淵に叩き込んでやれよ
472 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 02:01:30.46 ID:Fsl8qTT6] 関数呼び出しのoperator ()ってテンプレートに出来ないんでしょうか? ideone.com/uyfykl こういうことをやりたかったんですが、VCでは通るけどideone(GCC?)やllvmではダメでした
473 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 02:17:16.93 ID:gNTTQA8W] >>472 そりゃtemplateの型が違うもん通らないでしょ intとsize_tどちらかに合わせなきゃ #include <iostream> using namespace std; template <size_t N> class int_to_type { static const int _N = N; }; struct hoge { template <size_t N> int operator ()(int_to_type<N>) { cout << N << endl; return 0; } }; int main() { // your code goes here hoge Hoge; Hoge(int_to_type<2>()); return 0; }
474 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 02:35:14.15 ID:Fsl8qTT6] ああああなるほど、そういうことだったのか・・・・・ ありがとうございます、助かりました
475 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 05:04:56.15 ID:qTKGEVW0] こういう手もあるな #include <iostream> template<class U, size_t N> class int_to_type { static const U _N = N; }; struct hoge { template <class U, size_t N> int operator ()(int_to_type<U, N>) { std::cout << N << std::endl; return 0; } }; int main() { // your code goes here hoge Hoge; Hoge(int_to_type<size_t, 2ull>()); Hoge(int_to_type<int, 2>()); }
476 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 14:35:34.41 ID:8m9s6VXd] std::integral_constant があるみたいなので、それを使うことにしました
477 名前:474 mailto:sage [2014/05/11(日) 18:16:16.21 ID:Fsl8qTT6] 476は自分じゃないですが、>>475 >>476 勉強になりました C++11ではLoki::Int2Typeや自前の同等のコードよりもintegral_constant使った方がよさそうですね
478 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 18:44:20.34 ID:Fy3N2GaC] integral_constant使ったらこんな感じか 確かに短くすっきりする #include <iostream> #include <type_traits> struct hoge2 { template <typename T, T v> int operator ()(std::integral_constant<T, v>) { std::cout << v << std::endl; return 0; } }; int main() { hoge2 Hoge2; Hoge2(std::integral_constant<size_t, 2ull>()); }
479 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 20:07:50.64 ID:Dc1ZdPMo] >>479 はすでに見えないんだが、こういうんじゃダメなのか? #include <iostream> #include <functional> struct hoge2 { template <template <int> class T, int N> int operator ()(const T<N>& v) { return N; } }; int main() { using namespace std::placeholders; hoge2 Hoge2; std::cout << Hoge2(_1); << std::endl; return 0; }
480 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 20:12:43.28 ID:Dc1ZdPMo] 間違えた 見えないのは>>472 のideoneだった
481 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 21:01:22.51 ID:Fsl8qTT6] >>480 すみません全然別のコードコピペしちゃってたので非公開にしてました placeholdersってbindに使うやつでしょうか? 元々の目的が「ループを強制アンロールして、forの場合に与えるint i(またはsize_t i)を テンプレートパラメータとして与えたい」ということだったんです template <int N> void operator ()() { cout << N << endl; } だと呼び出せない(VCだと呼べた気がするけど)んで、 Loki::Int2Type<N>みたいなのを受け取ってたわけです
482 名前:デフォルトの名無しさん mailto:sage [2014/05/11(日) 23:13:34.58 ID:Fsl8qTT6] すみません嘘書いてました、呼び出せないと思ったら Hoge.operator ()<1>(); で呼べますねorz
483 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 00:17:45.70 ID:WmKbFm6W] > 呼び出せないと思ったら constメンバ関数にしとけとかテンプレートを介して呼び出すときはtemplateをつけろとかかもな ttp://ideone.com/QcKCD5
484 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 16:32:37.15 ID:muMHIcTA] 江添さんチーッス!
485 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 16:38:41.90 ID:BCJ2/LGP] ホゲホゲ
486 名前:重要 mailto:sage [2014/05/12(月) 16:43:30.75 ID:kwTxhBP1] hogeは>>1 で禁止されています。使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。
487 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 03:41:10.81 ID:Y9eapwzT] >>483 変態に見えるんだけど、これは正当なコードとして認められてるの? t.template operator ()<1>(); とか、ぶっちゃけ初めて見たんだけど?
488 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 06:55:11.55 ID:24L+j0vJ] operator()が<1>というテンプレート引数を取ってさらにそれを呼び出すために()を 後に付けた形だから正しい でも最初見た時何かのAAだと思ったぜ
489 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 10:16:54.16 ID:Iv7eBFJt] >>488 アンサイクロペディアに変態的なHello!Worldコードが載ってたなそういえばw ja.uncyclopedia.info/wiki/C++ codepad.org/7mKSYv8e
490 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 10:50:11.47 ID:J4BXomEj] >>489 仕事でこんなコード書いた人は、 尊敬されるだろうか? それとも友達を失うだろうか?
491 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 11:33:50.71 ID:24L+j0vJ] あ、それとt.template とするのは、 t.operator()<1>(); と書くと、operator()が従属名であり テンプレートに属しているかどうか判断できないので < を比較演算子として解釈してしまい コンパイルエラーになるからだったな
492 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 12:22:28.82 ID:/yjwQ/Nr] operator()でなくtest()だったとしたら、t.template test<1>(); ってなるわけで、こうなるとそれほど奇異でもないのかな? って気がするようなしないような? てか、実はt.test<1>();って書けないことを初めて知った。
493 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 17:40:32.21 ID:nq8xv96S] >ぶっちゃけ初めて見た 言語仕様を朝から晩まで読む様な廃人生活してなきゃ 知らない文法があって当然。 >t.template test<1>(); これが当たり前だと思う人はかなり危篤
494 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 19:05:59.01 ID:sktOgsAt] .template ::template ->template いずれもテンプレートパラメータに依存する「依存名」であるときに必要なキーワードという点で一致 ネストしたクラステンプレートを記述したりすると必要になる・_・) そうしないと「<」が小なりと解釈されてしまう
495 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 20:51:48.92 ID:7+GJdaLf] t.template operator ()<1>(); t.template test<1>(); はtemplate無しだとエラーなのか。 templateメンバー関数ってそれなりに使っているだろうから頻繁に.template 使っているのか?
496 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 21:13:23.33 ID:t4k0CuP/] 自分では1回しか書いたことないな。 そんときもコンパイラに促されて初めて気づいた。
497 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 22:38:37.53 ID:PeeDiq3M] テンプレートではパラメータによって構文上の意味が変わることは許されない、 という仕様の約束を理解してれば珍しくても特殊なルールではなく typedef typename ... の形の場合の typename と同質のものでしかない
498 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 23:02:48.96 ID:VAAeDIGc] >>489 すげえ、全部顔文字に見えるな
499 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 01:12:56.55 ID:NKIJyJDk] >>497 いまいち分からん。逆にパラメータによって構文上の意味が変わるってどんなさま?
500 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 08:00:58.80 ID:ptnVdVr9] tupleの実験してた時にtemplate付けないと上手く呼び出せなくて驚いた記憶が 今回のは試してないけど、VC++だと間違った構文でも結構普通にコンパイル通るから困る
501 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 12:35:55.00 ID:FGHJ28Gs] >>499 そのルールがない場合例えば template<class T> void f(T t) { t.x<1>(100); } に struct hoge { template<int N> void x(int n) { return n * N; } }; を渡すと t.x<1>(100); はメンバ関数テンプレートをインスタンス化しての呼び出しになるけど struct piyo { int x; }; を渡すと t.x<1>(100); は ( piyo.x < 1 ) > 100; という計算になるというさま テンプレートにおいては<や>というトークンの構文上の解釈がテンプレートパラメータによって テンプレートパラメータの囲みになったり演算子になったりするのは許さないという仕様
502 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 12:40:02.26 ID:FGHJ28Gs] typedef typenameのtypenameが必要になる場合も T::x * y; みたいなときに*が演算子になったり変数宣言のポインタ指定子になったりするのは許さないということで 同じ仕様が関係してる
503 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 18:21:28.88 ID:eTwx7JM5] あたしハンガリアン書いてる男ダメだわ 古臭くて
504 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 20:27:24.51 ID:GTzWYgpn] クラス設計について皆さんどうやって設計してるか教えてください クラス設計について例えばExcelを使うような処理はOpen〜書き込み・保存〜Closeまでを一つのクラスにまとめる データベースに更新する場合(複数のテーブルに更新をかけるが、処理自体は別の機能)も一つのクラスにまとめているのですが、 みなさんクラスを作る際はどのような基準で設計していますか? また、MFCを使う場合はキャメル形式をなるべく使うようにして、そのほかはスネーク形式 メンバ変数は'm_'を頭に付けているのですが、みなさんはどのような記述をしていますか?
505 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 20:38:56.86 ID:N8jyen7a] >>504 >処理はOpen〜書き込み・保存〜Closeまでを一つのクラスに まずこの時点でなにか勘違いをしている
506 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 20:50:14.76 ID:GTzWYgpn] >>505 例えばExcelの原紙をもとに一つのレポートを作成する際に、 レポートを作成するクラスを作成して、開くメソッド、閉じるメソッド、保存するメソッドといった感じで構成しているような感じなんですが、 具体的にどういった方法がいいのでしょうか?
507 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 21:43:33.64 ID:hD/bpS5R] >>506 とりあえずお前の言うところの「開く」「閉じる」ってどういう意味なんだ? 「開く」が「ファイルをifstream等で開いて読み込む」という処理だとすると、 排他処理する理由が無ければそのままclose等すればいいだろうし、 (注:ifstreamだとデストラクタが自動でcloseしてくれる) 排他処理する場合でも「閉じる」以外でファイルをcloseせざるを得ない場合が あるからそっちの処理も書く必要がある(つまり例外安全) 変数名は……俺は基本的にはキャメル形式オンリーかな
508 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 22:09:59.55 ID:NKIJyJDk] >>501 むう、そんなことは考えた事がなかった。
509 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 22:14:48.89 ID:9cE/IMeI] >>501-502 割とガチで勉強になった。 てか、C++って使えるようになってきたかな〜って思ってると、何これ?読みこなせない! ってことが起きて、やっぱ俺はまだまだ全然だめだめだーってなるの繰り返しだわ。 なんつ〜か、ゴールが見えない。なんなんだよこの言語('A`)
510 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 22:24:02.64 ID:g3U2DcIK] くめりゃいいんだよ うごけばいいんだよ
511 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 22:26:08.48 ID:67Vff7lM] そそ 動いてさえいれば defunct だって気にしない
512 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 23:08:21.59 ID:h54NpYgX] 上記のことも含め大抵のことはオライリーのC++言語リファレンス本に書いてあったけどね 書いてあったからと言っても細かな仕様を頭の中に入れるのはなかなか難しいが Javaだと重箱の隅をつつくような言語仕様の試験があるんだけど、C++にはあるのかな?
513 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 23:10:02.46 ID:FQpYXGRc] >>506 >レポートを作成するクラスを作成 KUSO過ぎる そんなものは構造化プログラミングの関数でいい
514 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 23:22:12.31 ID:NKIJyJDk] レポート作成機能を持つクラスに違和感は別にないが、 エクセルファイルの操作はそれと関係ないから役割としては切り離さなきゃな。
515 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 00:42:13.79 ID:WHD7rQmy] アンチhogeはただ基地なだけど、hoge使いは優秀なんだな >>502 の説明でなるほどと思った
516 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 00:46:38.20 ID:9AiXB0Pi] 優秀や基地の評価は主観的だが ホゲ使いがスレのルールを守れない迷惑な奴であることは客観的事実
517 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 01:08:52.47 ID:WHD7rQmy] >>516 アンチhogeはこんなことしか書けない
518 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 11:59:54.97 ID:/s2HVWT5] class fooTest: public CppUnit::TestFixture { foo *f; public: void setUp () {f = new foo ();} void tearDown () {delete f;} void test_add (); CPPUNIT_TEST_SUITE ( fooTest ); CPPUNIT_TEST ( test_add ); CPPUNIT_TEST_SUITE_END (); }; CPPUNITで、上のクラスを継承したクラスの setUpのなかでfを初期化してテストしたいんですけどどうやればできますか? 普通にやったらエラーがでます。
519 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 12:08:08.76 ID:+DAA7cFt] エラーメッセージは? 出るだけじゃわからないだろハゲ
520 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 12:12:10.17 ID:/s2HVWT5] エラーメッセージは忘れました。 CPPUNIT_TEST_SUITE ( fooTest ); CPPUNIT_TEST ( test_add ); CPPUNIT_TEST_SUITE_END (); 上の3つのマクロは消して、継承したクラスに書いてもエラーがでました。 なぜ継承するかというと、fを基底クラスに持つクラスに対して 同じテストをさせるためです。
521 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 13:04:04.95 ID:5sMFAW9N] エラーメッセージは忘れました。 思い出すのはあなたたちの仕事です。 さあ教えてください。
522 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 13:13:28.96 ID:i0iC6OZ8] ハゲは関係ないだろ!
523 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 13:16:12.85 ID:lkL/c86t] むしろすげえなw
524 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 13:22:22.59 ID:/s2HVWT5] これはあくまで予想なんですけど、test_add()が継承したクラスにないから マクロがtest_addを見つけられないんじゃないですか? それを防ぐにはどうしたらいいですか?
525 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 13:33:57.80 ID:+DAA7cFt] おおい!忘れたぁ?だと! おまえどうやってコンパイルしているんだお!?
526 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 13:36:17.60 ID:/s2HVWT5] ごちゃごちゃしたマクロの中のエラーなんで 見ても意味ないと思います。 それよりCPPUNITを使って実際に試してみてくださった方が 早いと思います。
527 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 13:49:19.30 ID:NgoyH+1H] ID:+DAA7cFt みたいに親身になって怒ってくれる人がいるのを幸せに思えよw
528 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 13:54:42.70 ID:/s2HVWT5] class fooTest: public CppUnit::TestFixture { protected: foo *f; public: void tearDown () {delete f;} void test_add (); }; class foo2Test: public fooTest { public: void setUp () {f = new foo2 ();} CPPUNIT_TEST_SUITE ( foo2Test ); CPPUNIT_TEST ( test_add ); CPPUNIT_TEST_SUITE_END (); }; 実例を挙げるとこんな感じでやってエラーになりますl
529 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 13:57:53.64 ID:+DAA7cFt] foo とか foo2 の実体はどこにあるんだよ? まさか実体ないとか言うなよ!?
530 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 13:59:17.88 ID:/s2HVWT5] 実体はありますよ。 fooを継承したものがfoo2なのですが ここでは簡単のため省略してあります。 書いてほしいのなら書きます。 ちなみにtest_add()の実体もあります。
531 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 14:01:32.71 ID:+DAA7cFt] setUp でエラーが出るなら foo の実体に問題がある以外には考えられないだろハゲ
532 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 14:03:27.80 ID:+DAA7cFt] それか setUp のオーバーライドの仕方が間違っているかだな
533 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 14:03:52.51 ID:/s2HVWT5] それはこのコード自体は正しい。 そして実際に正しいことに確信を持てる。 という理解でよろしいでしょうか?
534 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 14:06:32.07 ID:+DAA7cFt] foo のコンストラクタは引数なし()の定義はしてあるのか?
535 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 14:06:59.84 ID:/s2HVWT5] もちのろんです。
536 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 14:08:16.79 ID:+DAA7cFt] とりあえずfooの実体を晒せ
537 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 14:09:36.53 ID:/s2HVWT5] 解決しないようなので。 また次回もう少し具体的な情報を集めてから 質問します。 ありがとうございました。
538 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 15:11:01.32 ID:0WghPhFc] どいつもこいつもクズばっかりで、まるで役に立たねぇってよ
539 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 18:04:48.76 ID:5BzvuADB] ところでなんで仮想デストラクタがないfooTestを継承してんのさ
540 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 19:27:44.47 ID:HJXbd8na] ベースから絶対にdeleteしない覚悟があるんだろう。
541 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 19:49:14.78 ID:bM3jlx72] デリート用のメソッド()があるからcomオブジェクトみたいに 必ずユーザーがそれを呼び出してから終了する規則なんじゃろ
542 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 19:55:10.33 ID:/NEBRn6L] メンバ変数追加されてないみたいだしいいんじゃね(適当)
543 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 19:59:36.34 ID:5BzvuADB] デリート用のメソッド()ってどれ?
544 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 21:07:56.98 ID:bM3jlx72] デストラクタ呼び出しは実際の型に従う よって fooTest *f; が foo2Test を指していても fooTest のデストラクタが呼び出される ここでデストラクタが仮想でないと foo2Test のデストラクタは呼び出されない ここでfoo2Testには自前でデリートしなくちゃいけないデータメンバや破壊時の特殊処理がないのでデストラクタはいらない (自動変数はデストラクタの有無にかかわりなく必ず破壊される) 一方 fooTest には foo* を削除する義務があるのでデストラクタが必要だが public な void tearDown () でユーザーに明示的に foo* をデリートする機会を与えている 恐らくこれはcomオブジェクトのように自明な破壊を行う前に ユーザーによる明示的デリートコマンドの呼び出しを想定している・_・ …いやわかんね^q^;テキトー
545 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 21:41:09.62 ID:eaRTBJfl] >>544 > 自 前 で デリートしなくちゃいけないデータメンバや破壊時の特殊処理がないのでデストラクタはいらない これはダウトだ。 struct base { base() { } ~base() { } }; struct derived : base { std::string s; derived(){ } ~derived(){ } }; int main() { derived* pD= new derived; pD->s = "xyz"; base* pB = pD; delete pB; return 0 } これでメモリリークするよ。
546 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 21:46:59.73 ID:5BzvuADB] >>544 ほんとテキトーだな tearDown()はユーザーが呼び出すメンバー関数じゃない CppUnit使ったことないのかYo
547 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 21:57:55.54 ID:QiDDREtP] おまいら今日は随分優しいな 普段なら大荒れのトリガ掛かってるのに
548 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 22:40:44.83 ID:wGifsmD2] >>545 それ前にもこの板で議論になってなかったっけ? Effective C++には基底クラスのデストラクタが virtual でない場合その動作は不定 と書かれているけど規格票にはそんな記述は見つからないってオチだったと思うんだよね 実際そのコード、VCやGCCではメモリリークしなかったはず^q^)<記憶があいまーい
549 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 22:50:29.48 ID:wGifsmD2] >>546 ないのごめんね^q^; 今調べたらテストケースの後始末用メソッドなのね^^; 勉強になるます
550 名前:KUSO KOTE ◆unko./w.Osri mailto:sage [2014/05/15(木) 23:04:05.84 ID:5j1qCAsn] >>548 そんなことはないと思うのだけれど。 5.3.5p3 『the static type shall be a base class of the dynamic type of the object to be deleted and the static type shall have a virtual destructor or the behavior is undefined』
551 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 23:09:54.94 ID:hg+yUWIx] CppUnit::TestFixtureが仮想デストラクタ持ってた場合、 派生クラスのfooTest,foo2Testに暗黙の仮想デストラクタつかない?
552 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 23:11:46.39 ID:wGifsmD2] >>550 unkoさんいつもありがとうございます^q^ また勉強になりますた
553 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 23:12:20.04 ID:Dz76ACJj] 実際にVC++でリークしてるぞ
554 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 23:21:41.85 ID:HJXbd8na] unkoは邪魔にならない糞コテ
555 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 23:35:25.60 ID:eaRTBJfl] >>548 derived が持ってる std::string s のデストラクタは誰が呼ぶかわかるか?
556 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 00:24:37.99 ID:UHWRh+RQ] 生ポだめ
557 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 02:10:11.03 ID:DN7u20iG] >>548 gcc ではリークする ideone.com/JNN7qQ ideone.com/xwEFOm
558 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 08:43:44.38 ID:ZItW3w93] int* a = new int; shared<int> b = a; shared<int> c = a;
559 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 13:22:58.62 ID:2kpp8nP1] >>557 VCは15文字以下ならば直接メンバに置かれるからリークしないだろうね もちろんこんな実装依存の振る舞いに頼っちゃいけない
560 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 13:31:42.25 ID:mI+a74mQ] リークしないからといってvirtualを付けないヤツは馬鹿
561 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 15:04:43.46 ID:WkQFj0ZD] リーク以前に親と子のアドレスは異なることがあるわけだし その場合 mallocの結果と違うアドレスをfreeして 無事なわけないだろう
562 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 15:21:39.72 ID:2kpp8nP1] 親と子のアドレスが異なることってありえなくね? 子から親へstatic_castできないじゃん
563 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 15:33:40.21 ID:jyQ1Wi3G] 親と子っていい方する? あと2重継承の場合はアドレス違うよね
564 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 15:38:20.44 ID:2kpp8nP1] まあ2重の場合はちゃうわな その場合は基本クラスのリストの最初のものと一致する保証があったようななかったような
565 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 15:47:04.44 ID:igo/DCLE] 仮想関数テーブルが入ってくるからしないようなするような
566 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 16:00:24.75 ID:2kpp8nP1] *vtableがあるなら>>561 だな 流れ的に>>545 の話だからまあそこはクリアで
567 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 16:21:56.27 ID:9/CaAvIs] 実際のコンパイラーの動作としてアドレスが異なるのは 多重継承の時と仮想継承の時
568 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 17:34:58.68 ID:FtAN8YgB] >>562 >子から親へstatic_castできない why?
569 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 18:18:25.41 ID:2kpp8nP1] >>568 うむ・・・なんか変な事言った。こういうキャストできないはずがないもんな ttp://ideone.com/u4TEhf
570 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 18:49:01.87 ID:do9B1v/N] >>559 1文字だろうがリーク起きてるだろ
571 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 20:04:44.83 ID:6gqc4dUa] 何でこの議論がまだ続いてんだ?
572 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 23:39:24.50 ID:jkvScUHA] これってどう解釈すればいいの? アドレス 値 0x00000100 40000 0x00000101 0 0x00000102 0 0x00000103 0 ...
573 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 23:43:52.48 ID:yzYaqda/] 「>>572 はコミュニケーション障害」 と理解した
574 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 23:50:21.89 ID:a2G3KqVr] >>572 よく分からんが、1バイト領域に「40000」が入るのっておかしくね
575 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 00:06:11.14 ID:kpm9Xhi5] コードが池沼
576 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 00:32:39.90 ID:u0GFIGUv] そのような結果を出力するコードを書いたからだろ
577 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 07:07:08.69 ID:uX7tOWvA] >>574 ワードマシンかも...
578 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 10:21:29.97 ID:SbmylFCz] >>574 だからどう解釈すればいいのかたずねてんじゃん
579 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 10:42:36.59 ID:I/SnI2sh] >572はバカ
580 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 11:06:35.02 ID:u0GFIGUv] どんなコードを書いたか晒せば一発で回答が来る
581 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 11:11:05.70 ID:SbmylFCz] ベンダーが提供していたツールからコードなんてねーんだよ
582 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 11:15:56.55 ID:VDcROSia] 怒ってんの?しゃぶってよ(´・ω・`)
583 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 12:00:55.14 ID:SbmylFCz] いいお
584 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 12:04:26.41 ID:Ut3rni4+] 少なくとももっと大量のアドレスに対する値が得られないとリバースエンジニアリングはできんわな・_・
585 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 12:23:07.27 ID:I/SnI2sh] ここはC++スレだろ? C++のソースが無いならここで訊くな
586 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 12:45:56.29 ID:SbmylFCz] >>585 のどこにC++のソースがあるのかしらん?
587 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 13:10:20.41 ID:mZoB3wPV] DSPならあり得るけどね
588 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 13:33:34.05 ID:R4olBPWV] >>587 1アドレスに最低16bit入らないと……ん、あり得なくはないのか
589 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 13:58:51.61 ID:d2QcpThl] 多重継承の場合、最も基底のクラスが仮想デストラクターを 持っていればいいのではないのですか? 上の場合 CppUnit::TestFixtureに仮想デストラクターがあればいいんですよね。 しかもClangのコンパイラーの場合、仮想デストラクターが無ければ無いという 警告を出すし、それが出ないことからCppUnit::TestFixtureは仮想デストラクターを 持つことが推測されますよね。
590 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 14:08:36.33 ID:kpm9Xhi5] エラーメッセージも晒さないで記憶喪失装っているクソヤロウのことなんかどうでもいいじゃん
591 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 14:22:43.93 ID:mZoB3wPV] >>588 いぁSHARCだとdmのデータ幅は40bitだ。
592 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 14:36:49.43 ID:R4olBPWV] >>591 流石DSP、PCでの常識が通用しないな…… まあID:jkvScUHAが出てきてくれんとどうにもならんか
593 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 14:39:55.51 ID:d2QcpThl] >>589 についてどう思いますか?
594 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 14:52:12.24 ID:mZoB3wPV] >>592 まぁドラッグマシーンみたいなものだしな
595 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 22:07:22.70 ID:IfYsM+gZ] 民家の屋根に設置してあるテレビアンテナって、四方を針金で引っ張って固定してるタイプ多いよね。 あれ見て宇宙人が地球との交流を見合わせたって話をどこかで聞いた。
596 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 22:27:44.43 ID:IfYsM+gZ] すみません。完全に誤爆しました。
597 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 08:34:15.21 ID:OmC98YTB] どんな誤爆やねん そしてどうしてそれで宇宙人がドン引きしたのか理由がわからん^^
598 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 09:18:13.59 ID:2cYQQGni] 伊能忠敬の日本地図に驚いて欧米諸国がドン引きしたのは事実
599 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 10:05:14.30 ID:Bbl89lAs] >>597 宇宙人は高度な文明を持った仲間との交流を求めて旅している。 針金でアンテナを固定しているさまを見て、「ダメだこりゃ」と判断した。
600 名前:デフォルトの名無しさん [2014/05/18(日) 11:56:29.18 ID:0kvX68pZ] maguro.2ch.net/test/read.cgi/pc2nanmin/1372918692/145 ↑ ↑ ↑ ↑ ↑
601 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 12:07:45.59 ID:BMv+P6U/] >>598 欧米は驚愕した! 日本人の、技術力ではなく奴隷としての性能に! そしてこの優秀な労働力を是が非でも手に入れたいと考えた!!
602 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 13:44:44.78 ID:BMv+P6U/] >>597 各家庭がレーザー発射装置で武装していると勘違いしたんだよ
603 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 14:28:39.28 ID:NvT/vy/q] 池田菊苗が旨味を発見した時も欧米人ドン引き
604 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 14:59:36.82 ID:+bye9+6c] >>601 まぁテョンは金貰ってもいらんわな
605 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 15:34:12.79 ID:DIHfwpMS] >>603 旨味の文化がない朝鮮がどのツラ下げて言ってるんだ
606 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 12:01:53.69 ID:qBdg6XNI] Class * a=new Class(); aが定義されています。 しばらくプログラムの処理が続き時間が経過しました。 ポインターaの指し示すClassの実体の データが更新されたかもしれません。 それを知るにはどうしたらいいですか? aが定義された直後にaのポインターaの指し示すClassの実体を別の場所にコピーしておいて 更新されたか調べるときにそれと比べることはコピーに時間がかかるのでできません。
607 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 12:05:04.65 ID:HfTaDQys] メッセージ飛ばすなりイベント登録させるなりご自由に
608 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 12:07:51.40 ID:tLtdhy1h] 過去の状態を完全に忘れるとして、更新を知る手段はあるだろうか?
609 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 12:10:28.24 ID:HfTaDQys] 内部データのハッシュを出力するメンバを作っといてそれを比較するって手はある
610 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 12:11:03.61 ID:mxK7K6eG] >>606 例えば、 ・そのクラスのメンバ変数に「中身を変更したフラグ」を作成 ・メンバ変数の中身を変更するメンバ関数にフラグを立てる処理を入れておく ・チェックする際はそのフラグを調べるメンバ関数を呼び出せばOK っていうのはダメ?
611 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 12:11:17.63 ID:/174+P6q] オブザーバーパータンとか
612 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 12:12:32.46 ID:qBdg6XNI] ちなみにaに絶対被らないIDを持たせてそのIDだけをコピーしておくというのは 考えたんですけど、aが同じ状態になると同じIDを持つようにするのは 難しいのであきらめました。
613 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 12:14:39.03 ID:mxK7K6eG] >>612 二度変更した時に元に戻る可能性もあるんなら、 >>609 のような手はダメなん?
614 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 12:15:48.13 ID:HfTaDQys] >>610 それは利用する側が単一であるなら成り立つけど、あんまりいいスジじゃねぇな >>612 ハッシュについてちょっと勉強したほうがええ
615 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 12:31:15.46 ID:k9Qc46s/] 別の所にコピーしておくのすら時間がかかって駄目ってことは、ハッシュの計算も駄目じゃね?
616 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 12:37:05.66 ID:HfTaDQys] >>615 なにも毎回チェックするごとに再計算する必要はない 内部状態を変更するメンバの中でハッシュを再計算するように実装すればいいんだから 変更にたいして利用頻度が圧倒的に多い問題はよくある
617 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 12:41:52.77 ID:tLtdhy1h] >>616 変更を監視して実装なら>>610 で充分なのでは
618 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 12:46:47.58 ID:HfTaDQys] >>617 2つ以上のコンテキストから呼ばれる場合に破綻する そういう状況じゃないなら別にいいけど、リーダから馬鹿にされそうな設計だとは思う
619 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 13:03:47.47 ID:qBdg6XNI] すいませんクラスをどうやってハッシュに変換できるんですか?
620 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 13:07:48.67 ID:/174+P6q] そりゃメンバ変数からごにょごにょするんだよ
621 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 13:11:09.52 ID:HfTaDQys] >>619 変更ごとに一意であればよいのならハッシュする必要すらないよ 非constなメンバを呼ぶ毎に値を増分してその値をIDとして返せばいい そうでないならメンバ変数をガサっとsha1にでもかけろ。たいていライブラリやAPIがある
622 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 14:21:37.21 ID:vf7EZdTJ] >>610 とID:HfTaDQysの言ってることってほとんど同じなような気がするんだが
623 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 15:28:26.29 ID:qBdg6XNI] Class * a=new Class2(); Class * b=new Class3(); この状態でaとbを*a==*bで比べたいんですよ。 ここでClass2とClass3の==の定義は void operator==(Class a,Class b); になるとおもうんですけど、 基底のClassの部分しか見えないから比べようがないですよね。
624 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 15:35:41.23 ID:/174+P6q] dynamic_cast
625 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 15:57:44.70 ID:BIei0SY0] Classの仮想メンバ関数にvirtual bool equals(Class const& other) const;でも定義して子クラスのequalsでdynamic_castすればいい 後はフリー関数にClass const&を二つとるような比較関数でも作ってラップしたらいい
626 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 18:00:02.01 ID:zHXgCe3L] >>618 > 2つ以上のコンテキストから呼ばれる場合に破綻する どういう意味?
627 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 18:05:41.35 ID:zHXgCe3L] >>622 だね、フラグかカウンタかの違いしかないと思う。 あと、変更するメソッド呼ばれたけど、値自体は変更しなかった (今の値と同じ値を書き込んだ) 場合は変更と見なすの? それとも、無変更? ⇒ >>606
628 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 19:03:35.75 ID:BIei0SY0] >>627 >>612 とあるので内部状態が同じなら無変更とみなすのだろうし、それならequals()のようなメンバ関数を作ればいい
629 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 19:16:06.95 ID:HfTaDQys] >>627 変更を内部フラグで知るなら必ずその「フラグをクリアするメソッド」が存在するわけ 一方の利用者が変更をチェックしてそのフラグをクリアするともう片方の利用者は変更を知ることができない だからそのクラスの利用者が一人であればフラグでいいけど、アルゴリズムとしては全然違う
630 名前:デフォルトの名無しさん [2014/05/19(月) 19:17:47.65 ID:WTOS6QfZ] いいから黙ってメッセージかコールバックによるイベントパターン使えよ 悩むようなところじゃない
631 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 19:27:05.41 ID:HfTaDQys] >>623 operator==(Class a,Class b) を定義するなら基底のClassだけで比較できなきゃおかしいじゃんよ
632 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 19:51:58.60 ID:BIei0SY0] 参照で引数とればスライシングされないからどうとでもなる ttp://melpon.org/wandbox/permlink/AP8ONiXSVGQMLYER
633 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 20:05:23.84 ID:wR4uca6O] > aが定義された直後にaのポインターaの指し示すClassの実体を別の場所にコピーしておいて > 更新されたか調べるときにそれと比べることはコピーに時間がかかるのでできません。 こう書いてあるから==やequalsは相応しくないよね。
634 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 20:10:30.04 ID:BIei0SY0] >>612 ,>>623 とあるから等値比較が出来れば足りるんじゃないかと思ったんだけどそうでもないのかなあ
635 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 20:11:15.92 ID:HfTaDQys] >>633 つか ID:qBdg6XNI は自分のやりたいことがわからなくなってるか釣りだと思えてきた
636 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 20:27:27.86 ID:9mfdpPTy] >>634 ホントだw 比べたいとか言ってるの見逃してたw >>635 そもそも、今回の話どこが一番臭いかっていうと、 「コピーに時間がかかるのでできません」って部分だなw リアルタイム性というわけでもなさそうだから、 どんだけクソデカイクラスになってんだよって予感。
637 名前:デフォルトの名無しさん mailto:age [2014/05/19(月) 20:40:31.80 ID:u0kYoYP8] 静的なポインタってある? なんかイメージ出来ない
638 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 22:26:12.91 ID:rJXEGLj9] >>636 単なるコンテナってこともあるかも
639 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 22:29:47.82 ID:mLyDgbnZ] >>35 このスマポという奴を使う場合 ud[n][2]の2のほうも変数にする方法は有りますか?
640 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 22:33:10.57 ID:mLyDgbnZ] 投稿先639間違えました
641 名前:デフォルトの名無しさん [2014/05/19(月) 23:05:31.75 ID:0GDAGnvz] >>637 static int a[10000]; int *p = a;
642 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 23:13:45.98 ID:uxNA84mc] >>637 シングルトン
643 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 23:59:41.23 ID:R0sc+CFe] >>628 > >>612 とあるので内部状態が同じなら無変更とみなす なるほど、純然に内部状態で判断するのか > それならequals()のようなメンバ関数を作ればいい データがでかいとかで比較が大変なんだろ。 高速化の手法は色々あるだろうけど、データ構造見ないとなんとも言えないな。
644 名前:デフォルトの名無しさん mailto:sage [2014/05/20(火) 00:01:06.13 ID:qEC6acDv] >>637 const char* p = "static";
645 名前:デフォルトの名無しさん mailto:sage [2014/05/20(火) 00:03:32.07 ID:bpam5xUn] >>629 ハッシュ計算するのはいいけど、なにと比較するんだ? そして、その比較対象の値をいつ設定して、いつ更新すべきかを考えてごらん。 自分がどんだけアホなこと言ってるかわかるから。
646 名前:デフォルトの名無しさん mailto:sage [2014/05/20(火) 00:07:51.25 ID:94D84veD] >>645 がかわいそうだから相手してあげて!
647 名前:デフォルトの名無しさん mailto:sage [2014/05/20(火) 00:07:52.06 ID:qEC6acDv] >>641 a→b→c→b→a って推移して現在の状態が「a」のとき、比較対象は最初のaかもしれないけど2番目のbであることもあるんだよね?
648 名前:デフォルトの名無しさん mailto:sage [2014/05/20(火) 00:43:06.04 ID:ROp5ZExO] >>646 アホは要らんよ (w
649 名前:デフォルトの名無しさん mailto:sage [2014/05/20(火) 01:46:10.92 ID:isLDQHzO] std::shared_ptr::operator==とかでよくね?