C++相談室 part112

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part111
http://toro.2ch.net/test/read.cgi/tech/1393539884/

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

次期規格C++1yはこちら
C++14/C++1y
http://toro.2ch.net/test/read.cgi/tech/1382889622/

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

【重要】
hogeは禁止です。使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
2デフォルトの名無しさん:2014/04/05(土) 12:05:11.32 ID:LKf4adEN
ヘムレンさんポジションのザコが暴れるスレ。
見地と良識を備えたムーミンパパは居ない

ちなみにヘムレンは種族の呼称
3デフォルトの名無しさん:2014/04/05(土) 15:36:20.07 ID:kY2Ixj/W
↑荒らしは無視してね
4デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/05(土) 17:05:43.48 ID:LokGB3M7
----テンプレここまで-----
6デフォルトの名無しさん:2014/04/05(土) 21:12:55.53 ID:EOtAE3K1
みなさん、hoge++スレへようこそ。楽しくhoge++ね
7デフォルトの名無しさん:2014/04/05(土) 21:14:42.64 ID:4p3tjfYN
↑荒らしは無視してね
8デフォルトの名無しさん:2014/04/05(土) 21:21:32.46 ID:EZLhmswD
書いてる>>1自身が無視できてない
9デフォルトの名無しさん:2014/04/05(土) 21:21:34.47 ID:x1RB96gi
>>4
正直もうBorlandとか誰も使ってないし
VC++でさえ使う人減ってるだろ
10デフォルトの名無しさん:2014/04/05(土) 21:36:26.22 ID:N4PVE6y4
11デフォルトの名無しさん:2014/04/05(土) 21:38:28.05 ID:EOtAE3K1
>>9
MSが色々提供しているからね。
いまさら化石MFCではじめるWINはないよって感じあるからな
12デフォルトの名無しさん:2014/04/05(土) 21:38:29.05 ID:x1RB96gi
>>10
普通に間違えて覚えてた。C++14には入らないのか・・・
13デフォルトの名無しさん:2014/04/05(土) 22:51:57.97 ID:4PQFLBxx
>>1
14デフォルトの名無しさん:2014/04/06(日) 02:12:19.15 ID:zroYmyxw
GUIはC#で、C++でDLLしてP/Invokeというのがいいな
しかしSTLとDLLの相性の悪さは泣ける
中だけで使うのなら問題ないけど
15デフォルトの名無しさん:2014/04/06(日) 08:34:57.85 ID:bs2xlTJg
GUIはC#でWPF、ピンボケするのはWindowsAPIだけ、自前のネイティヴコードはC++.NetでラッピングしたDLLにする。だろ?
16デフォルトの名無しさん:2014/04/06(日) 13:40:34.99 ID:UEWCeO6y
未だにSTLみたいな前世紀の化石ライブラリを使うようなプログラムは
C#などと組み合わせるべきでない
17デフォルトの名無しさん:2014/04/06(日) 14:15:14.68 ID:nZeav+Zp
コンテナすら使わないプログラムならわざわざC++で実装する必要ないもんな
18デフォルトの名無しさん:2014/04/06(日) 14:15:56.08 ID:Rj7fzTnd
「ヘッダはコンパイラが提供するものなのであなたが作らないでください」
「STLは前世紀の化石ライブラリ」

----テンプレここまで-----
19デフォルトの名無しさん:2014/04/06(日) 14:25:42.40 ID:NUYJ8BJR
「ヘッダーという用語は規格上は処理系が提供するものを指すので、.hファイルの意で使用すると荒れる恐れがあります」
→インクルードファイルと言うと回避できます
「昔存在したSTLが規格に吸収され、規格には当該部分にSTLという識別がなくまた当時のSTLとは完全に同一でないことから、現規格のstd::vector等をSTLと呼ぶと荒れる恐れがあります」
→標準ライブラリのvectorと言うと回避できます
----テンプレここまで-----
20デフォルトの名無しさん:2014/04/06(日) 14:47:44.46 ID:Rj7fzTnd
>>19
21デフォルトの名無しさん:2014/04/06(日) 14:53:42.00 ID:k991ba7o
>STLとDLLの相性の悪さ
クラステンプレートはクラスのテンプレート
であってクラスじゃないからねぇ。
そもそもライブラリ境界を跨いで
クラスオブジェクトを渡すなよ。
22デフォルトの名無しさん:2014/04/06(日) 15:55:46.52 ID:Cunr6Uuj
>>21
でもさ、C#というGUIのガワを被せて、肝心の中身はC++の利点であるコンテナを
使いたいって事は多いだろ?

今のC++の仕様ではどうしても一度DLL内で計算した結果をXMLなどにシリアライズ出力
して受け渡しするという不格好な方法しか取れない

そう言うと「C++はC++、C#はC#で別々に使えよ、同時に使おうとするのが間違い」って
なっちゃうけどな
その通りだけど
C#は基本的にMarshalなアンマネージドオブジェクトは異質の物と見てるもんな
23デフォルトの名無しさん:2014/04/06(日) 16:09:09.36 ID:De/moLbp
COMでおk
24デフォルトの名無しさん:2014/04/06(日) 16:23:04.58 ID:Cunr6Uuj
COMはやめろよ
もう古すぎる
25デフォルトの名無しさん:2014/04/06(日) 16:35:17.65 ID:k991ba7o
>>22
>今のC++の仕様ではどうしても一度DLL内で計算した結果をXML

えっ、C++側で.NETのラッパーに
変換するんじゃないの?
26デフォルトの名無しさん:2014/04/06(日) 16:41:02.80 ID:De/moLbp
C++使っててCOMが古いとかハッハワロス
27デフォルトの名無しさん:2014/04/06(日) 19:27:10.04 ID:dVVzxz29
COMを使わなくて済むのが.NETの強みなんだが・・・・
28デフォルトの名無しさん:2014/04/06(日) 19:47:04.04 ID:bs2xlTJg
COMの開発は管理者権限が必須なのが前時代的だな。
29デフォルトの名無しさん:2014/04/06(日) 19:51:18.91 ID:dVVzxz29
ま、確かにP/Invokeはお世辞にも使いやすいとは言えないな
「あんまし使うなよ」って事か
30デフォルトの名無しさん:2014/04/06(日) 20:02:39.30 ID:jwbJTyGo
.NET Framework が native 化できることで、
このあたりのもどかしさはなくなるんだろうな

もう C++/CLI 書きたくないお(;ω;)
31デフォルトの名無しさん:2014/04/06(日) 20:09:18.33 ID:0az8Nuyl
>>30
C++/CLIなんて罰ゲームみたいなもんだな
C++の部分だけ分離して呼び出し側でマーシャリングとか出来なかったのか
32デフォルトの名無しさん:2014/04/06(日) 21:27:30.07 ID:TyAP6UD/
COMはRTで使われてるし全然現役
33デフォルトの名無しさん:2014/04/06(日) 21:29:23.29 ID:GqoT/9Em
それは「実行バイナリがマシン語で書かれているから
マシン語のプログラムは現役」
並のミスリードだな
34デフォルトの名無しさん:2014/04/06(日) 22:53:39.67 ID:XLm+xFbR
普通にC++語るスレになっててなにより
35デフォルトの名無しさん:2014/04/06(日) 23:01:13.82 ID:0dGMoKg8
いつぞの荒らしも飽きたかどっか行っちゃったみたいね
36デフォルトの名無しさん:2014/04/06(日) 23:03:47.01 ID:+ho/eqBK
荒らしが多すぎてもう
どの荒らしのことなのかわからない
37デフォルトの名無しさん:2014/04/06(日) 23:48:49.57 ID:wtpLSJbx
普通DCOMだよね〜
38デフォルトの名無しさん:2014/04/07(月) 00:17:21.81 ID:Oe2r/gE1
にゃんぱす!
39デフォルトの名無しさん:2014/04/07(月) 00:19:41.22 ID:A0FUyXAk
>>38
にゃんぱすぅ〜
だろ
40デフォルトの名無しさん:2014/04/07(月) 00:44:27.14 ID:rR+HEjyU
>>33
マシン語並みに空気みたいな存在になったと言うことだな
41デフォルトの名無しさん:2014/04/08(火) 02:53:30.05 ID:xaBD9l1I
C++ は MS がすべてじゃないし
どこぞの糞仕様のための言語じゃないし
42デフォルトの名無しさん:2014/04/08(火) 02:54:34.18 ID:xaBD9l1I
マジでおまいらのワールドしょぼすぎ
43デフォルトの名無しさん:2014/04/08(火) 13:43:30.23 ID:WIUCzLV5
>>42
なかなかいい文句だ
それを出だしに使って140字以内でキレのあるあおり文にまとめてくれ
44デフォルトの名無しさん:2014/04/08(火) 17:31:19.44 ID:qjagiBPa
しつもんです。
可搬性のある、C++のソースファイル名に使用可能な文字の制限ってどなたかわかりますか?
45デフォルトの名無しさん:2014/04/08(火) 17:36:28.45 ID:DhHmBmSp
>>44
そうだな
#や@といった機種依存文字を含まず
アルファベットの大文字小文字混在無しで
ベース名8 文字以下なら安心だろう
46デフォルトの名無しさん:2014/04/08(火) 17:54:39.78 ID:xaBD9l1I
MS-DOSとか糞環境乙としか言えない
47デフォルトの名無しさん:2014/04/08(火) 18:25:20.64 ID:Lnp7L6Cz
std::wregexで
括弧やドットを正規表現で使いたいのですがうまくエスケープできません。
¥x28と書いてもデバックでエスケープされてないようです。

このような場合はどうしたらいいのでしょうか
48デフォルトの名無しさん:2014/04/08(火) 18:27:57.56 ID:pggqH0pG
L"\\. \\("
これでエスケープされるだろ?
49デフォルトの名無しさん:2014/04/08(火) 18:28:55.14 ID:xaBD9l1I
元が \( なら 文字列で書くと "\\(" だろ
C言語板で聞けよ
50デフォルトの名無しさん:2014/04/08(火) 18:36:52.48 ID:9wIzdaaz
C言語板なんかあったっけ?
51デフォルトの名無しさん:2014/04/08(火) 18:55:47.34 ID:xaBD9l1I
板とスレ間違えただけだし 些細な問題を指摘するところがまるでコンパイラみたいだな
http://toro.2ch.net/test/read.cgi/tech/1392482954/
52デフォルトの名無しさん:2014/04/08(火) 18:55:54.31 ID:Lnp7L6Cz
>>48-49
ありがとうございます。
53デフォルトの名無しさん:2014/04/08(火) 19:19:18.55 ID:9wIzdaaz
>>51
お褒めにあずかり光栄です
54デフォルトの名無しさん:2014/04/08(火) 21:01:00.65 ID:CrCqLw7U
正規表現に普通の文字列とか
なに馬鹿なことやってんの

LR"unko(.\(うひょ\))unko"
55デフォルトの名無しさん:2014/04/09(水) 17:57:34.72 ID:YDjcaoef
http://ideone.com/2aTmM5

randomクラスでshuffleしたいのですが、どうしてもエラーが取れません
どこが間違っているのでしょうか?
56デフォルトの名無しさん:2014/04/09(水) 18:13:15.84 ID:p7hjUAuw
57デフォルトの名無しさん:2014/04/09(水) 19:53:21.80 ID:9B6L1ty9
>>56
ありがとうございます
結局uniform_int_distributionとかかませたのがまずかったみたいですね
58デフォルトの名無しさん:2014/04/09(水) 20:11:21.10 ID:TDs0SH97
>>54
覚えたてで嬉しいのはわかったからそこらじゅうに貼るなよ
59デフォルトの名無しさん:2014/04/10(木) 00:54:20.87 ID:QbNxa+16
>>58
何年も前に出来た規格に対して
覚え立てとか何を言ってるの
60デフォルトの名無しさん:2014/04/10(木) 07:48:32.68 ID:/AIMsHz9
リテラルは R"aaa[xxx]aaa" と書くこともできるのか?
それとも亜種がいろいろとあるのか?
ttp://cpplover.blogspot.jp/2008/12/raw-string-literal.html
61デフォルトの名無しさん:2014/04/10(木) 08:04:37.36 ID:1X5BHIzm
>>59
> 何年も前に出来た規格

だからいちいち貼る必要なんかないだろ
バカなの? (w
62デフォルトの名無しさん:2014/04/10(木) 12:23:25.00 ID:uETN8HVi
>>60
>R"aaa[xxx]aaa" と書くこともできるのか?
できません。

>亜種がいろいろとあるのか?
ありません。
63デフォルトの名無しさん:2014/04/10(木) 12:45:02.18 ID:IJYcxngx
『"(』と『)"』が基本形のペアで『"』と『(』、『)』と『"』の間に同じ文字列を入れてもペアになる
64デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/10(木) 18:37:18.80 ID:fXdw7HlU
全部ソース張れよ
どうせ処理1の中で余計なことをしているんだろう
68デフォルトの名無しさん:2014/04/10(木) 18:39:25.60 ID:x8L/6Xjd
こういう質問者ってなんでwandboxとかに全ソース貼らないんですかね
貼ればわかるさ
69デフォルトの名無しさん:2014/04/10(木) 18:50:16.62 ID:M6lNLtoT
あ、ごめんなさい。
そもそもこのmapに値がうまく入ってないっぽいです。
勘違いです。お許しを
70デフォルトの名無しさん:2014/04/10(木) 19:27:41.41 ID:iUo3Wr7t
詫びは金券で
71デフォルトの名無しさん:2014/04/10(木) 20:44:06.14 ID:PllVVChP
>>68
C++はゆとりが使う言語
ゆとりにそんな高度のこと要求するってアホじゃない
72デフォルトの名無しさん:2014/04/10(木) 21:47:25.73 ID:x8L/6Xjd
ゆとり駆動開発
73デフォルトの名無しさん:2014/04/11(金) 01:19:46.96 ID:Q4Xkm7jG
intに32bitもいらないけどint8_tにしたら速くなる?
74デフォルトの名無しさん:2014/04/11(金) 01:51:08.02 ID:mOd4AtLz
>>73
単発でのアクセスなら速くはならない。変わらないか逆に遅くなることもありえる
多くの値に短期間でアクセスするなら総合的に速くなることはありえる
75デフォルトの名無しさん:2014/04/11(金) 02:04:20.33 ID:nkEZv0su
i80386 搭載パソコンよりも昔のものでないと早くはならないな
大昔にタイムスリップでもしてみればいいよ
76デフォルトの名無しさん:2014/04/11(金) 02:09:41.30 ID:Trhukh5Q
おまえら勝手に前提条件を絞るなよ
毎秒2億個のデータのメモリI/Oを行う処理だったら速くなるだろ
77デフォルトの名無しさん:2014/04/11(金) 03:07:17.29 ID:LKdcLyi6
stlコンテナが返すsize_tに64bitもいらねぇと思うのは俺だけ?俺だけ
78デフォルトの名無しさん:2014/04/11(金) 07:45:57.86 ID:UOPe7CML
SSEとか使えば早くなるんじゃないかな
79デフォルトの名無しさん:2014/04/11(金) 08:42:40.24 ID:2sIhZgp+
>>76
メモリと言うのが最近のpcに普通に搭載されているRAMの事なら、恐らく遅くなると思う
メモリマップされたハードウェアへのアクセスの事を言ってるなら、速くなるならない以前の問題かなと思う

>>73
つまり環境ややりたい事次第としか言えない
基本は実測あるのみ
80デフォルトの名無しさん:2014/04/11(金) 11:38:15.71 ID:xrw2TyXG
>>76
そういうお前が絞ってんだけどな
81デフォルトの名無しさん:2014/04/11(金) 12:47:05.09 ID:xoOT/T6O
>>80
まずは論理的な思考ができるようになってから出直した方がいいよ
82デフォルトの名無しさん:2014/04/11(金) 13:35:34.52 ID:xNOhzDQj
おまゆう (w
83デフォルトの名無しさん:2014/04/11(金) 21:16:29.87 ID:k/psiUhm
論理的な思考はゆとり言語使いには不可能だよね
84デフォルトの名無しさん:2014/04/11(金) 21:53:05.05 ID:YcPYvmq+
うむ、AVIVAで勉強して出直してこい
85デフォルトの名無しさん:2014/04/12(土) 01:21:09.61 ID:zpUkpEx/
ドモルガンの法則
86デフォルトの名無しさん:2014/04/12(土) 14:21:35.87 ID:tsoK51Gy
関数にするか俗にいう関数オブジェクトにするかの
決定基準を教えてください。
87デフォルトの名無しさん:2014/04/12(土) 14:33:05.67 ID:n/AZTTd0
関数オブジェクトにする。
88デフォルトの名無しさん:2014/04/12(土) 15:09:03.89 ID:tsoK51Gy
ありがとうございます。
関数を作らないのがC++の流儀なのですね。
89デフォルトの名無しさん:2014/04/12(土) 15:25:15.43 ID:+b8z6TLB
んなことない
90LILIN:2014/04/12(土) 17:53:04.29 ID:3XpcVmBg
http://qiita.com/ririn_yume/items/59b2e8917bd80e95a169

ディクス・ファイルへの入出力で日本語が使えるように書いてみたんだけど
[i/o]streamのストリーム・バッファは1バイトの特定しかないの(´・ω・`)?
なんかスタンダードな方法ってる?basic_iostream を多バイトで特定するとか。
91デフォルトの名無しさん:2014/04/12(土) 18:03:57.12 ID:TFvrScmT
ttp://ideone.com/NS7oho
日本語使えるだろ
92LILIN:2014/04/12(土) 18:34:00.11 ID:3XpcVmBg
よくわからないんだけど、wostream, wistream, istream, ostream, char wchar_t
これらはあくまでプログラム内部で1バイトや2バイト固定長で、ストリームのバイト幅は1バイトしかないでおk?
複数バイトをディクス・ファイルに特定の符号化でエンコーディングした文字コードを文字として出力するときも1バイト単位を処理する必要あり?
もちろん出力先はコンソール・インタープリタではなく。
93デフォルトの名無しさん:2014/04/12(土) 18:54:46.05 ID:djgLKFxC
>>86
・関数が状態を持つとき
・関数を引数として渡した先でのインライン展開を期待するとき
・ラムダ式を使いたいとき
は関数オブジェクトにする(になる)
94デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/12(土) 20:16:26.65 ID:WnsvY9aE
>>93
アセンブラで説明してくれ
97デフォルトの名無しさん:2014/04/12(土) 20:18:36.80 ID:kaC5V1Cc
じゃあ僕は、トリコで説明してほしいです。
98LILIN:2014/04/12(土) 21:11:39.73 ID:3XpcVmBg
>>95
ありがとうm(_ _)m
99デフォルトの名無しさん:2014/04/13(日) 10:26:55.87 ID:N/BcLaK6
クラス変数で、
static const int a=1;
がなんで宣言であり定義とどこがちがうんですか?
クラス変数で
const int a;
と定義してコンストラクターで初期化するのと
上の方法の違いってなくないですか?
constでメモリが参照されなければ最適化で変数は値に置き換えられるじゃないですか。
staticをつける意味はなくないですか?
100デフォルトの名無しさん:2014/04/13(日) 10:35:39.32 ID:+E56QUWv
インスタンス2つ以上作ってから言え
101デフォルトの名無しさん:2014/04/13(日) 10:40:29.73 ID:+SJW0QdK
>>99
出来るならそれでいいんじゃね
102デフォルトの名無しさん:2014/04/13(日) 11:29:02.12 ID:N/BcLaK6
>>100
作るとどうなりますか?
>>101
できるんですか?
103デフォルトの名無しさん:2014/04/13(日) 12:20:48.14 ID:g6kjuewa
>クラス変数で
>const int a;
>と定義してコンストラクターで初期化するのと

初期化とは言えない。
constだからコンストラクターでは代入できない。
constじゃなくする場合、クラス変数なのにインスタンス作るたびに値が変化しうるけど、それで目的にあってる?
104デフォルトの名無しさん:2014/04/13(日) 12:51:07.94 ID:N/BcLaK6
えっ,コンストラクターの横についてる:の後ろのやつならできるでしょ
105デフォルトの名無しさん:2014/04/13(日) 12:54:16.29 ID:ZK38pnpA
>>99
まず>>100の通り実体の数が違います。
あと前者の方が最適化されやすい。
>>103は何か勘違いしてる。
106デフォルトの名無しさん:2014/04/13(日) 14:36:26.43 ID:N/BcLaK6
>>105
実態の数は両方とも0だと思いますけど
あと、一番初めの質問も教えてください。
static const int a=1;が宣言であり
定義ではないということです。
107デフォルトの名無しさん:2014/04/13(日) 14:46:15.01 ID:N2UMgO6H
メンバ変数での
static const int は特別でコンパイル時定数になります
108デフォルトの名無しさん:2014/04/13(日) 14:58:37.13 ID:g6kjuewa
>>105
>>99はクラス変数でって言ってるんだぞ?
109デフォルトの名無しさん:2014/04/13(日) 15:03:28.42 ID:Eo6+lIk6
>>106
定義でないという根拠は?
9.4.2段落2から読んだのならそこは
「チョーンジン=犯罪者ではない」と同じで
チョーンジンに犯罪者がいないと言ってるわけではないと思う。
段落3を読む限りstatic constは定義では
110デフォルトの名無しさん:2014/04/13(日) 15:29:45.13 ID:N/BcLaK6
>>109
effective C++に定義ではなく宣言ですと書いてある。
111デフォルトの名無しさん:2014/04/13(日) 15:39:19.06 ID:N2UMgO6H
ttp://ideone.com/RE6p09
これが違いだ
分かったか?
これだけのことなのに
112デフォルトの名無しさん:2014/04/13(日) 15:57:46.28 ID:N/BcLaK6
sizeof(test2)をやるとaのアドレスを参照するから
メモリーが確保されるってことですか?
113デフォルトの名無しさん:2014/04/13(日) 16:02:35.92 ID:g6kjuewa
>>111
で、
君が>>107で言ってる「メンバ変数でのstatic const int」ってのはどれのことだ?
114デフォルトの名無しさん:2014/04/13(日) 16:03:44.45 ID:N2UMgO6H
>>113
5行目
115デフォルトの名無しさん:2014/04/13(日) 16:51:27.64 ID:g6kjuewa
>>114
クラス変数のことをメンバ変数とか呼ぶから混乱するんだろ
116デフォルトの名無しさん:2014/04/13(日) 16:54:02.69 ID:LghAmP6/
>>115
混乱してるのはお前だろ…
javaじゃないんだから用語はメンバ変数で正しい
117デフォルトの名無しさん:2014/04/13(日) 16:57:29.50 ID:g6kjuewa
>>116
おおもとの>>99がクラス変数って言ってるんだからそれに沿えばいいだろ?
そもそもstaticのあるなしが問題になってるんだから呼び分けろ。
118デフォルトの名無しさん:2014/04/13(日) 17:00:06.00 ID:N2UMgO6H
混乱とか言ってるのID:g6kjuewa だけなんだが
なんで突っかかってきたんだ?
119デフォルトの名無しさん:2014/04/13(日) 17:06:05.85 ID:g6kjuewa
1.クラス変数という言葉はc++で言うstaticメンバ変数の意味で使われる
2.もとの>>99もその意味で使ってるようだが、ちょっと間違ってる
3.>>100でその点を指摘した
という流れだが?
120デフォルトの名無しさん:2014/04/13(日) 18:26:10.37 ID:rD/qzpQw
>>119
もともとの>>99を読んだら
グローバル変数や自動変数でなくメンバー変数の意と
して使っているとわかりそうなものだが。

>1.クラス変数という言葉はc++で言うstaticメンバ変数の意味で使われる
お前の脳内ではな
121デフォルトの名無しさん:2014/04/13(日) 18:51:23.38 ID:g6kjuewa
>>120
>>1.クラス変数という言葉はc++で言うstaticメンバ変数の意味で使われる
>お前の脳内ではな

「クラス変数」とか「インスタンス変数」言語を特定しないは一般的な用語であり、
C++においてはそれぞれ「staticメンバ変数」と「メンバ変数」と解される。
・・・と理解していたが、それは俺の脳内だけなのか?
もし違ってたら謝ります。
122デフォルトの名無しさん:2014/04/13(日) 19:00:10.00 ID:g6kjuewa
読み返してみた。
>>99が「クラス変数」と「インスタンス変数」を使い分けて質問してるもんだ、と頭から思い込んでいた。

すまんかった。
123デフォルトの名無しさん:2014/04/14(月) 04:44:21.59 ID:zT5aQk31
>>121
うむ、Javaの知識と感覚でC++の質問に答えたお前が悪い
メンバイニシャライザも知らんかったみたいだし
124デフォルトの名無しさん:2014/04/14(月) 06:18:59.60 ID:ylD7aR0F
参考までにJava言語仕様8.1.6には
クラス変数などという用語は出てこない
125デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/14(月) 06:32:31.54 ID:zT5aQk31
>>111
それは静的メンバが含まれないってだけ
http://ideone.com/LgJlvX

>>110
宣言とは、その名前の何かを使うというだけの記述
静的メンバ変数は、宣言だけでは定義となりえないので、
外部での実体の定義が必要になる

そしてconstな静的メンバに限り、初期化子(初期値)を付けて宣言でき、
この場合、定義無しだとコンパイル時定数となるが、実体は無い

http://ideone.com/wpfWZz
127デフォルトの名無しさん:2014/04/14(月) 07:22:24.24 ID:zT5aQk31
重要な事を忘れていた
ただのconstのメンバ変数でも、実体が必要になる
コンパイル時定数となりうる物は、
この実体がなくても良い、という部分が決定的に異なる
128デフォルトの名無しさん:2014/04/14(月) 08:13:35.96 ID:n9bi2Qgd
>>126
>この場合、定義無しだとコンパイル時定数となるが、実体は無い

それは規格のどこから読みとりましたか?
129デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/14(月) 08:53:18.11 ID:zT5aQk31
>>128
先に規格のバージョンを明記してくれ
131デフォルトの名無しさん:2014/04/14(月) 08:59:53.32 ID:zT5aQk31
すまん、レス見えてなかった
132デフォルトの名無しさん:2014/04/14(月) 09:09:37.16 ID:kTPbyAAA
規格が改訂されたばかりというわけでもないのに
バージョンを示せとはこれ如何に
133デフォルトの名無しさん:2014/04/14(月) 09:35:50.91 ID:zT5aQk31
>>132
昔の規格を言ってるのかなと思ってさ
134デフォルトの名無しさん:2014/04/14(月) 12:20:31.03 ID:TPz1PbMj
クラス変数とかインスタンス変数とかって
java用語じゃなくてUML用語ではなかった?
135デフォルトの名無しさん:2014/04/14(月) 21:40:51.85 ID:ViqegF57
>>126
俺、constな静的メンバって使ったことはないと思うけど特殊なんだな
定義無しだと#defineと同じようになるのか。メモメモ
136デフォルトの名無しさん:2014/04/14(月) 21:54:30.89 ID:zBaLgPlx
じつは>>126=>>135
137デフォルトの名無しさん:2014/04/14(月) 22:08:41.76 ID:TPz1PbMj
>>135
それは少々珍しいと思う。
テンプレートパラメータにint Nがあって
static const int value = N;
とやって公開するのは結構ある。
138デフォルトの名無しさん:2014/04/15(火) 06:54:06.40 ID:LKf0w0dM
>>134
入門 UMLしか読んでないにわかですが

UMLだと、クラスと対になるのはオブジェクトで、
インスタンスという用語は、ある抽象概念に対する具象概念を指すものだったはず
例: クラスのインスタンスはオブジェクト、関連のインスタンスはリンク
139デフォルトの名無しさん:2014/04/15(火) 11:47:27.55 ID:Kk2d82mo
>>134
クラス変数もインスタンスも変数も一般的に
使われる用語だしwikipedia等にも出てるけど、
UMLではより一般的にクラス属性`/インスタンス属性
って呼んでると思う。
140デフォルトの名無しさん:2014/04/15(火) 14:32:57.64 ID:MSpw9Zgl
まとめると次のようなことですか?
constなインスタンス変数はアドレスを参照しない限り最適化でコンパイル時に定数に置き換えられる。
クラス変数はアドレスを参照しない限りコンパイル時に定数に置き換えられる。(アドレスを参照できないようにするにはenumをつかう)

これは関数のconstかつstaticな変数とconst な変数でもおなじことですか?
141デフォルトの名無しさん:2014/04/15(火) 15:37:07.75 ID:tBkVUf7m
constがついているからといってコンパイル時定数に置き換えられるとは限りません
コンパイル時定数に置き換えられるのは基本的にメンバ変数のstatic const intだけです
142デフォルトの名無しさん:2014/04/15(火) 15:54:55.16 ID:ZhvDr343
なにいってんの?
ヘッダにconstで定義しておけば定数に展開される
変数と違ってコンフリクトせずにリンクされるだろ
143デフォルトの名無しさん:2014/04/15(火) 17:14:40.81 ID:pNCuTv8p
最適化畳み込みと定数を一緒にすんな
144デフォルトの名無しさん:2014/04/15(火) 17:36:22.42 ID:ZhvDr343
なにその最適化論馬鹿なの?
ヘッダに const 書く場合とソースに const 書くのとは
まったく別なんだけどさ
145デフォルトの名無しさん:2014/04/15(火) 17:40:17.93 ID:nGPCY0pH
なぜヘッダならソースならの話になるんだ
必ずコンパイル時定数になるのと
もしかしたら最適化で定数にしてくれるかもしれない
は全く別の話だろう
146デフォルトの名無しさん:2014/04/15(火) 19:53:01.86 ID:X1tE4sNn
ヘッダーは処理系が提供するもので
プログラマーが書くファイルはヘッダーとは言わないんだけど
そこんとこOK?
147 ◆QZaw55cn4c :2014/04/15(火) 20:00:16.02 ID:IcL8WQqn
>>146
いや,自前でヘッダを書くことは普通のことかと
分割コンパイルしたことありますか?
148デフォルトの名無しさん:2014/04/15(火) 20:16:04.89 ID:Kk2d82mo
149 ◆QZaw55cn4c :2014/04/15(火) 20:24:16.19 ID:IcL8WQqn
>>148
>>19
>ヘッダーという用語は規格上は処理系が提供するものを指す

規格とやらののどこにかかれているか引用してくれ
150デフォルトの名無しさん:2014/04/15(火) 21:17:34.56 ID:Kk2d82mo
>>149
それはドヤ顔の>>146に聞け。
151デフォルトの名無しさん:2014/04/15(火) 22:10:01.92 ID:5PwrNHty
ISO/IEC 14882:2011の16.2段落1〜7あたり?
微妙な記述だな
152デフォルトの名無しさん:2014/04/15(火) 22:28:34.12 ID:LKf0w0dM
>>146
あなた上のJava知識で答えてる人ですよね
初心者でも言いませんよそんな事
153デフォルトの名無しさん:2014/04/15(火) 22:58:47.22 ID:LKf0w0dM
>>142
ただのメンバ変数を実際に初期化するのは、コンストラクタですので
定義の場所は関係無いです

その上コンストラクタのインライン化で、constメンバが最適化で定数になろうが、
ソース上では定数式として扱えることとは別次元の話です
154デフォルトの名無しさん:2014/04/15(火) 23:13:47.00 ID:UvYr1D+z
データメンバに構造体配列があんだけど{{,,,},{,,,}…みたいなやつで初期化できない
案として関数で同じ型tempに入れた後memcpyするって考えたんだけど、
{{,,,},{,,,}…みたいなやつ以外で配列に楽に数値入れられる方法ない?
155とんぼ ◆0ioouYq6qF8x :2014/04/15(火) 23:14:43.49 ID:GMTmmGNh
質問です。
「ロベールのC++入門講座」って良い本でしょうか?ちょっと興味を持っています。
www.amazon.co.jp/dp/4839926050
156デフォルトの名無しさん:2014/04/15(火) 23:21:17.29 ID:tBkVUf7m
157デフォルトの名無しさん:2014/04/15(火) 23:43:50.57 ID:irAkhtzu
取り替え 新しい
158デフォルトの名無しさん:2014/04/15(火) 23:55:03.42 ID:UvYr1D+z
>>156
試してみますありがとう
159デフォルトの名無しさん:2014/04/16(水) 00:18:42.75 ID:33nvow5c
>>155
はい
160デフォルトの名無しさん:2014/04/16(水) 00:28:28.07 ID:2jM3l7Be
>>152
part109から出てる話(のコピペ)だが、実は規格的にはその通りらしい。
ドヤ顔がうざいので>>18-19あたりでテンプレ化が提案された。
161デフォルトの名無しさん: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 :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デフォルトの名無しさん:2014/04/16(水) 01:44:38.87 ID:d9mP/+D0
…どう迷訳したら>>162>>19になるんだ
164デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/16(水) 07:37:56.51 ID:+jbsyRAW
どっちが初心者だってことか。C++の世界は奥が深いな。
166デフォルトの名無しさん:2014/04/16(水) 08:08:09.96 ID:KLaNkKwv
一つ言えるのは、
この知識が役に立つことは今後無い
167デフォルトの名無しさん:2014/04/16(水) 08:51:59.21 ID:hgB94LTZ
>>156
vs2012に張り付けてみたらtest::innerのところ波線引かれてるんだけど
168デフォルトの名無しさん:2014/04/16(水) 09:09:57.22 ID:Im3wLyAK
>>167
それって規格準拠度が(ry
実は俺も::innerは初めて見た……ググっても内部クラスのことしか出てこねぇw
169デフォルトの名無しさん:2014/04/16(水) 09:10:27.93 ID:diJ3rZ34
vs2010でデフォルトエンコードをUTF8にする方法ってないですよね・・・?
170デフォルトの名無しさん:2014/04/16(水) 09:11:43.32 ID:B883BlvZ
ヘッダがマシーンによってプロデュースされるなんて話は初めて聞いた
171デフォルトの名無しさん:2014/04/16(水) 09:15:51.92 ID:hgB94LTZ
>>168
2013だと波線でなかった。新しめの方法なんですね
172デフォルトの名無しさん:2014/04/16(水) 12:06:12.86 ID:C8nNiAQg
>>164
使い分けてることと、提供するかどうかは別だと思うが

#include "〜" はソースもインクルードできるからヘッダーって言ってないだけじゃね?
173デフォルトの名無しさん:2014/04/16(水) 14:57:05.92 ID:cUKcFdx2
だな
>>164を読んで#include ""するソース(ヘッダ含む)はヘッダと呼んじゃいけない
と判断するやつはどこかおかしい
174デフォルトの名無しさん:2014/04/16(水) 15:05:12.66 ID:d9mP/+D0
つか".h"".hpp"なんだから素直にヘッダって呼んでやれよ
なにか?じゃあこのhは別の意味のhか?
175片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/04/16(水) 16:00:32.29 ID:/cD6mxuW
>>169
neareal.net/index.php?Programming%2FEnvironment%2FVisualStudio%2FChangeTheCharacterCode

>どうやらVisualStudio2012以前のVisualStudioには
>デフォルトのエンコードを設定する方法はないようです。
176デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/16(水) 16:39:17.50 ID:bROaamlw
ヘッダーファイルって文字通り先頭で読み込むファイルのことでしょ。
その拡張子はCでは慣習的に.hにしてた。

ってことじゃないの?
178デフォルトの名無しさん: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分だよな
規格中の言葉遣いが完全じゃないところに拘るのはちょっと。。。

ソースファイル納入を条件の仕事で下請けがヘッダファイルを除外して納入してきたらどう思う?
180KAC:2014/04/16(水) 17:35:03.48 ID:JwWRkONO
ソースファイルってのは、ソースコードがかかれたファイルの事。
なので、ヘッダファイルと呼ばれているものもソースファイルの一種。

ヘッダファイルというのは、
ソースファイルのうち先頭で読み込まれることを前提としたもの。

#include "my.h"

void main(){
#include "my.c"
};

なら、"my.h"はヘッダで、 "my.c"はヘッダじゃない。

処理系がヘッダ以外のものを提供することは前提としていないから
処理系が提供するヘッダという記載になっただけじゃ?
181デフォルトの名無しさん:2014/04/16(水) 17:49:52.35 ID:1uhiGx2H
ソースAにグローバル変数で以下のように宣言されていて
static double gdatanum=0.0;
これをGetSetする関数があるのですが
ソースBでSetしてソースCでGetすると値が0.0でした
なぜでしょうか
182デフォルトの名無しさん:2014/04/16(水) 17:51:21.85 ID:NuAUVtDw
Setでgdatanumに代入ができてないのだろう
183デフォルトの名無しさん:2014/04/16(水) 17:52:54.26 ID:RlYL1+PT
>>180
>ヘッダファイルというのは、
>ソースファイルのうち先頭で読み込まれることを前提としたもの
自分の脳内定義を居丈高に主張されても

>・headerとソースファイルは別物らしい(16.2p1)
>・myprog.hはソースファイル
この状況でmy.hがヘッダーと言う人は論理的な思考が出来ない人
184KAC:2014/04/16(水) 17:54:52.47 ID:JwWRkONO
>>181
GetSetする関数とそれを使う所のソース貼ってみたら?
185KAC:2014/04/16(水) 17:55:35.03 ID:JwWRkONO
>>183
おまえ、"ヘッダ"の意味辞書で引いてみ?
186デフォルトの名無しさん:2014/04/16(水) 17:56:17.15 ID:1iwpwwyp
>>181
staticなんか付けたから
187デフォルトの名無しさん:2014/04/16(水) 17:59:17.93 ID:HsjrRpyw
includeするユーザーのファイルはheader fileに限定できないから
source fileと書いているだけなんじゃ。

でも、その表現だと、処理系が独自にヘッダーじゃない
includeするファイルを提供することが出来ないような。
188デフォルトの名無しさん:2014/04/16(水) 18:22:01.22 ID:RlYL1+PT
>>187
規格はmyprog.hがソースファイルだと言っているのけれど
header file以外のsource fileって何?

>>185
C++の話をする文脈で断りもなく
規格の用語を異なる意味で使ったらおかしいでしょ
189とんぼ ◆0ioouYq6qF8x :2014/04/16(水) 18:36:18.46 ID:VWOXLAN+
>>125
Java言語でもクラス変数で意味は通じると思うよ
190デフォルトの名無しさん:2014/04/16(水) 18:38:42.19 ID:oc0x5q+M
× Java言語でもクラス変数で意味は通じる
○ Javaドカタとの会話でもクラス変数で意味は通じる
191とんぼ ◆0ioouYq6qF8x :2014/04/16(水) 18:52:16.09 ID:VWOXLAN+
>>190
Java言語仕様でも「クラス変数」って使われてるよ
192デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/16(水) 19:41:22.60 ID:d9mP/+D0
小保方みたいなこといってんじゃねーよ
196デフォルトの名無しさん: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 :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デフォルトの名無しさん:2014/04/16(水) 20:12:58.87 ID:Im3wLyAK
>>197
論理の世界じゃ「AもしくはB」は排他的論理和だからな……
「AまたはB」だと両方真でもOKだから。これはプログラムでも同じこと
199デフォルトの名無しさん:2014/04/16(水) 20:13:18.78 ID:KbgAUGrE
そのあとに>>164の使い分けが続くのに
どうしてそんな曲解ができるだぜw
200デフォルトの名無しさん:2014/04/16(水) 20:15:36.81 ID:1tTmzh2z
>>197
高等学校リーダーの初歩が分かっているなら
能書きは良いから、その文を和訳しろよ
201デフォルトの名無しさん:2014/04/16(水) 20:20:54.95 ID:2jM3l7Be
>>198
排他的!?
202デフォルトの名無しさん:2014/04/16(水) 20:41:08.27 ID:d9mP/+D0
「1行の#includeディレクティブは唯1つの、処理系が処理できるヘッダーもしくはソースファイルを識別する(様に記述する)べきである」
そりゃそうね。ここではheaderとかsourceとか主題からはどうでもいい
203とんぼ ◆0ioouYq6qF8x :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デフォルトの名無しさん:2014/04/16(水) 20:42:44.40 ID:tL+eav+5
>>197
このような堅い文章で、カンマなしのorを、すなわちなんて訳さないと思いますが
205デフォルトの名無しさん:2014/04/16(水) 20:44:09.48 ID:tL+eav+5
>>203
その一文だと、正式名称はスタティックフィールドという意図になると思います
206デフォルトの名無しさん:2014/04/16(水) 20:54:52.75 ID:1tTmzh2z
>>202
なんで、
ヘッダーいいかえるとソースファイル
ヘッダーすなわちソースファイル
ヘッダーつまりソースファイル
ってしないんだ?
207とんぼ ◆0ioouYq6qF8x :2014/04/16(水) 22:23:16.70 ID:VWOXLAN+
>>205
私には、正式がどうかはわかりません。

staticフィールド (staticのついてるフィールド) = クラス変数
非staticフィールド (staticのついていないフィールド) = インスタンス変数

「クラス変数」と「インスタンス変数」の方が、世間一般的な用語だと思います。

なお、「クラス変数、インスタンス変数」の用語も使われていますので、
意味は通じると思います。

Java Language Specification
http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html

スレ違いすみません
208デフォルトの名無しさん:2014/04/16(水) 22:37:47.15 ID:2jM3l7Be
でもこの話の発端となった>>99では「クラス変数」という表現でインスタンス変数のことも指してたし、
あんまり一般的じゃないのか?とも思った。
209デフォルトの名無しさん:2014/04/16(水) 22:51:59.76 ID:cUKcFdx2
何の役にも立たない、どーでもいい重箱の隅のトンチクイズみたいなのばかり盛り上がるね
210デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/16(水) 23:22:18.50 ID:tG4IqjPv
インクルードパスが通ってるところがヘッダーでそれ以外がソースファイルってことか
212デフォルトの名無しさん:2014/04/16(水) 23:24:08.08 ID:+Gnb3ikJ
一般的に使われている用語の話と規格の定義を一緒にする人がいるから
規格の解釈を語ろうとする人との会話が噛み合っていない
213デフォルトの名無しさん:2014/04/17(木) 00:43:29.79 ID:j9nnbtNK
盛り上がってるとこ悪いけどコンパイル時定数にしたいならconstexpr使えよ
214デフォルトの名無しさん:2014/04/17(木) 01:06:16.22 ID:471VrbUx
>>213
爺がが多いこのスレ住人はC++11は使わない
C++11は完全にゆとり用だし
215 ◆QZaw55cn4c :2014/04/17(木) 02:34:02.07 ID:7Na2DDXs
>>204
たしかに >>197 の解釈をしたいのなら同格のコンマ、がほしいところではありますね
それにしても「ヘッダ」と「インクルードファイル」を分けた思想がよくわかりませんね、内容に差はないのに
216デフォルトの名無しさん:2014/04/17(木) 02:34:56.33 ID:7Na2DDXs
失礼、非限定用法のコンマ、としたほうがいいかな
217デフォルトの名無しさん:2014/04/17(木) 07:53:47.81 ID:sHAbMX/D
爺はC++すら使いませんが…。
何度注意してもmemsetでクラスを初期化しようとするし
むしろ使わせてはいけない。
218デフォルトの名無しさん:2014/04/17(木) 08:05:40.50 ID:INoT3wR+
baad f00d とかdead beef じゃ無いだけまし
219デフォルトの名無しさん:2014/04/17(木) 09:01:27.72 ID:63MO/YQs
>>215
ヘッダはコンパイラから見て内容がほぼ固定であり、ファイルとして処理するよりも効率的な、
(たとえば規定どおりの宣言を有効にするコンパイラ内部のフラグを立てるだけ、とかいう)
実装があるかもしれない・・・ってことだと理解している。そういう実装を見たことは無いんだけど。
220デフォルトの名無しさん:2014/04/17(木) 10:04:15.07 ID:BAGutlSP
ヘッダはファイルじゃなくてもいいんじゃなかった?
221デフォルトの名無しさん:2014/04/17(木) 12:50:13.74 ID:WzS6AOuu
ヘッダーはファイルである必要はないよ
メジャーなコンパイラの実現方式がファイルであって
プログラマがヘッダーをコンパイラに追加させる仕組みが
インクルードディレクトリ
222デフォルトの名無しさん:2014/04/17(木) 15:21:05.38 ID:cqNmjTsF
ディレクティブ
223とんぼ ◆0ioouYq6qF8x :2014/04/17(木) 17:43:00.61 ID:yCqA9Csi
>>210
「 class variable 」の説明部分見ました。ありがとうございます。
interface のフィールドは、実質的に public static final がついた状態になるので、
あえて static フィールドとは言わないのだと私は思います。

スレ違いごめんなさい。
224デフォルトの名無しさん:2014/04/17(木) 22:44:49.70 ID:BPlv1lov
スパゲッティつくってくる
225デフォルトの名無しさん:2014/04/17(木) 23:04:51.62 ID:Y7Fdq8Iy
食いもんの方か、プログラムの方かわからんから突っ込みづらいわ
226デフォルトの名無しさん:2014/04/18(金) 00:28:18.50 ID:fMz311pO
>>225
コードの方なら普通全力で止めに入るもんだろ……
227デフォルトの名無しさん:2014/04/18(金) 04:04:49.92 ID:o8YE1PQa
そういや実装が見事にスパゲッティなMonacoinが近日高騰するそうですよ
228デフォルトの名無しさん:2014/04/18(金) 04:47:38.93 ID:W8zdUC/x
そんな二番煎じの通貨では小麦も買えぬわ
229デフォルトの名無しさん:2014/04/18(金) 06:00:04.50 ID:Mr51hVCQ
昭和の労害:スパゲッティ
普通の人:パスタ
230デフォルトの名無しさん:2014/04/18(金) 07:53:09.03 ID:X42XW7L4
>>226
自分に関係するなら止めるけど、関係しないなら割りとどうでもいい。
本人趣味でやってるかも知れんし。
231デフォルトの名無しさん:2014/04/18(金) 08:13:22.34 ID:9F2L+G8f
>>229
スパゲッティ以外のパスタを知らない田舎者。
232デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/18(金) 08:31:48.36 ID:IuBLW4Yt
どうって、その情報からは
お前がコミュ障ってことしかわからん
234デフォルトの名無しさん:2014/04/18(金) 08:34:01.00 ID:6aub1SvC
sleep(3000)ってしようとしたのかな
235デフォルトの名無しさん:2014/04/18(金) 08:35:49.18 ID:VaFc+PBF
now()で3秒空けて2回時刻取得したのに
to_time_t()で文字列に変換したら差が無かったって事でしょ
236デフォルトの名無しさん:2014/04/18(金) 08:38:16.45 ID:DFRxgHMB
>>235
こういう仕様なんですか?
237デフォルトの名無しさん:2014/04/18(金) 08:43:43.17 ID:Ovl+7gT1
sleepは秒指定なのか?
>>234が言ってるぞ。
238デフォルトの名無しさん:2014/04/18(金) 08:45:19.05 ID:DFRxgHMB
>>234
>>237
<unistd.h>のsleep()は秒指定です
239デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/18(金) 10:17:59.35 ID:nz5iU1yO
そりゃぁねぇ。ctime()は結果を同じ場所に置くから。
241デフォルトの名無しさん:2014/04/18(金) 10:57:08.78 ID:DFRxgHMB
strtok()は知ってたんですが、ctime()もそうだとは!
お騒がせしました
242デフォルトの名無しさん:2014/04/18(金) 16:59:43.47 ID:W8zdUC/x
>>240
スレッドが関わるとどうなるんだこういうの?thread_local?
243デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/18(金) 18:02:14.18 ID:W8zdUC/x
なる。もう使うな状態なんだな…
245デフォルトの名無しさん:2014/04/18(金) 22:00:22.34 ID:FjJDc/SF
>.... are not required to avoid data races
変更したくても影響大で出来ないのか?
246デフォルトの名無しさん:2014/04/18(金) 22:57:33.82 ID:D85r3WZf
C++11時点で最新のC言語規格にスレッドは無かったし
C++の規格書の中で別の規格であるC言語についてはあーだこーだ言いたくないんじゃない?

歴史を見ればCfrontやMinGWみたいにC++処理系とCランタイムが別々の開発元とかになると手の出しようが無いし
247デフォルトの名無しさん:2014/04/19(土) 04:36:37.42 ID:uixitbPb
ちなみにISO/IEC9899:2011でもctimeはマルチスレッド非対応
248デフォルトの名無しさん:2014/04/19(土) 04:38:22.41 ID:uixitbPb
そもそも内部で確保したC文字列を返す関数を使う奴は低能
249デフォルトの名無しさん:2014/04/19(土) 07:59:44.33 ID:mm0uPHzd
領域解放の必要のない構造体返して来る関数全般はマルチスレッド対応してないよ。
250デフォルトの名無しさん:2014/04/19(土) 08:13:39.74 ID:mm0uPHzd
そもそもctimeが返して来る領域は一時的なものであるのでつかいまわす場合は、
std::cout << std::string(std::ctime(&tt1)) << std::string(std::ctime(&tt2)) ;
と記述すべきところ。
251デフォルトの名無しさん:2014/04/19(土) 08:41:29.66 ID:aOosZTdR
>>250
激しく同意。
struct tm st = *localtime(&t);
とかも良くやる。
_r 系があればそっち使うけどね。
252デフォルトの名無しさん:2014/04/19(土) 09:41:12.82 ID:5Hp05dG5
>>248
スレッドがない環境で作られた仕様にダメ出しして悦に入るって...
253デフォルトの名無しさん:2014/04/19(土) 09:45:15.09 ID:uixitbPb
>>250
>std::string(std::ctime(&tt1)) << std::string(std::ctime(&tt2))
頭が悪いにも程がある

>>252
一つ二つ前のレスくらい呼んだらどうなの?
254デフォルトの名無しさん:2014/04/19(土) 20:16:02.49 ID:5Hp05dG5
>>253
> 一つ二つ前のレスくらい呼んだらどうなの?

意味わからん。
ひょっとして、バカなの?
255デフォルトの名無しさん:2014/04/19(土) 20:34:59.05 ID:uCk0NbPn
そうだよ
お前の頭が馬鹿なの
256デフォルトの名無しさん:2014/04/19(土) 21:18:23.95 ID:/NVZ6Ial
C++11からマルチスレッド対応したのに色々使えない関数があるって
増築言語らしいよな。
257デフォルトの名無しさん:2014/04/19(土) 21:22:47.27 ID:Db2IzPol
>>249
ダウト
258デフォルトの名無しさん:2014/04/19(土) 21:26:36.87 ID:8AHQat+M
>>256はマルチスレッドの知識ゼロ
アホ過ぎる
259デフォルトの名無しさん:2014/04/19(土) 21:36:56.46 ID:/NVZ6Ial
マルチスレッド非対応の関数を新しい関数を作って
対応させる話なんてないのか?
260デフォルトの名無しさん:2014/04/19(土) 22:10:47.46 ID:qMQpXs4I
ctime_s
261デフォルトの名無しさん:2014/04/20(日) 04:16:34.27 ID:ASih51cE
>>260
Cのctime_sならスレッドセーフだとでも?
262デフォルトの名無しさん:2014/04/20(日) 07:04:22.94 ID:NvL/wT5B
スレッドセーフじゃないの?
263デフォルトの名無しさん:2014/04/20(日) 08:11:12.17 ID:F5kkg2x4
>>255
ああなるほど、それは悔しいね (w
264デフォルトの名無しさん:2014/04/20(日) 10:29:15.15 ID:vBgzPsoc
>>262
保証は無い
でも規格で定められている項目を守ったうえでctime_sをアンセーフに書く奴は頭が悪い
265デフォルトの名無しさん:2014/04/20(日) 10:46:03.02 ID:ASih51cE
つまりスレッドセーフじゃないんだよね
266デフォルトの名無しさん:2014/04/20(日) 11:05:23.40 ID:CbBx3K3H
頭悪いな。
「スレッドセーフであることは保証されていない」の否定は「スレッドセーフじゃない」ではない。
267デフォルトの名無しさん:2014/04/20(日) 11:13:06.38 ID:ASih51cE
それは
*(int*)0 = 0;
がundefinedなので、落ちるかもしれないけど落ちないかもしれないので
『「安全でない」は誤り』と言うようなもの
268デフォルトの名無しさん:2014/04/20(日) 11:19:13.27 ID:jKhGiMdp
ぬるぽ!
269デフォルトの名無しさん:2014/04/20(日) 13:05:04.06 ID:Zm/mlPmi
ヌルヌルってなんかいやらしぃ
270デフォルトの名無しさん:2014/04/20(日) 13:21:32.24 ID:WoZ5UmxT
別にスレッドセーフじゃないのをラップしたスレッドセーフな関数/クラスを作るなんて簡単なことだから
そんなものはそれぞれの事情に合わせて各人が実装すれば良い事で
互換性が至上な規格側で対応する必要なんてない
それが嫌な人間はC/C++なんてやるべきではない
271デフォルトの名無しさん:2014/04/20(日) 16:17:12.26 ID:20s7jMoi
それ以前にC++に限らず
全ての関数がマルチスレッド対応した
言語なんて存在しない
272デフォルトの名無しさん:2014/04/20(日) 16:35:59.97 ID:PbdtxenD
VCでライブラリがマルチスレッド対応になってる理由はどうしてなん?
273デフォルトの名無しさん:2014/04/20(日) 16:49:01.78 ID:ASih51cE
>>272
std::mallocなど主要な関数をスレッドセーフにしたものを
「スレッドセーフ版」と呼んでいるだけだが
274デフォルトの名無しさん:2014/04/20(日) 16:50:51.43 ID:Cj94JKP5
WindowsAPIはマルチスレッド用しかないだろ?
それを利用するコンパイラも、素直に実装したらマルチスレッド用だろ。
275デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/20(日) 18:08:52.69 ID:vBgzPsoc
278デフォルトの名無しさん:2014/04/20(日) 21:09:11.78 ID:wGZJ24HN
あれ?
VC++はマルチスッドレ用ライブラリとシングルスッドレ用ライブラリのどっちをリンクするか選べるようになってなかったっけ
最新のは違うのかな…・_・:
279デフォルトの名無しさん: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 コンパイラ フラグはサポートされなくなりました。
いくつかの関数について、マルチスレッド コードとシングル スレッド コード間の
パフォーマンスの違いが重要な問題になる状況に備えて、ロックのないバージョンが追加されました。
http://msdn.microsoft.com/ja-jp/library/ms235497(VS.80).aspx
281デフォルトの名無しさん:2014/04/20(日) 23:48:47.43 ID:jKhGiMdp
マルチスレッド対応していない関数に CRITICAL_SECTION で囲えばどれもこれも一発で済む問題だけどねん
282デフォルトの名無しさん:2014/04/20(日) 23:58:42.69 ID:ASih51cE
>>281
>囲えばどれもこれも一発で済む
本気で言っているのか?
283デフォルトの名無しさん:2014/04/21(月) 00:07:24.73 ID:8o/8KwGl
再入される時点で、停止させて待つだけだろ。それだとマルチスレッド風プログラムが出来るシングルスレッドだがな。
284デフォルトの名無しさん:2014/04/21(月) 00:12:20.75 ID:p/5mORia
>>281,>>283はマルチスレッド童貞
285デフォルトの名無しさん:2014/04/21(月) 00:20:29.00 ID:p/5mORia
ああ、プログラムから呼び出している全ての関数を
一つのCRITICAL_SECTIONでガードすると言う話か。
そんか糞な発想は無かったわ
286デフォルトの名無しさん:2014/04/21(月) 00:22:05.63 ID:CRoobOqZ
その関数が状態をもたないなら囲えば済む話だけど
大抵、陰に陽に状態をもつ事情があるから非対応なわけで
287デフォルトの名無しさん:2014/04/21(月) 01:12:42.14 ID:A29MM/CQ
セキュリティスペシャリストのC++ソースがなんともいえない感じ
http://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デフォルトの名無しさん:2014/04/21(月) 07:35:12.38 ID:O/wmSMY2
>>274
「UIパーツは UIスレッドからしかアクセスしてはいけない」という MSDN にもない掟が流布されている理由は?
294デフォルトの名無しさん:2014/04/21(月) 08:12:44.61 ID:lfASPZAR
UIパーツって何
295デフォルトの名無しさん:2014/04/21(月) 08:44:56.13 ID:FEeaacIP
>>287
引数がポインタだとかstructとかfseekとかで草生えるw
296デフォルトの名無しさん:2014/04/21(月) 08:51:30.92 ID:o5G2YLhQ
>>293
Win32 APIは知らんが
.NETとかJavaではフレームワークがそういう仕様になっているから
そう思いこんだんだろ
297デフォルトの名無しさん:2014/04/21(月) 10:31:38.82 ID:kg/kzh8d
京都府警は当初、地元の暴力団による犯行説を含め少なくとも3〜5つの見立てに沿って捜査を進めていたようですが、
目撃情報や遺留品がほとんどないことから早々に捜査は行き詰まりました。
ある捜査関係者は事件発生から1週間も経たないうちに『事件がまったく読み解けない』と白旗を上げていました」

 そう話すのは犯罪に詳しい編集者の久田将義氏だ。
久田氏は近年の警察の対応力の低下を指摘する。

「これは京都府警だけの問題ではなく、警察全体から『捜査のスキーム』が失われつつあるという実態を示すものだと思います。
最近の警察は『事件の裏に潜む真実』よりも、『解決したという実績』を欲しがる。
だから、『解決すべき事件』より『解決方法の分かっている事件』に力を入れる傾向が強まっています。

 捜査に対する意識の低下も著しい。
以前、繁華街を所轄する警察署の刑事に街頭監視カメラの死角を指摘したら、『それならカメラを増やせばいい』と言われました。
本来は警らの強化等で対応すべきなのに、監視カメラに頼ろうとする。
これでは警察官の経験を積むことも、捜査の勘を養うこともできません。警察は捜査の原点に立ち返るべきです」

http://ai.2ch.net/test/read.cgi/newsplus/1398042639/
298デフォルトの名無しさん:2014/04/21(月) 11:50:37.55 ID:fKV6ATCG
MFCだとUIスレッドでハンドルから一時オブジェクトの構築・破棄とかしてたはず
299デフォルトの名無しさん:2014/04/21(月) 12:38:49.30 ID:40ZFOiZP
long double とdoubleを切り替えて2つの同じアプリケーションを作るにはどうやりますか?
300デフォルトの名無しさん: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 :2014/04/21(月) 22:42:36.69 ID:nDf0t8Hx
>>296
win32 API でも,別スレッドから
GetDlgItem()
SetWindowText()
とすると,バグるよ,

今は UI スレッドにユーザー定義のウィンドウメッセージをPostMessage() して,UI スレッドに拾ってもらってるよ
302デフォルトの名無しさん:2014/04/22(火) 11:53:45.00 ID:fuQXYmIY
というか、どのスレッドからでもUIをいじっていいと思った理由が知りたいわ。
303デフォルトの名無しさん: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 :2014/04/22(火) 18:06:32.75 ID:yUmGGVT5
>>303
そのページのどこにそんなことが書いてあるんだ?
305デフォルトの名無しさん:2014/04/22(火) 18:14:27.10 ID:fuQXYmIY
>>304
えーと、UIスレッド以外のスレッドからも、直接UIスレッドを操作してもいいという主張をしたいの?
306デフォルトの名無しさん:2014/04/22(火) 18:15:20.49 ID:fuQXYmIY
訂正:
直接UIスレッドを操作してもいい

直接Uを操作してもいい
307 ◆QZaw55cn4c :2014/04/22(火) 18:18:43.91 ID:yUmGGVT5
>>305
するとバグるからしないのだが,そんなに大事なことが実は MSDN には明記されていないのではないか?と主張したい
308デフォルトの名無しさん:2014/04/22(火) 18:29:10.13 ID:fuQXYmIY
>>307
そういうことね。
めんどくさいから調べないけど、MSDNにもちゃんと書かれてると思うよ。
309デフォルトの名無しさん:2014/04/22(火) 18:46:42.98 ID:NZU8WoRa
>>303の先に書いてあるように見えるのだが
やっぱりQは文盲なの?
310デフォルトの名無しさん:2014/04/22(火) 22:07:38.22 ID:yUmGGVT5
>>309
うん,たぶんね,でも各種コントロールのところでいちいち書いてほしかった‥‥

>>310
英文盲です
311デフォルトの名無しさん:2014/04/22(火) 23:32:40.28 ID:N7biVaey
Qはキチガイだからお触り禁止
312デフォルトの名無しさん:2014/04/23(水) 08:01:29.21 ID:Fk2AHs0t
>>300
ありがとうございます。
コンパイラーでintを64bitに
doubleを128bitにする方法ありますか?
313デフォルトの名無しさん:2014/04/23(水) 08:20:59.11 ID:jbfJ4TDr
>>312
こんなところで糞な質問をするのではなく
コンパイラーのマニュアルを読んで下さい
314デフォルトの名無しさん:2014/04/23(水) 09:03:12.71 ID:Fk2AHs0t
clang++とg++の変更の仕方教えてください。
調べてもわかりませんでした。
315デフォルトの名無しさん:2014/04/23(水) 15:31:10.12 ID:To415BTT
classってソースファイルとヘッダーファイルでどんな風に分けるんですか?
316デフォルトの名無しさん:2014/04/23(水) 16:45:54.81 ID:jbfJ4TDr
>>315
他のファイルにみせる必用のあるものとそうでないもの
という基準で分けます
317デフォルトの名無しさん:2014/04/23(水) 16:52:53.22 ID:lyxOexcu
(お、PImpl戦争かな?)
318デフォルトの名無しさん:2014/04/23(水) 17:44:25.09 ID:jbfJ4TDr
ただしp_implはコンパイル時間が問題となったり
ここぞと言うときだけにした方がよいでしょう
319デフォルトの名無しさん:2014/04/23(水) 17:53:42.01 ID:U/+ppQ2B
pimplでなんでコンパイル時間が問題になるんだ?
逆に減らすために使うものだろ
320デフォルトの名無しさん:2014/04/23(水) 18:06:48.80 ID:lyxOexcu
>>319
おちつけ。言ってることは同じだ
321デフォルトの名無しさん:2014/04/23(水) 18:11:23.13 ID:U/+ppQ2B
ニホンゴムズカシイデス
322デフォルトの名無しさん:2014/04/23(水) 18:29:01.25 ID:y0HH+fn0
味方同士の撃ち合いワロタ
323デフォルトの名無しさん:2014/04/23(水) 18:31:47.37 ID:y0HH+fn0
>>315
まずは宣言と定義(実装)で分けると良いよ
324デフォルトの名無しさん:2014/04/23(水) 23:17:09.90 ID:k48oXhUz
話についていけない
325デフォルトの名無しさん:2014/04/24(木) 18:39:00.39 ID:PqcPyz4U
ファイルの日付変更したいんだが
2014/01/20 16:57:39の場合 0x01CF15B549E45B80となってる物を指定したいのだが
何使えばいい?
326デフォルトの名無しさん:2014/04/24(木) 18:45:33.35 ID:UcaZdIF2
まず「常識」と「人とのコミュニケーション能力」を
身につけて駆使することが必用
327デフォルトの名無しさん:2014/04/24(木) 18:54:12.20 ID:cFYNvq0Y
>>325
どう変形してるんだよ……
328デフォルトの名無しさん:2014/04/25(金) 16:20:49.39 ID:ERt+6QIp
perlでのunixtimeへの変換
$unixtime = ($unknowntime)/10000000-11644473600;
なんてやる変な日時
>>327
ゲームとかのアーカイブファイルに格納されてる時間
今まではperlでやってたんだけどbignum使うと処理速度が遅くなるんでCで書く事になった
329デフォルトの名無しさん:2014/04/25(金) 18:39:55.70 ID:CCVAHBoy
pimplで.cppに書いたやつってインライン展開されるの?
330デフォルトの名無しさん:2014/04/25(金) 18:42:49.17 ID:ldQxBRm0
されない
331デフォルトの名無しさん:2014/04/25(金) 21:13:03.80 ID:Lf2qM7ZJ
pimplどころかデータメンバ一切持ってないのにsetterとgetter持ってて動くクラス作ったことある。
332デフォルトの名無しさん:2014/04/25(金) 21:34:02.18 ID:UXf8CmSv
pimplとデータメンバーは関係ないが
データメンバーが無いのにsetterとは
とんだ糞プログラムだな
333デフォルトの名無しさん:2014/04/25(金) 21:53:56.57 ID:0oO7C4De
バレーボールのシミュレーターだったんだよ
334デフォルトの名無しさん:2014/04/25(金) 22:37:39.80 ID:vKWRVcWD
>>328
あんたは>325か?
だとしたら、自分で答えを書いているようなもんじゃないか。
335デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/26(土) 05:30:35.15 ID:H4OEZVXF
128bit 時代になったら long long long になるんだろうか…
338デフォルトの名無しさん:2014/04/26(土) 08:01:35.73 ID:/IqLL/o+
きっとlong long long longだよ
339デフォルトの名無しさん:2014/04/26(土) 12:02:56.50 ID:FOzpDrfL
じゃあそのときはlong long longは何になるんだ?
96ビット整数か?
340デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/26(土) 12:28:21.25 ID:dMJ+hsKf
64bit OSでもLP64というモデルがあってですね…
342デフォルトの名無しさん:2014/04/26(土) 12:50:15.63 ID:H4OEZVXF
ここは超超超絶技巧でみたいな・・・
343デフォルトの名無しさん:2014/04/26(土) 18:17:32.95 ID:ynFN81Em
>>339
コンパイルエラーじゃないの?
344デフォルトの名無しさん:2014/04/26(土) 19:31:52.70 ID:rMovUfm2
very long signed integer っていう言葉がすでにあってですね VLSI などと呼ばれています、
その次は、ultra であることも決まってます ULSI ですね
345デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/28(月) 23:17:00.56 ID:qD9oODa6
Visual C++でDICのプログラム作らなきゃあかんのだけど、なんか参考になる本とかサイトあったら教えて
348デフォルトの名無しさん:2014/04/28(月) 23:22:01.11 ID:kXaBUVy8
fcloseする前にfflushするべき?
349デフォルトの名無しさん:2014/04/28(月) 23:24:00.60 ID:CvTpEXXH
fcloseはまずfflushするからせんでもいい。
350デフォルトの名無しさん:2014/04/29(火) 00:19:38.56 ID:PvmweMHQ
>>349
どうもです
351デフォルトの名無しさん:2014/04/29(火) 00:22:02.07 ID:Br1Uxtes
>>345
long long int はNGなの?
352デフォルトの名無しさん:2014/04/29(火) 03:41:24.36 ID:c3V/vf3p
>>350
戻り値のエラーチェックを忘れずになー
ファイルクローズの失敗って致命的なはずなのにエラーチェックしないひと多い。
353デフォルトの名無しさん:2014/04/29(火) 03:46:10.54 ID:6FPZ981r
read、writeでエラー出てなかった時は、close全然気にしてなかったw
354デフォルトの名無しさん:2014/04/29(火) 06:28:08.91 ID:kVygpKR5
355デフォルトの名無しさん:2014/04/29(火) 12:18:26.09 ID:TvL0I6wZ
>>352
エラーチェックするのは良いとして、どう対処するの?
ユーザーへの通知くらいしか出来ないでOK?
356デフォルトの名無しさん:2014/04/29(火) 12:46:31.98 ID:cLunpA27
>>355
他のエラーと何が違うと思ってるの?
357デフォルトの名無しさん:2014/04/29(火) 12:50:17.29 ID:pH50e3ah
closeに失敗するようなパソコンを持ってる方が悪い
358デフォルトの名無しさん:2014/04/29(火) 13:03:45.58 ID:TvL0I6wZ
>>356
エラーにもよるけど、fcloseは失敗しても実質何もできない部類のエラーなんだけど、そこの意識は俺と合ってる?
359デフォルトの名無しさん:2014/04/29(火) 13:13:46.40 ID:rczhsOKu
>>358
メッセージ出すとか、リトライするとか、違うデバイスに保存し直せるようにダイアログ出すとか...

ちゃんと書けてないのにそ知らぬ顔してるアプリの作者はマジプログラマー辞めろと言いたい。
360デフォルトの名無しさん:2014/04/29(火) 13:13:51.89 ID:QmOywj8Q
>fcloseは失敗しても実質何もできない
そうやって問題が発生した事実を
利用者に隠すんですねわかります
361デフォルトの名無しさん:2014/04/29(火) 13:18:00.13 ID:cLunpA27
>>358
他のエラーと同じく通知も分岐もできるだろ。
繰り返しになるけど、何を以って他のエラーと違う「部類」になると思ってるの?
362デフォルトの名無しさん:2014/04/29(火) 13:58:19.80 ID:eNexNAiy
fcloseの仕様も読まずにリトライしろという馬鹿
363デフォルトの名無しさん:2014/04/29(火) 14:03:54.68 ID:TvL0I6wZ
>>359
結局、エラー通知しか出来ないって事でOK?
リトライするならfopenからやり直しになるけど、そこは認識合ってるかな?
364デフォルトの名無しさん:2014/04/29(火) 14:04:40.27 ID:VfEVh/tP
まあユーザへの通知ぐらいはしといた方がいいわな
ハンドル系は閉じる関数違えるミスが結構あるのでその予防にも
365デフォルトの名無しさん:2014/04/29(火) 14:05:09.65 ID:TvL0I6wZ
>>361
分岐って、、、そりゃ出来るけど、分岐してどうするかが知りたいんだけど。。。
366デフォルトの名無しさん:2014/04/29(火) 14:09:39.88 ID:cLunpA27
>>363,365
分岐したうえで perror("Closing file"); return EXIT_FAILURE; .だとか、fopen()からやりなおしだとか、
プログラムや対象のファイルに応じていくらでも考えられるだろ。

他のエラーと同じだと言ってる。
いい加減に何が違うと思ってるのか言ってくれ。
367KAC:2014/04/29(火) 14:10:09.18 ID:3cTlepGQ
普通に考えたらわかりそうなもんだけど。

データをファイルに保存する→エラーになった。
破棄する訳にはいかないからもう一度保存を試みる。

ってプログラムを作るのは別に変な話じゃない。
368デフォルトの名無しさん:2014/04/29(火) 14:10:25.50 ID:TvL0I6wZ
>>361
fcloseが他のエラーと違うのは、そのファイルポインタが一切使用できなくなるとこかな。
つまり、最初からやり直すしか手がない。
出来るなら有限でfopenからリトライするけど、そもそもローカルストレージ相手の場合、この手のリトライはあまり有効じゃないよね。
369デフォルトの名無しさん:2014/04/29(火) 14:14:00.02 ID:TvL0I6wZ
>>367
別に変じゃないけど、多くの場合あまり意味が無いよ。
ネットワークストレージじゃない限り、リトライで救えるケースてあまりないと思うんだけど、どう?
370デフォルトの名無しさん:2014/04/29(火) 14:17:21.02 ID:TvL0I6wZ
>>366
多くの場合でリトライが意味をなさない所。

つまり、エラー通知くらいしか対処法が無いって事でいいんだよね?
ネットワークストレージ以外で、リトライで救えるケースを教えてくれないか?
371デフォルトの名無しさん:2014/04/29(火) 14:29:16.93 ID:VfEVh/tP
1.USBストレージでユーザが早まって抜いちゃいました
2.「書き込みに失敗しました、リトライしますか?」
3.ユーザUSBを挿し直す(最近はLinuxなんかでも自動で同じマウントポイントにマウントされる)
4.fopenからやり直し→幸せ
372KAC:2014/04/29(火) 14:29:21.87 ID:3cTlepGQ
>>369
リトライといっても色々考えられるから。

別のストレージに緊急退避するってのもあるし、
異常の起きたものを待機系に切り替えてリトライってのもあるし、
パソコンとかならユーザーに保存先入力させるのもあるし。

関数レベルでリトライできないけどエラーを返す仕様になっているのはそういうこと。
373デフォルトの名無しさん:2014/04/29(火) 14:30:58.54 ID:cLunpA27
>>368-370
エラー通知しかできないことも多いだろうが、既に挙がっているリトライの例のように、それ以外の対処をすることだってあり得る。
通知以外の対処が有効かどうかってのはプログラムや操作対象に応じて変わるだろうとしか言えない。他のエラーと同じ。

「エラー通知くらいしか対処法が無い」を強弁して何がうれしいのかわからないので、エラー処理サボる口実が欲しいのかな?と思ってる。
374デフォルトの名無しさん:2014/04/29(火) 14:52:10.17 ID:TvL0I6wZ
>>373
>エラー処理サボる口実が欲しいのかな?と思ってる。

って言うか、これが全てだよね?
最初から喧嘩腰だった点で、ああ、俺のレスが気に入らなかったんだな、とは感じたよ。
誰もサボりたいなんて言ってはいないし、それは君の思い込みだった点は認めて欲しい。

単純にエラー処理すべ事例が思い浮かばなかったから、聞いてみただけだよ。
375デフォルトの名無しさん:2014/04/29(火) 14:53:16.31 ID:TvL0I6wZ
>>372
なるほど、確かにそう言う事例はありそうだね。
ありがとう、勉強になったよ。
376デフォルトの名無しさん:2014/04/29(火) 14:55:47.85 ID:TvL0I6wZ
>>371
活線挿抜(だっけ?)系のストレージか、確かに確かに。
SDカードの接触不良とかもありそうだなあ。
377デフォルトの名無しさん:2014/04/29(火) 14:59:31.78 ID:yMt+E2dH
ID:cLunpA27
が一番偉そうにしてるわりに一番無益な情報しか書いてない件
378デフォルトの名無しさん:2014/04/29(火) 15:13:06.94 ID:cLunpA27
>>374
サボりたいと思ってるわけじゃなかったのなら、確かにそこは思い込みだったよ。ごめん。

「エラー通知くらいしか対処法が無い」なんてことは無いのを理解してもらって、あとは
具体的に有効な対処をコーディング時点で知ってるかどうかに関わらずエラーチェックを
入れてくれてるなら文句は無いんだ。
379デフォルトの名無しさん:2014/04/29(火) 16:20:13.81 ID:+oyspTjV
ケースバイケースだろ。
プログラムの処理目的によっては、fcloseに失敗しようがどうでもいい場合もあるんだから、そういう場合にあえて書かなくたっていいでしょ。
まあ、癖としてエラー処理を書くようにするというのは悪いことではないと思うけど。何が何でも絶対にエラー処理を書かないといけない、みたいな原理主義はよくないでしょ。
380デフォルトの名無しさん:2014/04/29(火) 16:55:31.42 ID:VfEVh/tP
いや、これについては原理主義ぐらいがちょうどいいね
研究で書く捨てコードでさえ例外ぐらいは投げとくべき
年度末の追い込みの時期にバグ探しで泣くことになる
381デフォルトの名無しさん:2014/04/29(火) 17:00:32.58 ID:6FPZ981r
多分、直前のread、writeまでは正常に実行できて、closeしようとしたらエラーになった
疑わしいのはハードウェア障害。だからこのまま使い続けると致命的な問題が起こるかも知れない。
直前の処理結果が失敗してないか、ハードウエアの修理交換をする必要があるか、調べたりする。
警告を出すことは意味がありそう。
382デフォルトの名無しさん:2014/04/29(火) 17:07:35.52 ID:B/znruqO
可能性は考えたらきりがない
383デフォルトの名無しさん:2014/04/29(火) 17:09:45.51 ID:B/znruqO
すべてのエラーの可能性を汲み取ったからといって
後々の動作がすべてうまく動く保障などどこにもない
384デフォルトの名無しさん:2014/04/29(火) 17:15:13.39 ID:B/znruqO
コンシューマと違ってトンでも環境でプログラムを動かそうとする
典型的なキチガイユーザーは除外するに限る
385デフォルトの名無しさん:2014/04/29(火) 17:27:52.73 ID:kVygpKR5
割り込み禁止にしてしまえばいいんじゃね
386デフォルトの名無しさん:2014/04/29(火) 18:14:20.81 ID:/hP837aC
>>381みたいなのは経験上メモリ破壊とかただのバグの可能性が一番高い
387デフォルトの名無しさん: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デフォルトの名無しさん:2014/04/29(火) 18:58:20.86 ID:QpcbJXpT
しかしなぜファイルディスクリプタ使うようなC言語的コーディングしてるんだろう
C++のfstreamをつかわないのか
389KAC:2014/04/29(火) 19:04:33.24 ID:3cTlepGQ
>>387
えーと、そのソースで何を主張したいのかよく解らんけど
もしかしてツッコミ待ち?
390デフォルトの名無しさん:2014/04/29(火) 19:12:26.80 ID:QpcbJXpT
というか大多数の人はネット上にあふれるbetterCのコードパクって書いてる
だけなんじゃないかと・・・C++を書けよ、と煽ってみる
391デフォルトの名無しさん:2014/04/29(火) 20:19:03.82 ID:MWWV62uz
例外投げろってこと?
392デフォルトの名無しさん:2014/04/29(火) 20:30:22.41 ID:5kHCxYgx
RAII
393デフォルトの名無しさん:2014/04/29(火) 21:12:04.85 ID:8ogaN1qJ
>>388
fstreamはアレが気持ち悪いからいやだ
fprintfっぽいラッパ書けばいけるのだろうか・・・
394デフォルトの名無しさん:2014/04/29(火) 23:21:41.41 ID:GLIPATnB
sprintfで整形すれば解決 :-)
395デフォルトの名無しさん:2014/04/29(火) 23:57:37.59 ID:tzWpsPe5
>>393
streamが気持ち悪いとな
396デフォルトの名無しさん:2014/04/30(水) 03:08:07.99 ID:G3N8SJAi
食わず嫌いって奴だな
「生理的に受け付けない」から使わないってたぐい
397デフォルトの名無しさん:2014/04/30(水) 03:19:58.03 ID:6UO7iz+Z
std::cout << "フィーリング、大事" << "とても大事" << endl;
398デフォルトの名無しさん:2014/04/30(水) 04:29:27.38 ID:lAD+rioe
そもそも書き込み後のfclose()の失敗は、しばしばバッファのフラッシュによる書き込みの失敗なのは分かっているんだろうか。
読み込み後のfclose()でフォローが必要な失敗はほぼあり得ないのとはわけが違う。
399デフォルトの名無しさん:2014/04/30(水) 07:48:46.64 ID:+uCJ/EHs
printf("%s、とても大事","マユゲ");
400デフォルトの名無しさん:2014/04/30(水) 08:02:11.79 ID:cWCEN50W
printfの戻り値もちゃんと見ないと危ないよな。
401デフォルトの名無しさん:2014/04/30(水) 08:10:03.25 ID:6UO7iz+Z
printfがユーザへの進捗提示ならわざわざ見ない
標準出力に結果を出すタイプのプログラムなら当然見る
402デフォルトの名無しさん:2014/04/30(水) 10:56:44.51 ID:Cv22JJej
そして標準出力にエラー表示ですね、わかります
403デフォルトの名無しさん:2014/05/01(木) 08:27:39.11 ID:jd6Q9ZC+
そこは標準エラーに繋いでくれよ
404デフォルトの名無しさん:2014/05/01(木) 09:56:10.26 ID:Nc3v+u2j
出力先ではなく、目的でエラー処理をするかどうかを分けたい。
405デフォルトの名無しさん:2014/05/01(木) 23:31:41.91 ID:WBIpX+Sx
今どきそんな糞プログラム書いてる奴おるんやなw
406デフォルトの名無しさん:2014/05/01(木) 23:46:29.89 ID:aTJt6vU6
>>405
とりあえず上の書き込みには一人もいないようだが、職場にでもいるのか?
407デフォルトの名無しさん:2014/05/02(金) 14:44:29.03 ID:QC3YDLjT
>>398
そう、根本的なのはこういうことだよね。
読み取り専用なら最後になんかエラーでたなで無視しても大きな問題にはならないけど、書き込み時のclose失敗は書き込みエラーの可能性が高いから、出力したファイルは壊れてると思うべき。

やるべきエラー処置はその時々かなー
408デフォルトの名無しさん:2014/05/02(金) 15:22:09.91 ID:wOX1O7vl
世間ではマイクロソフトのInternet Explorerの
セキュリティ脆弱性が問題となっているけど
この会社は10年経っても学習しないんかね?
バッファオーバーラン対策なんて特別難しいわけでもないし、
いわゆる「バグの無いソフトウェアを開発することは困難」な類の問題でなくて
適切な開発プロセスを経ずに作られていることが問題だと思うんだ。
409デフォルトの名無しさん:2014/05/02(金) 15:26:08.57 ID:1eT74Y+3
何を今更
410デフォルトの名無しさん:2014/05/02(金) 15:32:17.56 ID:Ws6wlKTr
他のブラウザにも脆弱性あるだろうし、問題となっているのではなく、問題にしているだけだけど
411デフォルトの名無しさん:2014/05/02(金) 15:41:31.52 ID:lDfNkxxi
ニムダの失敗でget_sみたいな糞関数を広めて
Cの規格にまで入れさせた企業が
オーバーフローするとは嘆かわしい
412デフォルトの名無しさん:2014/05/02(金) 15:55:15.70 ID:1eT74Y+3
xxx_s セーフ関数郡は良い布教だと思うがね
ie は大昔から制作しているからその思想で創られていなかったと思われ
413デフォルトの名無しさん:2014/05/02(金) 16:00:51.23 ID:PStMJZn4
>ie は大昔から制作しているから
つまりWindowsオペレーティングシクテム自体が欠陥だらけ
414デフォルトの名無しさん:2014/05/02(金) 16:02:20.30 ID:1eT74Y+3
いや、ANSIの規格が欠陥だらけなんだよ
415デフォルトの名無しさん:2014/05/02(金) 17:00:18.88 ID:wV2eK816
>>414
なにいってんだ?
包丁で怪我したら包丁が欠陥なのか?
416デフォルトの名無しさん:2014/05/02(金) 17:04:23.91 ID:Ws6wlKTr
包丁で怪我したら人間のほうに欠陥あるわな
417デフォルトの名無しさん:2014/05/02(金) 17:14:00.60 ID:+HoqucNW
>>414
道具のせいにする奴は無能
418デフォルトの名無しさん:2014/05/02(金) 17:19:08.17 ID:CknGmgvF
つまり413が無能
419デフォルトの名無しさん:2014/05/02(金) 17:22:18.84 ID:jIwzpAmb
プロは間違った道具を使わない
420デフォルトの名無しさん:2014/05/02(金) 17:29:50.65 ID:+HoqucNW
無能な鷹は爪がない
421デフォルトの名無しさん:2014/05/02(金) 18:38:37.06 ID:a3LSTdDG
>>415
何を言ってるんだお前は。
使い方の問題じゃなくて使い方ではどうにもならない
getsみたいなKUSO関数が存在するってことだろ。
包丁は正しく使えばよいけど糞関数は正しく使うことが出来ないとKUSOなんだよ
422デフォルトの名無しさん:2014/05/02(金) 18:55:57.81 ID:K/1gjWeH
>>421
使えないとか意味不明
423 ◆QZaw55cn4c :2014/05/02(金) 19:33:38.47 ID:uljkUnkD
いくら規格にあるからといっても, scanf()群とか,使った時点で「私は馬鹿です」といっているようなもの
自 分 の 頭 で 考 え よ う ね
424デフォルトの名無しさん:2014/05/02(金) 20:21:06.60 ID:u61DiI65
getsは擁護しようがないけど、scanfはまだいいじゃない……
(バイト数制限・バッファクリア等、意外に細かい処理まで行えるため)
いやまあ現実的にはcinなどのストリーム機構使った方がいいんだが
425 ◆QZaw55cn4c :2014/05/02(金) 22:26:12.79 ID:uljkUnkD
データを取りそこなったときの扱いが見えないんです、*scanf() は。
ああ、馬鹿なのは私です‥‥
426KAC:2014/05/02(金) 22:27:22.69 ID:I4CxCkey
>>425
リターン値見ないのか?
427デフォルトの名無しさん:2014/05/02(金) 22:31:22.33 ID:JCTbZqGD
俺はfgetsで一行読んでからsscanfだな
428デフォルトの名無しさん:2014/05/02(金) 22:36:57.53 ID:uljkUnkD
>>426
問題はその後
ストリームには何が残っている?

>>427
それが一番わかりやすいね‥‥ま、なんだかんだいって sscanf() はよく使うね、fscanf() とか scanf() はよくわからないので避けるけれども
ごめんね矛盾したことをいっているね
429デフォルトの名無しさん:2014/05/02(金) 22:38:10.04 ID:u61DiI65
430デフォルトの名無しさん: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デフォルトの名無しさん:2014/05/03(土) 00:55:33.17 ID:4wSZ1uzA
能ある鷹は見えないとこにピック隠すんです
433デフォルトの名無しさん:2014/05/03(土) 01:34:21.62 ID:uWeyjha1
なんかの歌詞だったような気がするが思い出せない・・・
434デフォルトの名無しさん:2014/05/03(土) 01:40:01.06 ID:cKwAiZbq
>>433
ひょっとして:Don't say "lazy"
435デフォルトの名無しさん:2014/05/03(土) 01:44:23.55 ID:uWeyjha1
>>434
あー、それかthx
436デフォルトの名無しさん:2014/05/04(日) 01:03:01.96 ID:tByDu0vN
アプリが自分で書いた中間ファイルのように
内容に関して保証ができているケースでなら、
fscanf()も使わないではないけどねぇ。

まぁ、大抵は設定ファイル用のクラスがあるから
それを使っちゃうけど。
437デフォルトの名無しさん:2014/05/06(火) 09:55:48.60 ID:5c9kkQ6j
宣言と定義の違いがわかりません。
Hに宣言、CPPに定義を書くのが普通らしいですが、
class a{};
なんてのたくさん見かけるのですが・・・
438デフォルトの名無しさん:2014/05/06(火) 09:58:36.30 ID:5ztZHmoZ
宣言は、概要
定義は、実体
と捉えると良いよ
439デフォルトの名無しさん:2014/05/06(火) 10:02:29.99 ID:5ztZHmoZ
本で例えるなら、
ヘッダの宣言が索引
ソースの定義が中身
440デフォルトの名無しさん:2014/05/06(火) 10:08:33.24 ID:5ztZHmoZ
本気で理解したければgccのプリプロセッサ走らせて出力された結果を見た方が早い
それ見て理解できなければ触らないほうがいい
441デフォルトの名無しさん:2014/05/06(火) 18:02:55.83 ID:Fm+h5E30
>>437
基本的には定義はプログラム中でひとつだけである必要がある(One Definition Rule という)ので
複数の翻訳単位(cppファイル)でインクルードされるヘッダファイルには書けない。そのため
ヘッダファイルには宣言だけを書くことになる。

ただしクラス定義やインライン関数など一部の定義は、厳密に同一である限り、別の翻訳単位に
複数あってもよいという特例があるので、ヘッダファイルに書いてもよい。

http://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#basic.def.odr
442デフォルトの名無しさん:2014/05/06(火) 18:54:34.25 ID:+RcwTu4z
>>438 嘘つくな
>>439 嘘つくな
>>441 リンク先には適切なことが書かれているが
 お前のレスは回答になってない
443デフォルトの名無しさん:2014/05/06(火) 19:20:23.59 ID:5ztZHmoZ
class a{} がソースに書いてあってなんでかと疑問に思っているのなら、その class a といやつは、そのソース上でしか使わないこと前提としてコーダーが記述したとおもわれるよ。
別に宣言だからといってすべてをヘッダに記述しなくてもいいし、他のソースでも class a 参照したければ、ヘッダにかけばいいし、その場合はテンプレートでもなければ、定義と宣言にわけて書いたほうがオーバーヘッドも少なくて済むよ。
444441:2014/05/06(火) 19:29:27.72 ID:Fm+h5E30
>>442
元の>437の聞きたいことが曖昧な中で、ヘッダファイルにクラスの定義となるclass a{};なんてのが
書かれてるのをたくさん見かけるのを不思議に思ってるのかと思ったんだけど、違ったのか?

>437の聞きたいことがわかってるんなら書いてくれよ。そのまま回答してくれてもいいだろうし。
445デフォルトの名無しさん:2014/05/06(火) 19:31:22.38 ID:lUtiA3Gx
宣言と定義は441の通り。
HとCPPは他のCPPに見せる必用があるもののみをHに書いてそれ以外はCPP。
この二つの話は関係がない。
446デフォルトの名無しさん:2014/05/07(水) 01:19:45.06 ID:nYkhIpU9
>>443
ステートフルパターンの時、こんな感じになるね。
ヘッダにはベースとなる基底クラスだけ宣言して、サブクラスは実体含めて全部.cppの中。
447デフォルトの名無しさん:2014/05/07(水) 12:40:29.55 ID:2YBlKf+p
テンプレートの定義部をcpp
ファイルに書きたいな
448デフォルトの名無しさん:2014/05/07(水) 19:11:39.34 ID:NdWRqyVL
別ファイルに定義書くことならできるだろ
それをヘッダでincludeすればいい
449デフォルトの名無しさん: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デフォルトの名無しさん:2014/05/07(水) 20:08:51.38 ID:vyc3Cb2X
Comeau使え
451デフォルトの名無しさん:2014/05/08(木) 00:58:47.90 ID:Pg9NfjKp
C++でメソッドって呼ぶのは違和感あるからやめてぇええw
452デフォルトの名無しさん:2014/05/08(木) 01:03:23.78 ID:faglvFea
違和感でなく間違い。
オブジェクト指向に於けるメソッドをC++で実現
するための手段としてメンバー関数を使用するのが
一般的ではあるけれど、
C++の言語仕様の質問をしている文脈では「メンバー関数」が適切
453 ◆QZaw55cn4c :2014/05/08(木) 01:12:13.64 ID:Lwvjy9Um
単に言葉の問題なのでは?
仕様書にそう書いてある、とかならその論議はもういい‥‥
Java のメソッドと C++ のメンバ関数で何がちがうというのか?
454デフォルトの名無しさん:2014/05/08(木) 01:15:34.03 ID:sd5r7+pW
>>453
違わんよ。言葉の違いだけ。
455デフォルトの名無しさん:2014/05/08(木) 09:09:26.17 ID:hZLGjZvC
>仕様書にそう書いてある、とかならその論議はもういい

言語仕様などどうでもよく自分の妄想がすべてというのはいかがなものか
456デフォルトの名無しさん:2014/05/08(木) 09:10:56.34 ID:XNGXWkVF
それ関数じゃねーよ、サブルーチンだろ?
なんてうるさいこと言う人を黙らせるための総称くらいに思ってた
457デフォルトの名無しさん:2014/05/08(木) 18:12:00.68 ID:JZCmTzL0
メンバ関数はfinalがデフォだが
メソッドはそうではないという大きな違いがある
458デフォルトの名無しさん:2014/05/08(木) 20:38:51.44 ID:Lwvjy9Um
>>457
デフォルトがどっちに振っているか、という議論が本質をあらわすのか?

final をつけないと継承禁止にできない
virtual をつけないと継承できない

単にそれだけの違いでしかないと思うが‥‥まあ、vtable は重荷だから後者の C++ 流が好み
459デフォルトの名無しさん:2014/05/10(土) 10:02:33.99 ID:6vfzlC6q
ポインターを2つ定義するときの書き方は
int * a,b;
int * a,* b;
のどちらが正解ですか?
460デフォルトの名無しさん:2014/05/10(土) 10:07:10.33 ID:vWx61Bp4
int* a;
int* b;
が正解です
461デフォルトの名無しさん: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デフォルトの名無しさん:2014/05/10(土) 10:52:04.56 ID:LsIUsMuh
>>459
int *a, *b; これだけが正解。
int *a, **b, c, d[], e, *f, *g[]; ね?
464デフォルトの名無しさん:2014/05/10(土) 11:42:44.95 ID:OTeYCqZJ
めんどくさいから何でもいい。
だが正解は>>460かな。
465デフォルトの名無しさん:2014/05/10(土) 11:52:16.08 ID:KT+pYMn+
>>464
いくらなんでも「int * a,b;」で>>462だと分からない方が……
466デフォルトの名無しさん:2014/05/10(土) 13:21:12.78 ID:vuipbNsY
他人の突っ込んだバグに苦しめられたことのない者だけが >>460 に石を投げよ
467デフォルトの名無しさん:2014/05/10(土) 14:21:04.30 ID:KdDOFXms
石を投げる資格のあるものは、石を投げる必然性を感じない罠。
468デフォルトの名無しさん:2014/05/10(土) 14:46:05.32 ID:OTeYCqZJ
>>465
正しい書き方のうちより良いものはどれかって議論なんだから、間違ってる>>462なんか考慮外だよ。
469デフォルトの名無しさん:2014/05/10(土) 19:34:13.82 ID:z3mnBQ4A
C言語はわからん、特にクラスとか全然・・・

なんていう先輩がいるんですが、どう対処していいものやらw
470デフォルトの名無しさん:2014/05/10(土) 19:36:48.53 ID:KT+pYMn+
>>469
会社なのか学校なのか知らんが教えてやれよw
471デフォルトの名無しさん:2014/05/10(土) 19:45:12.65 ID:libkbDSO
>>469
アセンブラから始めて絶望の淵に叩き込んでやれよ
472デフォルトの名無しさん:2014/05/11(日) 02:01:30.46 ID:Fsl8qTT6
関数呼び出しのoperator ()ってテンプレートに出来ないんでしょうか?
http://ideone.com/uyfykl
こういうことをやりたかったんですが、VCでは通るけどideone(GCC?)やllvmではダメでした
473デフォルトの名無しさん: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デフォルトの名無しさん:2014/05/11(日) 02:35:14.15 ID:Fsl8qTT6
ああああなるほど、そういうことだったのか・・・・・
ありがとうございます、助かりました
475デフォルトの名無しさん: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デフォルトの名無しさん:2014/05/11(日) 14:35:34.41 ID:8m9s6VXd
std::integral_constant があるみたいなので、それを使うことにしました
477474:2014/05/11(日) 18:16:16.21 ID:Fsl8qTT6
476は自分じゃないですが、>>475>>476 勉強になりました
C++11ではLoki::Int2Typeや自前の同等のコードよりもintegral_constant使った方がよさそうですね
478デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2014/05/11(日) 20:12:43.28 ID:Dc1ZdPMo
間違えた

見えないのは>>472のideoneだった
481デフォルトの名無しさん: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デフォルトの名無しさん:2014/05/11(日) 23:13:34.58 ID:Fsl8qTT6
すみません嘘書いてました、呼び出せないと思ったら
Hoge.operator ()<1>();
で呼べますねorz
483デフォルトの名無しさん:2014/05/12(月) 00:17:45.70 ID:WmKbFm6W
> 呼び出せないと思ったら
constメンバ関数にしとけとかテンプレートを介して呼び出すときはtemplateをつけろとかかもな
ttp://ideone.com/QcKCD5
484デフォルトの名無しさん:2014/05/12(月) 16:32:37.15 ID:muMHIcTA
江添さんチーッス!
485デフォルトの名無しさん:2014/05/12(月) 16:38:41.90 ID:BCJ2/LGP
ホゲホゲ
486重要:2014/05/12(月) 16:43:30.75 ID:kwTxhBP1
hogeは>>1で禁止されています。使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
487デフォルトの名無しさん:2014/05/13(火) 03:41:10.81 ID:Y9eapwzT
>>483
変態に見えるんだけど、これは正当なコードとして認められてるの?
t.template operator ()<1>();
とか、ぶっちゃけ初めて見たんだけど?
488デフォルトの名無しさん:2014/05/13(火) 06:55:11.55 ID:24L+j0vJ
operator()が<1>というテンプレート引数を取ってさらにそれを呼び出すために()を
後に付けた形だから正しい

でも最初見た時何かのAAだと思ったぜ
489デフォルトの名無しさん:2014/05/13(火) 10:16:54.16 ID:Iv7eBFJt
>>488
アンサイクロペディアに変態的なHello!Worldコードが載ってたなそういえばw
http://ja.uncyclopedia.info/wiki/C++
http://codepad.org/7mKSYv8e
490デフォルトの名無しさん:2014/05/13(火) 10:50:11.47 ID:J4BXomEj
>>489
仕事でこんなコード書いた人は、
尊敬されるだろうか?
それとも友達を失うだろうか?
491デフォルトの名無しさん:2014/05/13(火) 11:33:50.71 ID:24L+j0vJ
あ、それとt.template とするのは、 t.operator()<1>(); と書くと、operator()が従属名であり
テンプレートに属しているかどうか判断できないので < を比較演算子として解釈してしまい
コンパイルエラーになるからだったな
492デフォルトの名無しさん:2014/05/13(火) 12:22:28.82 ID:/yjwQ/Nr
operator()でなくtest()だったとしたら、t.template test<1>();
ってなるわけで、こうなるとそれほど奇異でもないのかな?
って気がするようなしないような?

てか、実はt.test<1>();って書けないことを初めて知った。
493デフォルトの名無しさん:2014/05/13(火) 17:40:32.21 ID:nq8xv96S
>ぶっちゃけ初めて見た
言語仕様を朝から晩まで読む様な廃人生活してなきゃ
知らない文法があって当然。

>t.template test<1>();
これが当たり前だと思う人はかなり危篤
494デフォルトの名無しさん:2014/05/13(火) 19:05:59.01 ID:sktOgsAt
.template
::template
->template

いずれもテンプレートパラメータに依存する「依存名」であるときに必要なキーワードという点で一致
ネストしたクラステンプレートを記述したりすると必要になる・_・) そうしないと「<」が小なりと解釈されてしまう
495デフォルトの名無しさん:2014/05/13(火) 20:51:48.92 ID:7+GJdaLf
t.template operator ()<1>();
t.template test<1>();
はtemplate無しだとエラーなのか。
templateメンバー関数ってそれなりに使っているだろうから頻繁に.template 使っているのか?
496デフォルトの名無しさん:2014/05/13(火) 21:13:23.33 ID:t4k0CuP/
自分では1回しか書いたことないな。
そんときもコンパイラに促されて初めて気づいた。
497デフォルトの名無しさん:2014/05/13(火) 22:38:37.53 ID:PeeDiq3M
テンプレートではパラメータによって構文上の意味が変わることは許されない、
という仕様の約束を理解してれば珍しくても特殊なルールではなく
typedef typename ... の形の場合の typename と同質のものでしかない
498デフォルトの名無しさん:2014/05/13(火) 23:02:48.96 ID:VAAeDIGc
>>489
すげえ、全部顔文字に見えるな
499デフォルトの名無しさん:2014/05/14(水) 01:12:56.55 ID:NKIJyJDk
>>497
いまいち分からん。逆にパラメータによって構文上の意味が変わるってどんなさま?
500デフォルトの名無しさん:2014/05/14(水) 08:00:58.80 ID:ptnVdVr9
tupleの実験してた時にtemplate付けないと上手く呼び出せなくて驚いた記憶が
今回のは試してないけど、VC++だと間違った構文でも結構普通にコンパイル通るから困る
501デフォルトの名無しさん: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デフォルトの名無しさん:2014/05/14(水) 12:40:02.26 ID:FGHJ28Gs
typedef typenameのtypenameが必要になる場合も
T::x * y;
みたいなときに*が演算子になったり変数宣言のポインタ指定子になったりするのは許さないということで
同じ仕様が関係してる
503デフォルトの名無しさん:2014/05/14(水) 18:21:28.88 ID:eTwx7JM5
あたしハンガリアン書いてる男ダメだわ
古臭くて
504デフォルトの名無しさん:2014/05/14(水) 20:27:24.51 ID:GTzWYgpn
クラス設計について皆さんどうやって設計してるか教えてください
クラス設計について例えばExcelを使うような処理はOpen〜書き込み・保存〜Closeまでを一つのクラスにまとめる
データベースに更新する場合(複数のテーブルに更新をかけるが、処理自体は別の機能)も一つのクラスにまとめているのですが、
みなさんクラスを作る際はどのような基準で設計していますか?
また、MFCを使う場合はキャメル形式をなるべく使うようにして、そのほかはスネーク形式
メンバ変数は'm_'を頭に付けているのですが、みなさんはどのような記述をしていますか?
505デフォルトの名無しさん:2014/05/14(水) 20:38:56.86 ID:N8jyen7a
>>504
>処理はOpen〜書き込み・保存〜Closeまでを一つのクラスに

まずこの時点でなにか勘違いをしている
506デフォルトの名無しさん:2014/05/14(水) 20:50:14.76 ID:GTzWYgpn
>>505
例えばExcelの原紙をもとに一つのレポートを作成する際に、
レポートを作成するクラスを作成して、開くメソッド、閉じるメソッド、保存するメソッドといった感じで構成しているような感じなんですが、
具体的にどういった方法がいいのでしょうか?
507デフォルトの名無しさん:2014/05/14(水) 21:43:33.64 ID:hD/bpS5R
>>506
とりあえずお前の言うところの「開く」「閉じる」ってどういう意味なんだ?
「開く」が「ファイルをifstream等で開いて読み込む」という処理だとすると、
排他処理する理由が無ければそのままclose等すればいいだろうし、
(注:ifstreamだとデストラクタが自動でcloseしてくれる)
排他処理する場合でも「閉じる」以外でファイルをcloseせざるを得ない場合が
あるからそっちの処理も書く必要がある(つまり例外安全)
変数名は……俺は基本的にはキャメル形式オンリーかな
508デフォルトの名無しさん:2014/05/14(水) 22:09:59.55 ID:NKIJyJDk
>>501
むう、そんなことは考えた事がなかった。
509デフォルトの名無しさん:2014/05/14(水) 22:14:48.89 ID:9cE/IMeI
>>501-502
割とガチで勉強になった。
てか、C++って使えるようになってきたかな〜って思ってると、何これ?読みこなせない!
ってことが起きて、やっぱ俺はまだまだ全然だめだめだーってなるの繰り返しだわ。
なんつ〜か、ゴールが見えない。なんなんだよこの言語('A`)
510デフォルトの名無しさん:2014/05/14(水) 22:24:02.64 ID:g3U2DcIK
くめりゃいいんだよ
うごけばいいんだよ
511デフォルトの名無しさん:2014/05/14(水) 22:26:08.48 ID:67Vff7lM
そそ 動いてさえいれば defunct だって気にしない
512デフォルトの名無しさん:2014/05/14(水) 23:08:21.59 ID:h54NpYgX
上記のことも含め大抵のことはオライリーのC++言語リファレンス本に書いてあったけどね
書いてあったからと言っても細かな仕様を頭の中に入れるのはなかなか難しいが
Javaだと重箱の隅をつつくような言語仕様の試験があるんだけど、C++にはあるのかな?
513デフォルトの名無しさん:2014/05/14(水) 23:10:02.46 ID:FQpYXGRc
>>506
>レポートを作成するクラスを作成
KUSO過ぎる
そんなものは構造化プログラミングの関数でいい
514デフォルトの名無しさん:2014/05/14(水) 23:22:12.31 ID:NKIJyJDk
レポート作成機能を持つクラスに違和感は別にないが、
エクセルファイルの操作はそれと関係ないから役割としては切り離さなきゃな。
515デフォルトの名無しさん:2014/05/15(木) 00:42:13.79 ID:WHD7rQmy
アンチhogeはただ基地なだけど、hoge使いは優秀なんだな
>>502の説明でなるほどと思った
516デフォルトの名無しさん:2014/05/15(木) 00:46:38.20 ID:9AiXB0Pi
優秀や基地の評価は主観的だが
ホゲ使いがスレのルールを守れない迷惑な奴であることは客観的事実
517デフォルトの名無しさん:2014/05/15(木) 01:08:52.47 ID:WHD7rQmy
>>516
アンチhogeはこんなことしか書けない
518デフォルトの名無しさん: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デフォルトの名無しさん:2014/05/15(木) 12:08:08.76 ID:+DAA7cFt
エラーメッセージは?
出るだけじゃわからないだろハゲ
520デフォルトの名無しさん:2014/05/15(木) 12:12:10.17 ID:/s2HVWT5
エラーメッセージは忘れました。
CPPUNIT_TEST_SUITE ( fooTest );
CPPUNIT_TEST ( test_add );
CPPUNIT_TEST_SUITE_END ();
上の3つのマクロは消して、継承したクラスに書いてもエラーがでました。
なぜ継承するかというと、fを基底クラスに持つクラスに対して
同じテストをさせるためです。
521デフォルトの名無しさん:2014/05/15(木) 13:04:04.95 ID:5sMFAW9N
エラーメッセージは忘れました。
思い出すのはあなたたちの仕事です。
さあ教えてください。
522デフォルトの名無しさん:2014/05/15(木) 13:13:28.96 ID:i0iC6OZ8
ハゲは関係ないだろ!
523デフォルトの名無しさん:2014/05/15(木) 13:16:12.85 ID:lkL/c86t
むしろすげえなw
524デフォルトの名無しさん:2014/05/15(木) 13:22:22.59 ID:/s2HVWT5
これはあくまで予想なんですけど、test_add()が継承したクラスにないから
マクロがtest_addを見つけられないんじゃないですか?
それを防ぐにはどうしたらいいですか?
525デフォルトの名無しさん:2014/05/15(木) 13:33:57.80 ID:+DAA7cFt
おおい!忘れたぁ?だと!
おまえどうやってコンパイルしているんだお!?
526デフォルトの名無しさん:2014/05/15(木) 13:36:17.60 ID:/s2HVWT5
ごちゃごちゃしたマクロの中のエラーなんで
見ても意味ないと思います。
それよりCPPUNITを使って実際に試してみてくださった方が
早いと思います。
527デフォルトの名無しさん:2014/05/15(木) 13:49:19.30 ID:NgoyH+1H
ID:+DAA7cFt みたいに親身になって怒ってくれる人がいるのを幸せに思えよw
528デフォルトの名無しさん: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デフォルトの名無しさん:2014/05/15(木) 13:57:53.64 ID:+DAA7cFt
foo とか foo2 の実体はどこにあるんだよ?
まさか実体ないとか言うなよ!?
530デフォルトの名無しさん:2014/05/15(木) 13:59:17.88 ID:/s2HVWT5
実体はありますよ。
fooを継承したものがfoo2なのですが
ここでは簡単のため省略してあります。
書いてほしいのなら書きます。
ちなみにtest_add()の実体もあります。
531デフォルトの名無しさん:2014/05/15(木) 14:01:32.71 ID:+DAA7cFt
setUp でエラーが出るなら foo の実体に問題がある以外には考えられないだろハゲ
532デフォルトの名無しさん:2014/05/15(木) 14:03:27.80 ID:+DAA7cFt
それか setUp のオーバーライドの仕方が間違っているかだな
533デフォルトの名無しさん:2014/05/15(木) 14:03:52.51 ID:/s2HVWT5
それはこのコード自体は正しい。
そして実際に正しいことに確信を持てる。
という理解でよろしいでしょうか?
534デフォルトの名無しさん:2014/05/15(木) 14:06:32.07 ID:+DAA7cFt
foo のコンストラクタは引数なし()の定義はしてあるのか?
535デフォルトの名無しさん:2014/05/15(木) 14:06:59.84 ID:/s2HVWT5
もちのろんです。
536デフォルトの名無しさん:2014/05/15(木) 14:08:16.79 ID:+DAA7cFt
とりあえずfooの実体を晒せ
537デフォルトの名無しさん:2014/05/15(木) 14:09:36.53 ID:/s2HVWT5
解決しないようなので。
また次回もう少し具体的な情報を集めてから
質問します。
ありがとうございました。
538デフォルトの名無しさん:2014/05/15(木) 15:11:01.32 ID:0WghPhFc
どいつもこいつもクズばっかりで、まるで役に立たねぇってよ
539デフォルトの名無しさん:2014/05/15(木) 18:04:48.76 ID:5BzvuADB
ところでなんで仮想デストラクタがないfooTestを継承してんのさ
540デフォルトの名無しさん:2014/05/15(木) 19:27:44.47 ID:HJXbd8na
ベースから絶対にdeleteしない覚悟があるんだろう。
541デフォルトの名無しさん:2014/05/15(木) 19:49:14.78 ID:bM3jlx72
デリート用のメソッド()があるからcomオブジェクトみたいに
必ずユーザーがそれを呼び出してから終了する規則なんじゃろ
542デフォルトの名無しさん:2014/05/15(木) 19:55:10.33 ID:/NEBRn6L
メンバ変数追加されてないみたいだしいいんじゃね(適当)
543デフォルトの名無しさん:2014/05/15(木) 19:59:36.34 ID:5BzvuADB
デリート用のメソッド()ってどれ?
544デフォルトの名無しさん:2014/05/15(木) 21:07:56.98 ID:bM3jlx72
デストラクタ呼び出しは実際の型に従う
よって fooTest *f; が foo2Test を指していても fooTest のデストラクタが呼び出される
ここでデストラクタが仮想でないと foo2Test のデストラクタは呼び出されない
ここでfoo2Testには自前でデリートしなくちゃいけないデータメンバや破壊時の特殊処理がないのでデストラクタはいらない
(自動変数はデストラクタの有無にかかわりなく必ず破壊される)
一方 fooTest には foo* を削除する義務があるのでデストラクタが必要だが
public な void tearDown () でユーザーに明示的に foo* をデリートする機会を与えている
恐らくこれはcomオブジェクトのように自明な破壊を行う前に
ユーザーによる明示的デリートコマンドの呼び出しを想定している・_・

…いやわかんね^q^;テキトー
545デフォルトの名無しさん: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デフォルトの名無しさん:2014/05/15(木) 21:46:59.73 ID:5BzvuADB
>>544
ほんとテキトーだな
tearDown()はユーザーが呼び出すメンバー関数じゃない

CppUnit使ったことないのかYo
547デフォルトの名無しさん:2014/05/15(木) 21:57:55.54 ID:QiDDREtP
おまいら今日は随分優しいな
普段なら大荒れのトリガ掛かってるのに
548デフォルトの名無しさん:2014/05/15(木) 22:40:44.83 ID:wGifsmD2
>>545
それ前にもこの板で議論になってなかったっけ?
Effective C++には基底クラスのデストラクタが virtual でない場合その動作は不定
と書かれているけど規格票にはそんな記述は見つからないってオチだったと思うんだよね
実際そのコード、VCやGCCではメモリリークしなかったはず^q^)<記憶があいまーい
549デフォルトの名無しさん:2014/05/15(木) 22:50:29.48 ID:wGifsmD2
>>546
ないのごめんね^q^;
今調べたらテストケースの後始末用メソッドなのね^^;
勉強になるます
550KUSO KOTE ◆unko./w.Osri :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デフォルトの名無しさん:2014/05/15(木) 23:09:54.94 ID:hg+yUWIx
CppUnit::TestFixtureが仮想デストラクタ持ってた場合、
派生クラスのfooTest,foo2Testに暗黙の仮想デストラクタつかない?
552デフォルトの名無しさん:2014/05/15(木) 23:11:46.39 ID:wGifsmD2
>>550
unkoさんいつもありがとうございます^q^
また勉強になりますた
553デフォルトの名無しさん:2014/05/15(木) 23:12:20.04 ID:Dz76ACJj
実際にVC++でリークしてるぞ
554デフォルトの名無しさん:2014/05/15(木) 23:21:41.85 ID:HJXbd8na
unkoは邪魔にならない糞コテ
555デフォルトの名無しさん:2014/05/15(木) 23:35:25.60 ID:eaRTBJfl
>>548
derived が持ってる std::string s のデストラクタは誰が呼ぶかわかるか?
556デフォルトの名無しさん:2014/05/16(金) 00:24:37.99 ID:UHWRh+RQ
生ポだめ
557デフォルトの名無しさん:2014/05/16(金) 02:10:11.03 ID:DN7u20iG
558デフォルトの名無しさん:2014/05/16(金) 08:43:44.38 ID:ZItW3w93
int* a = new int;
shared<int> b = a;
shared<int> c = a;
559デフォルトの名無しさん:2014/05/16(金) 13:22:58.62 ID:2kpp8nP1
>>557
VCは15文字以下ならば直接メンバに置かれるからリークしないだろうね
もちろんこんな実装依存の振る舞いに頼っちゃいけない
560デフォルトの名無しさん:2014/05/16(金) 13:31:42.25 ID:mI+a74mQ
リークしないからといってvirtualを付けないヤツは馬鹿
561デフォルトの名無しさん:2014/05/16(金) 15:04:43.46 ID:WkQFj0ZD
リーク以前に親と子のアドレスは異なることがあるわけだし
その場合 mallocの結果と違うアドレスをfreeして
無事なわけないだろう
562デフォルトの名無しさん:2014/05/16(金) 15:21:39.72 ID:2kpp8nP1
親と子のアドレスが異なることってありえなくね?
子から親へstatic_castできないじゃん
563デフォルトの名無しさん:2014/05/16(金) 15:33:40.21 ID:jyQ1Wi3G
親と子っていい方する?
あと2重継承の場合はアドレス違うよね
564デフォルトの名無しさん:2014/05/16(金) 15:38:20.44 ID:2kpp8nP1
まあ2重の場合はちゃうわな
その場合は基本クラスのリストの最初のものと一致する保証があったようななかったような
565デフォルトの名無しさん:2014/05/16(金) 15:47:04.44 ID:igo/DCLE
仮想関数テーブルが入ってくるからしないようなするような
566デフォルトの名無しさん:2014/05/16(金) 16:00:24.75 ID:2kpp8nP1
*vtableがあるなら>>561だな
流れ的に>>545の話だからまあそこはクリアで
567デフォルトの名無しさん:2014/05/16(金) 16:21:56.27 ID:9/CaAvIs
実際のコンパイラーの動作としてアドレスが異なるのは
多重継承の時と仮想継承の時
568デフォルトの名無しさん:2014/05/16(金) 17:34:58.68 ID:FtAN8YgB
>>562
>子から親へstatic_castできない
why?
569デフォルトの名無しさん:2014/05/16(金) 18:18:25.41 ID:2kpp8nP1
>>568
うむ・・・なんか変な事言った。こういうキャストできないはずがないもんな
ttp://ideone.com/u4TEhf
570デフォルトの名無しさん:2014/05/16(金) 18:49:01.87 ID:do9B1v/N
>>559
1文字だろうがリーク起きてるだろ
571デフォルトの名無しさん:2014/05/16(金) 20:04:44.83 ID:6gqc4dUa
何でこの議論がまだ続いてんだ?
572デフォルトの名無しさん:2014/05/16(金) 23:39:24.50 ID:jkvScUHA
これってどう解釈すればいいの?

アドレス 値
0x00000100 40000
0x00000101 0
0x00000102 0
0x00000103 0
...
573デフォルトの名無しさん:2014/05/16(金) 23:43:52.48 ID:yzYaqda/
>>572はコミュニケーション障害」
と理解した
574デフォルトの名無しさん:2014/05/16(金) 23:50:21.89 ID:a2G3KqVr
>>572
よく分からんが、1バイト領域に「40000」が入るのっておかしくね
575デフォルトの名無しさん:2014/05/17(土) 00:06:11.14 ID:kpm9Xhi5
コードが池沼
576デフォルトの名無しさん:2014/05/17(土) 00:32:39.90 ID:u0GFIGUv
そのような結果を出力するコードを書いたからだろ
577デフォルトの名無しさん:2014/05/17(土) 07:07:08.69 ID:uX7tOWvA
>>574
ワードマシンかも...
578デフォルトの名無しさん:2014/05/17(土) 10:21:29.97 ID:SbmylFCz
>>574
だからどう解釈すればいいのかたずねてんじゃん
579デフォルトの名無しさん:2014/05/17(土) 10:42:36.59 ID:I/SnI2sh
>572はバカ
580デフォルトの名無しさん:2014/05/17(土) 11:06:35.02 ID:u0GFIGUv
どんなコードを書いたか晒せば一発で回答が来る
581デフォルトの名無しさん:2014/05/17(土) 11:11:05.70 ID:SbmylFCz
ベンダーが提供していたツールからコードなんてねーんだよ
582デフォルトの名無しさん:2014/05/17(土) 11:15:56.55 ID:VDcROSia
怒ってんの?しゃぶってよ(´・ω・`)
583デフォルトの名無しさん:2014/05/17(土) 12:00:55.14 ID:SbmylFCz
いいお
584デフォルトの名無しさん:2014/05/17(土) 12:04:26.41 ID:Ut3rni4+
少なくとももっと大量のアドレスに対する値が得られないとリバースエンジニアリングはできんわな・_・
585デフォルトの名無しさん:2014/05/17(土) 12:23:07.27 ID:I/SnI2sh
ここはC++スレだろ?
C++のソースが無いならここで訊くな
586デフォルトの名無しさん:2014/05/17(土) 12:45:56.29 ID:SbmylFCz
>>585のどこにC++のソースがあるのかしらん?
587デフォルトの名無しさん:2014/05/17(土) 13:10:20.41 ID:mZoB3wPV
DSPならあり得るけどね
588デフォルトの名無しさん:2014/05/17(土) 13:33:34.05 ID:R4olBPWV
>>587
1アドレスに最低16bit入らないと……ん、あり得なくはないのか
589デフォルトの名無しさん:2014/05/17(土) 13:58:51.61 ID:d2QcpThl
多重継承の場合、最も基底のクラスが仮想デストラクターを
持っていればいいのではないのですか?
上の場合 CppUnit::TestFixtureに仮想デストラクターがあればいいんですよね。
しかもClangのコンパイラーの場合、仮想デストラクターが無ければ無いという
警告を出すし、それが出ないことからCppUnit::TestFixtureは仮想デストラクターを
持つことが推測されますよね。
590デフォルトの名無しさん:2014/05/17(土) 14:08:36.33 ID:kpm9Xhi5
エラーメッセージも晒さないで記憶喪失装っているクソヤロウのことなんかどうでもいいじゃん
591デフォルトの名無しさん:2014/05/17(土) 14:22:43.93 ID:mZoB3wPV
>>588
いぁSHARCだとdmのデータ幅は40bitだ。
592デフォルトの名無しさん:2014/05/17(土) 14:36:49.43 ID:R4olBPWV
>>591
流石DSP、PCでの常識が通用しないな……
まあID:jkvScUHAが出てきてくれんとどうにもならんか
593デフォルトの名無しさん:2014/05/17(土) 14:39:55.51 ID:d2QcpThl
>>589
についてどう思いますか?
594デフォルトの名無しさん:2014/05/17(土) 14:52:12.24 ID:mZoB3wPV
>>592
まぁドラッグマシーンみたいなものだしな
595デフォルトの名無しさん:2014/05/17(土) 22:07:22.70 ID:IfYsM+gZ
民家の屋根に設置してあるテレビアンテナって、四方を針金で引っ張って固定してるタイプ多いよね。
あれ見て宇宙人が地球との交流を見合わせたって話をどこかで聞いた。
596デフォルトの名無しさん:2014/05/17(土) 22:27:44.43 ID:IfYsM+gZ
すみません。完全に誤爆しました。
597デフォルトの名無しさん:2014/05/18(日) 08:34:15.21 ID:OmC98YTB
どんな誤爆やねん
そしてどうしてそれで宇宙人がドン引きしたのか理由がわからん^^
598デフォルトの名無しさん:2014/05/18(日) 09:18:13.59 ID:2cYQQGni
伊能忠敬の日本地図に驚いて欧米諸国がドン引きしたのは事実
599デフォルトの名無しさん:2014/05/18(日) 10:05:14.30 ID:Bbl89lAs
>>597
宇宙人は高度な文明を持った仲間との交流を求めて旅している。
針金でアンテナを固定しているさまを見て、「ダメだこりゃ」と判断した。
600デフォルトの名無しさん:2014/05/18(日) 11:56:29.18 ID:0kvX68pZ
http://maguro.2ch.net/test/read.cgi/pc2nanmin/1372918692/145
  ↑  ↑  ↑  ↑  ↑
601デフォルトの名無しさん:2014/05/18(日) 12:07:45.59 ID:BMv+P6U/
>>598
欧米は驚愕した! 日本人の、技術力ではなく奴隷としての性能に!
そしてこの優秀な労働力を是が非でも手に入れたいと考えた!!
602デフォルトの名無しさん:2014/05/18(日) 13:44:44.78 ID:BMv+P6U/
>>597
各家庭がレーザー発射装置で武装していると勘違いしたんだよ
603デフォルトの名無しさん:2014/05/18(日) 14:28:39.28 ID:NvT/vy/q
池田菊苗が旨味を発見した時も欧米人ドン引き
604デフォルトの名無しさん:2014/05/18(日) 14:59:36.82 ID:+bye9+6c
>>601
まぁテョンは金貰ってもいらんわな
605デフォルトの名無しさん:2014/05/18(日) 15:34:12.79 ID:DIHfwpMS
>>603
旨味の文化がない朝鮮がどのツラ下げて言ってるんだ
606デフォルトの名無しさん:2014/05/19(月) 12:01:53.69 ID:qBdg6XNI
Class * a=new Class();
aが定義されています。
しばらくプログラムの処理が続き時間が経過しました。
ポインターaの指し示すClassの実体の
データが更新されたかもしれません。
それを知るにはどうしたらいいですか?
aが定義された直後にaのポインターaの指し示すClassの実体を別の場所にコピーしておいて
更新されたか調べるときにそれと比べることはコピーに時間がかかるのでできません。
607デフォルトの名無しさん:2014/05/19(月) 12:05:04.65 ID:HfTaDQys
メッセージ飛ばすなりイベント登録させるなりご自由に
608デフォルトの名無しさん:2014/05/19(月) 12:07:51.40 ID:tLtdhy1h
過去の状態を完全に忘れるとして、更新を知る手段はあるだろうか?
609デフォルトの名無しさん:2014/05/19(月) 12:10:28.24 ID:HfTaDQys
内部データのハッシュを出力するメンバを作っといてそれを比較するって手はある
610デフォルトの名無しさん:2014/05/19(月) 12:11:03.61 ID:mxK7K6eG
>>606
例えば、
・そのクラスのメンバ変数に「中身を変更したフラグ」を作成
・メンバ変数の中身を変更するメンバ関数にフラグを立てる処理を入れておく
・チェックする際はそのフラグを調べるメンバ関数を呼び出せばOK
っていうのはダメ?
611デフォルトの名無しさん:2014/05/19(月) 12:11:17.63 ID:/174+P6q
オブザーバーパータンとか
612デフォルトの名無しさん:2014/05/19(月) 12:12:32.46 ID:qBdg6XNI
ちなみにaに絶対被らないIDを持たせてそのIDだけをコピーしておくというのは
考えたんですけど、aが同じ状態になると同じIDを持つようにするのは
難しいのであきらめました。
613デフォルトの名無しさん:2014/05/19(月) 12:14:39.03 ID:mxK7K6eG
>>612
二度変更した時に元に戻る可能性もあるんなら、
>>609のような手はダメなん?
614デフォルトの名無しさん:2014/05/19(月) 12:15:48.13 ID:HfTaDQys
>>610
それは利用する側が単一であるなら成り立つけど、あんまりいいスジじゃねぇな
>>612
ハッシュについてちょっと勉強したほうがええ
615デフォルトの名無しさん:2014/05/19(月) 12:31:15.46 ID:k9Qc46s/
別の所にコピーしておくのすら時間がかかって駄目ってことは、ハッシュの計算も駄目じゃね?
616デフォルトの名無しさん:2014/05/19(月) 12:37:05.66 ID:HfTaDQys
>>615
なにも毎回チェックするごとに再計算する必要はない
内部状態を変更するメンバの中でハッシュを再計算するように実装すればいいんだから
変更にたいして利用頻度が圧倒的に多い問題はよくある
617デフォルトの名無しさん:2014/05/19(月) 12:41:52.77 ID:tLtdhy1h
>>616
変更を監視して実装なら>>610で充分なのでは
618デフォルトの名無しさん:2014/05/19(月) 12:46:47.58 ID:HfTaDQys
>>617
2つ以上のコンテキストから呼ばれる場合に破綻する
そういう状況じゃないなら別にいいけど、リーダから馬鹿にされそうな設計だとは思う
619デフォルトの名無しさん:2014/05/19(月) 13:03:47.47 ID:qBdg6XNI
すいませんクラスをどうやってハッシュに変換できるんですか?
620デフォルトの名無しさん:2014/05/19(月) 13:07:48.67 ID:/174+P6q
そりゃメンバ変数からごにょごにょするんだよ
621デフォルトの名無しさん:2014/05/19(月) 13:11:09.52 ID:HfTaDQys
>>619
変更ごとに一意であればよいのならハッシュする必要すらないよ
非constなメンバを呼ぶ毎に値を増分してその値をIDとして返せばいい
そうでないならメンバ変数をガサっとsha1にでもかけろ。たいていライブラリやAPIがある
622デフォルトの名無しさん:2014/05/19(月) 14:21:37.21 ID:vf7EZdTJ
>>610とID:HfTaDQysの言ってることってほとんど同じなような気がするんだが
623デフォルトの名無しさん: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デフォルトの名無しさん:2014/05/19(月) 15:35:41.23 ID:/174+P6q
dynamic_cast
625デフォルトの名無しさん:2014/05/19(月) 15:57:44.70 ID:BIei0SY0
Classの仮想メンバ関数にvirtual bool equals(Class const& other) const;でも定義して子クラスのequalsでdynamic_castすればいい
後はフリー関数にClass const&を二つとるような比較関数でも作ってラップしたらいい
626デフォルトの名無しさん:2014/05/19(月) 18:00:02.01 ID:zHXgCe3L
>>618
> 2つ以上のコンテキストから呼ばれる場合に破綻する

どういう意味?
627デフォルトの名無しさん:2014/05/19(月) 18:05:41.35 ID:zHXgCe3L
>>622
だね、フラグかカウンタかの違いしかないと思う。

あと、変更するメソッド呼ばれたけど、値自体は変更しなかった (今の値と同じ値を書き込んだ) 場合は変更と見なすの? それとも、無変更? ⇒ >>606
628デフォルトの名無しさん:2014/05/19(月) 19:03:35.75 ID:BIei0SY0
>>627
>>612とあるので内部状態が同じなら無変更とみなすのだろうし、それならequals()のようなメンバ関数を作ればいい
629デフォルトの名無しさん:2014/05/19(月) 19:16:06.95 ID:HfTaDQys
>>627
変更を内部フラグで知るなら必ずその「フラグをクリアするメソッド」が存在するわけ
一方の利用者が変更をチェックしてそのフラグをクリアするともう片方の利用者は変更を知ることができない
だからそのクラスの利用者が一人であればフラグでいいけど、アルゴリズムとしては全然違う
630デフォルトの名無しさん:2014/05/19(月) 19:17:47.65 ID:WTOS6QfZ
いいから黙ってメッセージかコールバックによるイベントパターン使えよ
悩むようなところじゃない
631デフォルトの名無しさん:2014/05/19(月) 19:27:05.41 ID:HfTaDQys
>>623
operator==(Class a,Class b) を定義するなら基底のClassだけで比較できなきゃおかしいじゃんよ
632デフォルトの名無しさん:2014/05/19(月) 19:51:58.60 ID:BIei0SY0
参照で引数とればスライシングされないからどうとでもなる
ttp://melpon.org/wandbox/permlink/AP8ONiXSVGQMLYER
633デフォルトの名無しさん:2014/05/19(月) 20:05:23.84 ID:wR4uca6O
> aが定義された直後にaのポインターaの指し示すClassの実体を別の場所にコピーしておいて
> 更新されたか調べるときにそれと比べることはコピーに時間がかかるのでできません。

こう書いてあるから==やequalsは相応しくないよね。
634デフォルトの名無しさん:2014/05/19(月) 20:10:30.04 ID:BIei0SY0
>>612,>>623とあるから等値比較が出来れば足りるんじゃないかと思ったんだけどそうでもないのかなあ
635デフォルトの名無しさん:2014/05/19(月) 20:11:15.92 ID:HfTaDQys
>>633
つか ID:qBdg6XNI は自分のやりたいことがわからなくなってるか釣りだと思えてきた
636デフォルトの名無しさん:2014/05/19(月) 20:27:27.86 ID:9mfdpPTy
>>634
ホントだw
比べたいとか言ってるの見逃してたw

>>635
そもそも、今回の話どこが一番臭いかっていうと、
「コピーに時間がかかるのでできません」って部分だなw
リアルタイム性というわけでもなさそうだから、
どんだけクソデカイクラスになってんだよって予感。
637デフォルトの名無しさん:2014/05/19(月) 20:40:31.80 ID:u0kYoYP8
静的なポインタってある?
なんかイメージ出来ない
638デフォルトの名無しさん:2014/05/19(月) 22:26:12.91 ID:rJXEGLj9
>>636
単なるコンテナってこともあるかも
639デフォルトの名無しさん:2014/05/19(月) 22:29:47.82 ID:mLyDgbnZ
>>35
このスマポという奴を使う場合
ud[n][2]の2のほうも変数にする方法は有りますか?
640デフォルトの名無しさん: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デフォルトの名無しさん:2014/05/19(月) 23:13:45.98 ID:uxNA84mc
>>637
シングルトン
643デフォルトの名無しさん:2014/05/19(月) 23:59:41.23 ID:R0sc+CFe
>>628
> >>612とあるので内部状態が同じなら無変更とみなす

なるほど、純然に内部状態で判断するのか

> それならequals()のようなメンバ関数を作ればいい

データがでかいとかで比較が大変なんだろ。
高速化の手法は色々あるだろうけど、データ構造見ないとなんとも言えないな。
644デフォルトの名無しさん:2014/05/20(火) 00:01:06.13 ID:qEC6acDv
>>637
const char* p = "static";
645デフォルトの名無しさん:2014/05/20(火) 00:03:32.07 ID:bpam5xUn
>>629
ハッシュ計算するのはいいけど、なにと比較するんだ?
そして、その比較対象の値をいつ設定して、いつ更新すべきかを考えてごらん。
自分がどんだけアホなこと言ってるかわかるから。
646デフォルトの名無しさん:2014/05/20(火) 00:07:51.25 ID:94D84veD
>>645がかわいそうだから相手してあげて!
647デフォルトの名無しさん:2014/05/20(火) 00:07:52.06 ID:qEC6acDv
>>641
a→b→c→b→a
って推移して現在の状態が「a」のとき、比較対象は最初のaかもしれないけど2番目のbであることもあるんだよね?
648デフォルトの名無しさん:2014/05/20(火) 00:43:06.04 ID:ROp5ZExO
>>646
アホは要らんよ (w
649デフォルトの名無しさん:2014/05/20(火) 01:46:10.92 ID:isLDQHzO
std::shared_ptr::operator==とかでよくね?
650デフォルトの名無しさん:2014/05/20(火) 08:53:27.59 ID:q/EjpcBc
Class * a=new Class1();
Class2 x;
x.function(a);
//aの指すアドレスが変わるか、aの指し示すアドレスの実体が変わるか、変わらない。
x.funcition(a)
------------------------------------------
void function(Class *a){


}
//aの指すアドレスが変わるか、aの指し示すアドレスの実体が変わるか、変わらない。
//ここでaが変わらないかを調べる。
651606:2014/05/20(火) 08:57:04.43 ID:q/EjpcBc
Class * a=new Class1();
Class2 x(a);
x.function();
//aの指すアドレスが変わるか、aの指し示すアドレスの実体が変わるか、変わらない。
x.funcition()
------------------------------------------
class2{
Class * a;
public:
Class2(Class *a):a(a){}
void function(){
//ここで1回目と比べてaが変わらないかを調べる。

}
};
こんな感じです。途中でおくっちゃいました。
おしえてください。
652デフォルトの名無しさん:2014/05/20(火) 09:02:23.27 ID:q/EjpcBc
また間違えました
Class * a=new Class1();
Class2 x(&*a);
x.function();
//aの指すアドレスが変わるか、aの指し示すアドレスの実体が変わるか、変わらない。
x.funcition()
------------------------------------------
class Class2{
Class ** a;
public:
Class2(Class **a):a(a){}
void function(){
//ここで1回目と比べてaが変わらないかを調べる。

}
};
また間違えました。
653デフォルトの名無しさん:2014/05/20(火) 09:04:13.58 ID:Dt1y8Hrx
Class *bを作ってコピーしておいて
呼ばれた時に比較すれば良いじゃん
654デフォルトの名無しさん:2014/05/20(火) 09:07:56.75 ID:q/EjpcBc
ポインターの指し示すアドレスが同じでも内部状態が違う場合もあります。
655デフォルトの名無しさん:2014/05/20(火) 09:26:12.25 ID:ePz2OZTw
Classが変更されたかなんてClass自身が変更を感知するようにするか、
Classのインスタンス丸ごとコピーするしか無い

class Class2{
Class ** a, *b, c;
public:
Class2(Class **a):a(a), b(*a), c(**a){}
void function(){
//ここで1回目と比べてaが変わらないかを調べる。
*a==b && *b == c
}
};
656デフォルトの名無しさん:2014/05/20(火) 14:01:29.49 ID:OAZ4ZO8J
委譲を使いクラスを生成した場合
委譲をした元クラスを解放すれば
委譲されたクラスは自動で解放される?
委譲されたクラスのデストラクタはちゃんと呼ばれる?
657デフォルトの名無しさん:2014/05/20(火) 14:17:20.21 ID:PibgqYJG
プログラムのソースを見てると
後藤、後藤という名前が沢山かいてあるのですが。
後藤さんとはどなたのことでしょうか?
658デフォルトの名無しさん:2014/05/20(火) 14:26:08.54 ID:h8z0j56T
後藤がでてくるソースはうんこなので捨てなさい
659デフォルトの名無しさん:2014/05/20(火) 19:50:23.16 ID:XZ8PbsoH
>>656
委譲するクラスや委譲されるクラスをどのように確保するかによってかわってくる
wikipedia の例ならそもそもデストラクタでどうこうする必要はない
new を使うのなら、委譲だろうがなんだろうがデストラクタ内に delete が絶対に必要

いい練習問題だからやってみたまえ
660デフォルトの名無しさん:2014/05/20(火) 21:04:36.49 ID:eMXV5lE3
委譲ってなんでポインタで生成する必要があるの?
普通に生成するとどんな問題があるの?
661デフォルトの名無しさん:2014/05/20(火) 21:13:45.52 ID:XZ8PbsoH
>>660
>ふつうに生成する

委譲と派生の区別はついているか?
662デフォルトの名無しさん:2014/05/20(火) 21:53:19.12 ID:sXEfvlXU
オリビア発生
値同一性がないとポリモーフィックに呼び出せなくなるからじゃろ
よって委譲先オブジェクトはポインタか参照で保持しないといけないんじゃないかなってかなかなかなかなかなかなかなかな
663デフォルトの名無しさん:2014/05/20(火) 22:29:58.79 ID:Tn6nhMPt
>>662は精神に障害が見られる
664デフォルトの名無しさん:2014/05/20(火) 22:42:54.86 ID:hFR+2VOp
>>662
ザナドゥ?
www.youtube.com/watch?v=2GaCdGVasMc
665デフォルトの名無しさん:2014/05/20(火) 23:45:43.22 ID:qEC6acDv
それはニュートンジョン
発生はこっち
http://www.youtube.com/watch?v=tC6MaPKLWjY
666デフォルトの名無しさん:2014/05/21(水) 01:12:28.22 ID:Aopr5pIU
>>659
デストラクタ内にdelete?
スマートポインタ使うでしょ。
667デフォルトの名無しさん:2014/05/21(水) 10:20:50.17 ID:fwt+X/Hj
std::mt19937 re1,re2;のとき
re1()==re2()になる確率はは
re1()==re1()となるときの確率と同じですか?
re1()が同じ数になるのはプログラムを起動するごとに
re1()の値が同じということですか?
668デフォルトの名無しさん:2014/05/21(水) 10:33:45.82 ID:8iD7h9lx
デフォルト値が同じだから
re1()==re2()は100%だろ
re1()==re1()は2回連続で同じ値が出ないといけないので
限りなく0に近いんじゃないか
669660:2014/05/21(水) 12:16:25.57 ID:b5pc/rPA
>>662
元のクラスと値を共有したい場合はポインタで生成して
委譲したクラスのみで完結する場合、通常に委譲
ってことで良い?
670デフォルトの名無しさん:2014/05/21(水) 15:33:42.83 ID:TendC8lx
>>667
試せばええやん
671656:2014/05/21(水) 21:15:17.04 ID:Rtlj0b94
>>659
http://ja.wikipedia.org/wiki/%E5%A7%94%E8%AD%B2
このwikipediaの委譲は
SomethingDelegator が解放されたら
委譲元の Something も解放される?

あと、なんで委譲はポインタで生成しないといけないの?
ポインタ使わず普通に生成するとどうなるの?
672デフォルトの名無しさん:2014/05/21(水) 21:17:31.73 ID:5QycispB
>なんで委譲はポインタで生成しないといけないの?

どこからそんな妄想が
673デフォルトの名無しさん:2014/05/21(水) 21:30:44.78 ID:bcTRRT8A
委譲自体派生
674デフォルトの名無しさん:2014/05/21(水) 21:46:10.84 ID:W3eKd5yS
どこからそんな妄想が
675デフォルトの名無しさん:2014/05/21(水) 21:50:02.77 ID:UNdtEyUU
>>671
そこに書いてある例はおかしい
676デフォルトの名無しさん:2014/05/21(水) 22:11:16.97 ID:wNn35vzx
>>675
Javaの例が今二つって感じだ
677デフォルトの名無しさん:2014/05/21(水) 22:50:37.94 ID:r31Q+4UK
純情愛情に委譲
値互換性というローカル用語がまずかったか
確かC++ Coding Standardsあたりに出てきた単語だったように記憶しているんだけどまあ一般的に言うと代入互換性
>>671のサイトに有るように「一種の実装遅延、プラグイン機構」であって
委譲先オブジェクトが委譲元オブジェクトに組み込まれるための共通したインタフェースが必要になる
それには継承によって代入互換性が必要になる
静的にしかポリモーフしないならテンプレートでもいい

んじゃないかな⊂(^ω^)⊃ブーン
678デフォルトの名無しさん:2014/05/22(木) 00:08:08.89 ID:alxsAody
バカほど長文&イミフな駄文
679デフォルトの名無しさん:2014/05/22(木) 00:49:14.20 ID:xVEh6bhZ
>>677
過剰が抜けてる

根本的には静的な言語なので、動的と言っても本当は違う
680デフォルトの名無しさん:2014/05/22(木) 01:07:40.73 ID:wrQHW2kJ
>動的と言っても本当は違う

バカほど聞きかじったことを吹聴する。
duck-typingが動的に評価される言語以外は本当の動的ではないとか
頭イカれすぎ
681デフォルトの名無しさん:2014/05/22(木) 01:12:53.63 ID:xVEh6bhZ
>>680

> duck-typingが動的に評価される言語以外は本当の動的ではないとか

それで他人の考えを読んだつもりか?
妄想もたいがいにしろ
682デフォルトの名無しさん:2014/05/22(木) 02:01:49.45 ID:RWmeGwVL
>>671
> http://ja.wikipedia.org/wiki/%E5%A7%94%E8%AD%B2
> このwikipediaの委譲は
> SomethingDelegator が解放されたら
> 委譲元の Something も解放される?
解放されない
ここでいっている委譲はC++の言語機能ではなくただの設計であって
委譲だからといって特別な動作はなにもない

> あと、なんで委譲はポインタで生成しないといけないの?
いけなくない
委譲するクラスの機能と委譲先のクラスとの関係をどう設計するか次第で自由

そもそも委譲と所有は無関係で委譲するクラスが委譲先のクラスを所有しているとは限らない
上記のwikipediaの例では委譲するクラスSomethingDelegatorは
委譲先のクラスSomethingを所有しておらずポインタで参照しているだけ
683デフォルトの名無しさん:2014/05/22(木) 09:50:06.40 ID:wq5qPxZ+
Hoge* hoge = new Hoge;
...
hoge->~Hoge();
hoge = new(hoge) Hoge;
...

これってアリ?
684デフォルトの名無しさん:2014/05/22(木) 11:38:28.66 ID:xJMsFpAt
こういうの自分で書いてみれば分かるだろ
再帰的に委譲してみた

int n = 10;

class Sub {
Sub* sp;
int j;
public:
Sub(int i) : j(i) {
if (i < n) {
sp = new Sub(i + 1);
sp->print();
} else
sp = nullptr;
}
void print() const {
std::cout << "Sub(" << j << ")" << std::endl;
}
~Sub() {
std::cout << "~Sub(" << j << ")" << std::endl;
delete sp;
}
};

int main()
{
Sub s(0);
}
685デフォルトの名無しさん:2014/05/22(木) 12:13:44.89 ID:wq5qPxZ+
いや、placement newでもといた場所に同じインスタンスを作り直すのってありなのかなって質問だったんですが
考えてみてもナシな理由がないから大丈夫ですね
686デフォルトの名無しさん:2014/05/22(木) 12:33:06.66 ID:2s31D1Jr
>>683
配置newに失敗したときにデストラクターがもう一度呼ばれないように注意していれば仕組み的にはOK
ただコードが変態的なのでオススメしない。
687デフォルトの名無しさん:2014/05/22(木) 12:36:25.93 ID:F0LsB6gl
>>685
Coding Standardに出来るけどやるなと書いてあったな
何故かは知らない
688デフォルトの名無しさん:2014/05/22(木) 12:39:12.61 ID:2s31D1Jr
「本に書いてあったから」
「理由は知らない」
そんなクソな本は捨てるべし
689デフォルトの名無しさん:2014/05/22(木) 12:42:00.87 ID:wq5qPxZ+
>>686
なるほど
現状同じインスタンスを何度もnew/deleteする可能性があって、サイズがそこそこ大きい場合は
同じ場所でインスタンス作りなおすことでパフォーマンス向上するかな、って考えなんですが
まあパフォーマンスの話は実測ですね、ありがとうございます
690デフォルトの名無しさん:2014/05/22(木) 13:21:51.52 ID:w0Jpkm0F
>>689
パフォーマンスが問題なら、そもそもnewしないで使えないのか?
691デフォルトの名無しさん:2014/05/22(木) 13:34:34.59 ID:xVEh6bhZ
>>689
大きいってたとえばどれくらいのもんよ?
692660:2014/05/22(木) 13:39:45.18 ID:448z5NbE
>>662
元のクラスと値を共有したい場合はポインタで生成して
委譲したクラスのみで完結する場合、通常に委譲
ってことで良い?
693デフォルトの名無しさん:2014/05/22(木) 15:00:03.41 ID:tA+Z3AxB
>>689
大きさとアロケーションコストに大した相関関係はないだろ
694デフォルトの名無しさん:2014/05/22(木) 15:20:32.70 ID:jxaWow30
ちょっとずつサイズを増やしながらコピーとか再確保とかしていくと楽しい
695デフォルトの名無しさん:2014/05/22(木) 18:02:49.01 ID:xLeguXhS
>>683
一定以上大きい領域はいきなりシステムコールでメモリ取りに行く(デカい領域は解放を遅らせるとマズいから)
ある程度普遍的な法則とは思うけど、少なくともLinux(glibc?)の実装はそうなってるよ
696デフォルトの名無しさん:2014/05/22(木) 18:04:27.97 ID:xLeguXhS
安価みしゅった
697デフォルトの名無しさん:2014/05/22(木) 21:52:28.74 ID:Mo8RGL9h
>>689
>同じ場所でインスタンス作りなおすことでパフォーマンス向上するかな
同じ場所が空いている保証あるの?
698デフォルトの名無しさん:2014/05/22(木) 22:10:37.32 ID:ETYgCsQI
パフォーマンス向上ならこんな無理矢理なコード書かないな。
メモリ確保してそのポインタに対してコンストラクタとデストラクタ呼ばせるだろ。
そしてなぜか今回はHogeクラスしか利用していないのだから、
あらためてplacement newする必要はなく単にデストラクタを手動で
呼び出したあとにコンストラクタをまたまた手動で呼び出せば済む話。
699デフォルトの名無しさん:2014/05/22(木) 23:48:22.74 ID:1RpBVB8r
>>697
アホですか?
700デフォルトの名無しさん:2014/05/22(木) 23:56:08.63 ID:S0i92oi5
>>699
アホですね。
701デフォルトの名無しさん:2014/05/22(木) 23:56:39.57 ID:ail8FFYV
>メモリ確保してそのポインタに対してコンストラクタとデストラクタ呼ばせるだろ

それをやってるのが689ではないのか
702デフォルトの名無しさん:2014/05/23(金) 00:07:38.40 ID:+SpuBtXZ
>>689
そのサイズってやつを早くさらせ
703デフォルトの名無しさん:2014/05/23(金) 00:30:46.59 ID:Rxi5bbx9
placement newを使わずコンストラクタを手動で呼び出すというアホ
704デフォルトの名無しさん:2014/05/23(金) 00:36:35.77 ID:s4m3yMpK
コンストラクターはデストラクターと違って手動で呼び出せないと思うのだが
std::allocator::constructだって中身はplacement_newだろ?
705デフォルトの名無しさん:2014/05/23(金) 00:43:49.35 ID:3fYXmte7
手動で呼べないとvectorとかどうすんだよ
706デフォルトの名無しさん:2014/05/23(金) 01:01:46.58 ID:DjCUwwNv
やっぱり内部でplacement newしてる予感
707デフォルトの名無しさん:2014/05/23(金) 19:50:40.28 ID:XGwnlXvL
やけにスルーされると思ったら
あっちでレスしてもこっちの人には見えてなかったわけか
708デフォルトの名無しさん:2014/05/24(土) 13:37:19.25 ID:rNiI6xUn
あっちって何処だよ
709デフォルトの名無しさん:2014/05/24(土) 13:41:25.46 ID:kHQIp9PW
ごめんログが消えただけだった勘違い
710デフォルトの名無しさん:2014/05/24(土) 15:00:23.52 ID:9apNWyJm
707から716まで消えているみたいだ
711デフォルトの名無しさん:2014/05/25(日) 23:04:57.99 ID:VzgXjY2s
なんかレスが消えてるようだけど
>std::make_unique
そんなものは存在しない
712デフォルトの名無しさん:2014/05/26(月) 00:59:02.61 ID:sSiCZOUk
713デフォルトの名無しさん:2014/05/26(月) 07:08:25.76 ID:iDWC+Zyd
アスペが多いね
書き方からして「現行規格票にはない」とかというレスだろう
それに対して次期のURL貼るとか
714デフォルトの名無しさん:2014/05/26(月) 07:28:40.59 ID:VcO2sm71
とアスペは言う
715デフォルトの名無しさん:2014/05/26(月) 09:20:12.29 ID:sSiCZOUk
>>713はエスパーなのか?
716デフォルトの名無しさん:2014/05/26(月) 13:27:45.99 ID:yHJImmyi
アスペーvsエスパー
717デフォルトの名無しさん:2014/05/26(月) 21:16:32.24 ID:l0k3Jdk0
関数のtemplate初心者です。
あまり良い例ではないかもしれませんが、以下のような関数を作った場合、
templateを使って引数では、string,char か wstring,wchar_t のどちらにも対応できますが、
関数の中で
string,char対応の関数(sprintf)を使う場合と
wstring,wchar_t対応の関数(wsprintf)を使う場合と
どうやって切り替えたらよいのでしょうか?

template<typename stringT, typename charU> stringT join_string_and_char(const stringT &str, const charU c){
      charU stringJoined[100];
//     sprintf(stringJoined, "%s and %c", str.c_str(), c);
      wsprintf(stringJoined, L"%s and %c", str.c_str(), c);
      return stringJoined;
}

void main(){
//     string result1 = join_string_and_char<string, char>("string", 'C');
//     cout << result1 << endl;

      wstring result2 = join_string_and_char<wstring, wchar_t>(L"wstring", 'C');
      wcout << result2 << endl;
}
718デフォルトの名無しさん:2014/05/26(月) 21:24:31.57 ID:fNjo4Ias
Type Traitsとかいうテクニックが使えたような
719デフォルトの名無しさん:2014/05/26(月) 21:24:44.86 ID:Z2JGB+L6
>>717
二つ書けばいい
template<typename stringT, typename charU> stringT join_string_and_char(const stringT &str, const charU c){
      charU stringJoined[100];
      wsprintf(stringJoined, L"%s and %c", str.c_str(), c);
      return stringJoined;
}

template<>
string join_string_and_char(const string &str, const char c){
      char stringJoined[100];
     sprintf(stringJoined, "%s and %c", str.c_str(), c);
      return stringJoined;
}
720デフォルトの名無しさん:2014/05/26(月) 21:27:43.49 ID:PY35gZD3
>>717
wsprintfAとwsprintfWをそれぞれwsprintf<char>とwsprintf<wchar_t>のメソッドにする。あとはわかるな
あとsprintfとwsprintfは出自の違う関数だから
最大文字数の制限もちがうのでまぜちゃだめ
721デフォルトの名無しさん:2014/05/26(月) 22:22:12.29 ID:YKj2th5u
>>720は会話の出来ないアスペ
722デフォルトの名無しさん:2014/05/26(月) 22:39:49.53 ID:sSiCZOUk
>>717
その例じゃ、
return stringT(str + c);

としろとしか言えん。
つまり引数自身が持ってるメソッドを使う。
723デフォルトの名無しさん:2014/05/26(月) 22:46:39.43 ID:RXW919A3
どうしてこんなにアスペ&文盲が多いのか。
>>720 >>722は社会の中でちゃんと生活できてるか?
724デフォルトの名無しさん:2014/05/26(月) 23:02:23.28 ID:8opg2BGX
CentOS6.5
gcc4.4.7

日本語の正規表現をC++で扱いたいのでネットで調べたのですが、わからない事があるので教えてください。

(1)「マルチバイト文字列」と「ワイド文字列」とはwindows環境で使われるShiftJISとUTF16のことでLinux(UTF-8)環境では関係ない。

(2)Linux(UTF-8)環境での日本語の正規表現は、std::basic_regexでもboost::regexでも正しく動作する。

ということでいいでしょうか?
725デフォルトの名無しさん:2014/05/26(月) 23:04:23.62 ID:sSiCZOUk
>>723
エスパーにでもなったつもりかw

先回りして「こういうことが聞きたいんだろうか・・・」なんて考えてもムダなことが多いんだよ。
726デフォルトの名無しさん:2014/05/26(月) 23:19:11.71 ID:5ILZATTz
>>725
「例が悪いけど〜どうやって切り替えたら」
と聞いてるんだから>>718の回答が妥当。
例の揚げ足をとる回答しかできないのはコミュ障
727デフォルトの名無しさん:2014/05/26(月) 23:23:00.98 ID:4UfKpyVP
value_type で場合分けするんでもイケそうだけど
728デフォルトの名無しさん:2014/05/26(月) 23:30:38.09 ID:hUfkYiG/
個人的にはテンプレート特化を使う>>719の案の方がtemplateらしくて好き
コードは膨らむけど動作は軽いだろうし・_・)
729デフォルトの名無しさん:2014/05/26(月) 23:38:05.72 ID:YwJBAaZh
>>724
>Linux(UTF-8)環境では関係ない
んなこたーない。

>std::basic_regexでもboost::regexでも正しく動作する
GCCのregexは未完成かつバグだらけで
英語でも使い物にならないんじゃなかったっけか
730デフォルトの名無しさん:2014/05/26(月) 23:48:07.49 ID:sSiCZOUk
>>726
引数自身が持ってるメソッドを使えってのがまともじゃないってのかよ?
731デフォルトの名無しさん:2014/05/27(火) 00:10:01.85 ID:WxzaE4HE
文盲が多いな
どうしたらこの例でコードを共通化できるかを問う質問ではなく
切り替えるには一般にどうしたらよいかという質問だろ
732デフォルトの名無しさん:2014/05/27(火) 00:14:11.32 ID:z7A4bs15
template < typename T, template < typename U, typename = std::char_traits< U >, typename = std::allocator< U > > class C >
C< T > jsac( C< T > const &str, T const c ) {
return str + c;
}

じゃあこんなんでDOUDAI?(´・ω・`)
733デフォルトの名無しさん:2014/05/27(火) 00:14:17.45 ID:uAEnCVdL
うちの会社にいる。
734デフォルトの名無しさん:2014/05/27(火) 00:15:18.85 ID:uAEnCVdL
途中で送ってしまった。

>>731
うちの会社にいる。ただしわざと。

不備のある質問には不備のある回答をする、
意図に不明確な点があれば、やっぱり不明確な回答をする、
というポリシーらしい。

的を射た質問には喜んで答えるんだけどね。
735デフォルトの名無しさん:2014/05/27(火) 03:23:26.62 ID:542ZOO3N
>>729
学生がちゃんとしたの作ってなかったっけ
736717:2014/05/27(火) 06:33:46.82 ID:eE9gvczq
みなさんコメントありがとうございました。
>>731
>>どうしたらこの例でコードを共通化できるかを問う質問ではなく
>>切り替えるには一般にどうしたらよいかという質問だろ
その通りです。私の説明が悪かったようですみません。

718さんの
>>Type Traitsとかいうテクニックが使えたような
少し調べましたが良く分りませんでした。もう少し調べてみます。
やはり719さんのように二つ書くのが簡単なのでしょうか。でもそうするとコードが長くなりますね。
720さんの説明、よくわかりませんでした。
732さんの説明、C++初心者の私には全く理解できませんでした。
737デフォルトの名無しさん:2014/05/27(火) 16:04:37.03 ID:1kcGVSCD
最近のC++はstatic変数を無名namespaceにする流れじゃん
じゃあ↓こういう場合はs[]を無名namespaceで囲うべき?

//test.h
namespace Test {
 extern const char* ps;
}

//test.cpp
namespace Test {
 const char s[] = "Hello."; //これは公開したくない
 const char* ps = s;
}
738デフォルトの名無しさん:2014/05/27(火) 20:08:55.88 ID:cal2qzHP
>>737
個人的にはどうでもいいが
基地外の攻撃を避けるためにはしておいた方がいいだろう

だがこの例ではsは内部リンケージなので囲う必用がない
739デフォルトの名無しさん:2014/05/27(火) 21:38:08.18 ID:5raxgz7B
http://codepad.org/1AztD4JF

↑こういったプログラムを書きました
しかし作ってみたものの、自分が書いた部分がどういった動作をしているのかわかりません

44行目から85行目までどういった動作をしているのか教えてくれませんか?
740デフォルトの名無しさん:2014/05/27(火) 21:41:14.55 ID:1kcGVSCD
>>738
サンクス
内部リンケージとするために形式的に無名名前空間にしなきゃいけないわけじゃないのね
741デフォルトの名無しさん:2014/05/27(火) 21:43:53.88 ID:bQzlXfJs
>>739
そのプログラムを書いた奴に聞けよ(´・ω・`)
742デフォルトの名無しさん:2014/05/27(火) 22:06:17.00 ID:iIiy8yYJ
>>739
マルチしてんじゃねーよ(・∀・)カエレ!!
743デフォルトの名無しさん:2014/05/28(水) 01:52:49.85 ID:1069+ikW
委譲も派生の一部なの?
委譲と派生、継承は別カテゴリと考えてたけどどうなの?
744デフォルトの名無しさん:2014/05/28(水) 02:31:24.94 ID:7s/YdHrO
>>743
委譲は実行時にコストが発生するけれども、派生/継承はコンパイルの時点で「出来上がっている」からねえ
745デフォルトの名無しさん:2014/05/28(水) 07:43:44.20 ID:pSqJyVpX
>>744=どうしようもないバカ
746デフォルトの名無しさん:2014/05/29(木) 07:53:14.37 ID:qoes3ia9
>>743
コストが発生する、というのは確保の仕方でどうにでもなったね‥

adapter パターンでやってみると
派生:http://codepad.org/xFVOCdis
委譲:http://codepad.org/kAwpEdFl

この例ではやっていることは同じだね

上の例では既存の Actual クラスがすでに存在する前提で、最初に本来あるべき内容の Spec クラスを先に書いた
でも Actual クラスを使って Spec クラスの内容を実装したいために Adapter クラスを仲介として追加した
最後に Spec クラスでも Adapter クラス経由の Actual クラスでも同等に動くことを確認した

委譲の場合、仲介クラスであからさまに既存クラスのインスタンスを持つように書くが、
継承は、同じことなんだけれども、仲介クラスで既存クラスを抱合するように書くようだ、この場合は多重継承を使ってしまったが、ああ、純粋仮想関数にしないと Java では無理だね

>>745
ごめんね
747デフォルトの名無しさん:2014/05/29(木) 11:03:22.03 ID:yN6eoL7H
デバッガで追ってて気付いたんだけど、
初回の例外が発生しました: 0x000006BA: RPC サーバーを利用できません。
ってなんだ?
これ以上ないってくらい単純↓のやつでも出るぞ
答えは合ってて動作には支障ないけど、回避策ってあるのかね?

#include <stdio.h>
#include <winsock2.h>

int main(int argc, char *argv[]) {
WSADATA wsaData;
LPHOSTENT host;

WSAStartup(2, &wsaData);
host = gethostbyname("localhost");
return 0;
}
748デフォルトの名無しさん:2014/05/29(木) 11:11:01.51 ID:QaxywJR9
dll内の例外だろう
749デフォルトの名無しさん:2014/05/29(木) 11:18:01.56 ID:zblOCN9G
委譲と派生は別物って解釈で良い?
750デフォルトの名無しさん:2014/05/29(木) 11:23:39.16 ID:QaxywJR9
おk
751デフォルトの名無しさん:2014/05/29(木) 11:24:08.00 ID:hGrR3Csk
>>747
"初回"例外はほぼ無条件で無視していい
本来デバッガが内部で使うもの

デバッガのどこかに無視する設定があるんじゃないの
752デフォルトの名無しさん:2014/05/29(木) 11:45:35.51 ID:ZPfW7Hu7
>>747
レノボ(Thinkpad)のバスワードマネージャを使ってた時に発生した記憶がある。
他人のプロセスに寄生するうんこなアプリをインストールしてないか?
753デフォルトの名無しさん:2014/05/29(木) 12:37:57.29 ID:Wy+ojhXD
nProtect GameGuard 入ってるとか
754デフォルトの名無しさん:2014/05/29(木) 12:57:45.52 ID:QPTL35Py
>>751
> "初回"例外はほぼ無条件で無視していい
> 本来デバッガが内部で使うもの

どや顔でバカさらしてどうすんのよ (w
755デフォルトの名無しさん:2014/05/29(木) 13:15:47.16 ID:hGrR3Csk
間違ってないだろ
756デフォルトの名無しさん:2014/05/29(木) 18:01:31.15 ID:zblOCN9G
委譲ってサンプルソースを見るとポインタで生成していることが多く
ポインタで生成するのがデフォルトみたいになってるけど
なんで?
757デフォルトの名無しさん:2014/05/29(木) 18:43:09.94 ID:Y0tEgaNB
>>751
> "初回"例外はほぼ無条件で無視していい
> 本来デバッガが内部で使うもの

見たこと無いんだが
リファレンスに書いてあったか
マイクロソフトに問い合わせた結果の回答なんだよね?
758デフォルトの名無しさん:2014/05/29(木) 18:53:49.00 ID:ZPfW7Hu7
知らない自慢するなよ。w
http://support.microsoft.com/kb/105675/en-us
759デフォルトの名無しさん:2014/05/29(木) 18:54:12.86 ID:LH+spMek
>>756
そんなのサンプル書いた人に聞けよ
動的に確報仕様がしまいがクラスの設計によるだろう
760デフォルトの名無しさん:2014/05/29(木) 18:57:41.79 ID:JqaV6xZZ
「ポインタで生成」

なにこの独自用語。
761デフォルトの名無しさん:2014/05/29(木) 21:06:59.95 ID:IyKn3G/T
「new でインスタンスを生成してそのポインタを持つ」って普通に脳内変換していいものか...
762デフォルトの名無しさん:2014/05/29(木) 22:10:09.23 ID:jVNi8UA/
その程度のコストなんてループで数百万回ぐらい回さないと
わからない程度の差じゃね。
763デフォルトの名無しさん:2014/05/30(金) 00:58:44.24 ID:Q2xcSNdn
>>761
せめてポインタで所持とか言ってほしいよなw
764デフォルトの名無しさん:2014/05/30(金) 01:05:23.96 ID:+R4m9kU7
newのコストが数百万回ループさせないとわからないなんて
相当なにぶちんさんですね
765デフォルトの名無しさん:2014/05/30(金) 02:16:30.55 ID:cMzaBeH6
>>758
もしかして、first chance exception を "初回"例外 だと思ってどや顔してるとか言う美味しいネタじゃないよな
ちょっと詳しく説明して
766746:2014/05/30(金) 03:44:57.58 ID:iU8Ve7Yv
>>749
表現が違うだけで一緒じゃないの‥
委譲でかけて派生でかけないことってあるのかな?
767デフォルトの名無しさん:2014/05/30(金) 06:55:21.16 ID:+RdCclji
>>765
知らない自慢するなよ。w
first chance exceptionを知っていれば、「"初回"例外」が脳内で自動的に
first chance exceptionの事だなと変換される。
実際にMSが日本語表記として「"初回"例外」を使ってるのか憶えてないが、
ヒントは与えてやったんだから、MSがfirst chance exceptionを日本語でど
のように表示してるかくらい自分で調べろ。
いくらボンクラなお前でもそのくらい調べられるだろ。www
768デフォルトの名無しさん:2014/05/30(金) 06:58:55.56 ID:lau1mzVI
ん?ハンターチャンス?
769デフォルトの名無しさん:2014/05/30(金) 07:00:30.34 ID:lau1mzVI
柳生博出てきそうな
770デフォルトの名無しさん:2014/05/30(金) 07:02:30.63 ID:lau1mzVI
catchしたらきっと賞金もらえるんね
771デフォルトの名無しさん:2014/05/30(金) 07:23:05.62 ID:cMzaBeH6
772デフォルトの名無しさん:2014/05/30(金) 07:42:26.52 ID:3csx3F2N
>>765
ん?MSDNは First-chance Exception を初回例外と訳しているぞ。
それとも「"初回"例外」は別物なのかな。
773デフォルトの名無しさん:2014/05/30(金) 07:59:58.22 ID:+RdCclji
>>771
アホもここに極まれりという感があるな。wwwww

そのページはmathworks(もちろんMSとは何の関係もないサードパーティ)の
サポートがfirst-chance exceptionをファーストチャンス例外と訳しただけだろ。wwwww
774デフォルトの名無しさん:2014/05/30(金) 08:00:52.03 ID:VP4sRqxG
>>772
url please.
775デフォルトの名無しさん:2014/05/30(金) 08:02:50.02 ID:VP4sRqxG
>>773
訳じゃなく説明されてる動作見ろよ。
ひょっとして、 Visual Studio 使ったことないのか?
776 ◆QZaw55cn4c :2014/05/30(金) 08:06:39.26 ID:iU8Ve7Yv
>>773
MATLAB 以外に機械翻訳もやっていたのか?
777デフォルトの名無しさん:2014/05/30(金) 08:10:18.94 ID:OXzZPNgF
その訳によると
例外スローの時点で無条件にデバッガが止まるのがファーストチャンスなのかな。
>>757とは内容が違うようだけど、
>>757はSEHの文脈での説明で
>>771はプログラミング言語機能の例外と言う理解でok?
778デフォルトの名無しさん:2014/05/30(金) 08:13:30.87 ID:+RdCclji
>>775
必死に話題そらそうとしてるが、アホすぎ wwwww
ID:cMzaBeH6は訳を問題にしている

>>765
> もしかして、first chance exception を "初回"例外 だと思ってどや顔してるとか言う美味しいネタじゃないよな


動作に関して話したいなら、まず、ごめんなさいしろよ。wwwww
779デフォルトの名無しさん:2014/05/30(金) 08:13:59.81 ID:3csx3F2N
>>774
MSDNは翻訳できるから自分で見てみなよ。
初回例外かFirst-chance exceptionで検索して出てきたページどれでもいいから。

あと、ID:VP4sRqxGが考える「正解」も書いてみ。
780デフォルトの名無しさん:2014/05/30(金) 08:14:12.01 ID:rGUCVpra
>771はプログラミング言語機能の例外と言う理解でok?
どこをどう読んだらそういう解釈になるんだ
781デフォルトの名無しさん:2014/05/30(金) 08:14:28.41 ID:C3n2OchW
こういう例外(゚∀゚)的なMSDN記事は大抵機械翻訳で当該ページの公式機械翻訳版では「初回例外」になってるね(゚∀゚)
両者の煽り合いの内容はまったくわからんけど笑
782デフォルトの名無しさん:2014/05/30(金) 09:00:38.78 ID:VP4sRqxG
>>777
first / second chance exception は、デバッガが例外に介入する機会 (=chance) のこと
Visual Studio の例外設定にある、スローされるときとユーザーにハンドルされていないときに対応する
ちなみに >>747 が書いてる "初回の例外" は、例えば CException をそれなりに使ってる状況で Access violation を見落とさないように、各例外毎に一回目だけデバッガが表示してるやつだよ

>>781
どこの url 見てる?
機械翻訳では、最初と2番目てなってるよ
http://support.microsoft.com/kb/105675/ja

>>778
お前はアホか、ID:cMzaBeH6 も >>775 も俺だよ
783デフォルトの名無しさん:2014/05/30(金) 09:20:17.89 ID:3csx3F2N
そりゃ「first」という単語が機械翻訳で「最初」になってるだけ。
同じページで「first-chance exception」はちゃんと「初回例外」になってる。
784デフォルトの名無しさん:2014/05/30(金) 09:38:05.47 ID:DKb03301
 
785デフォルトの名無しさん:2014/05/30(金) 09:39:06.37 ID:DKb03301
host = gethostbyname("localhost"); <- ここで "初回の例外が発生しました: 0x000006BA"

試しにやってみたら同じ結果だな @VS2010
これでは回避のしようがない
ライブラリ仕様、もしくは バグだろな。
786デフォルトの名無しさん:2014/05/30(金) 10:34:21.70 ID:VP4sRqxG
>>783
初回でページ内検索してもヒットしないけど?
まあ、そもそも翻訳でどうのこうの言ってる訳じゃないから、どうでもいいけど。
787デフォルトの名無しさん:2014/05/30(金) 12:46:50.42 ID:nt5qjQEB
c_str()を実行するのに渡す文字リテラルが壊れている可能性がある時、
それを回避する方法はあるのでしょうか

どうも壊れているデータでxstringのアクセス違反というエラーが起こっているようなのですが
回避する方法がわかりません
788デフォルトの名無しさん:2014/05/30(金) 12:56:04.09 ID:BLHBUUhB
そもそも壊さない
789デフォルトの名無しさん:2014/05/30(金) 13:03:58.91 ID:+RdCclji
>>786
> まあ、そもそも翻訳でどうのこうの言ってる訳じゃないから、どうでもいいけど。
認知症がだいぶ進行しているようだな。

>>765
> もしかして、first chance exception を "初回"例外 だと思ってどや顔してるとか言う美味しいネタじゃないよな
790デフォルトの名無しさん:2014/05/30(金) 13:24:48.21 ID:Nfgt5mCj
双方が別の第三者の発言を相手が自分に言ったものと誤解してこじれてるように見える
続けるならもっと相手の言い分も聞いて論点を明確にしたら
791デフォルトの名無しさん:2014/05/30(金) 13:35:35.19 ID:nt5qjQEB
>>788
具体的にいうとEPGのデータなんですが
EPGの取得に失敗するとゴミデータが入るようなのです
792デフォルトの名無しさん:2014/05/30(金) 13:40:36.62 ID:nt5qjQEB
もしかしてtryかな
793デフォルトの名無しさん:2014/05/30(金) 13:51:18.69 ID:qPHz/NzH
こういう他人とやりとりのする気がない奴の質問は
ノイズでしかないのでチラシの裏にでも書いてもらえると皆幸せになれる
794デフォルトの名無しさん:2014/05/30(金) 14:15:51.92 ID:+RdCclji
最初から論点は「"初回"例外」が「first chance exception」であるか否かだ
そしてオレの主張は「"初回"例外」は「first chance exception」の事であり
それを知らないID:cMzaBeH6はボンクラ
以上

>>765
> もしかして、first chance exception を "初回"例外 だと思ってどや顔してるとか言う美味しいネタじゃないよな
795787:2014/05/30(金) 14:34:22.85 ID:nt5qjQEB
さーせん。ヌルポインタでした。
796デフォルトの名無しさん:2014/05/30(金) 15:28:17.39 ID:VP4sRqxG
>>794
お前の最初の主張は

>>751
> "初回"例外はほぼ無条件で無視していい
> 本来デバッガが内部で使うもの

だろ。
ごまかしてないで、はよソース持ってこいよ (w
797デフォルトの名無しさん:2014/05/30(金) 16:15:37.56 ID:iquy0b+J
とりあえず>>771の時点ですれ違っていて
>>775がそれを説明しようとしたけど
>>778が勘違いしたままなのはわかった
798デフォルトの名無しさん:2014/05/30(金) 16:26:14.74 ID:iquy0b+J
>>796
>>751の主張の根拠は>>758のこれだろう
t is not desirable to fail an entire operation just because〜
However, if the application is being debugged, the debugger sees all exceptions
799デフォルトの名無しさん:2014/05/30(金) 16:38:12.81 ID:iquy0b+J
あ、それに対しての反論が>>782なのか。
ようやく理解した
800デフォルトの名無しさん:2014/05/30(金) 17:01:06.14 ID:9ztPnSR9
委譲ってサンプルソースを見ると
new でインスタンスを生成してそのポインタを持つことが多く
それが生成するのがデフォルトみたいになってるけど
なんで?
801デフォルトの名無しさん:2014/05/30(金) 17:12:51.86 ID:QfMvD+UJ
>>800
ポンタじゃなかったら具象クラスが固定になるからつまらん
802デフォルトの名無しさん:2014/05/30(金) 17:43:38.28 ID:qTWaNykQ
うんこ
803デフォルトの名無しさん:2014/05/30(金) 17:53:51.01 ID:+RdCclji
>>796
>>751はオレじゃないもん。w
IDも違うでしょ。 w

オレが参戦したのは
>>752(ID:ZPfW7Hu7)から

一方お前がfirst-chance exceptionを知らなかったのは明白

> もしかして、first chance exception を "初回"例外 だと思ってどや顔してるとか言う美味しいネタじゃないよな
> もしかして、first chance exception を "初回"例外 だと思ってどや顔してるとか言う美味しいネタじゃないよな
> もしかして、first chance exception を "初回"例外 だと思ってどや顔してるとか言う美味しいネタじゃないよな
804デフォルトの名無しさん:2014/05/30(金) 18:08:57.47 ID:ZEJ00XNR
first chance exceptionをぐぐった奴は多いはず。俺だってそうさ
ファーストチャンス例外はファーストチャンス例外であって
ちゃんとした訳し方なんてないんじゃね?
805デフォルトの名無しさん:2014/05/30(金) 18:15:11.24 ID:VP4sRqxG
>>803
途中から参戦して意味のない url 貼って、揚げ足とりで必死とか、不憫すぎる (w
806デフォルトの名無しさん:2014/05/30(金) 18:36:25.56 ID:jzlpRU1S
ID:VP4sRqxG みっともないぞ
807デフォルトの名無しさん:2014/05/30(金) 18:39:39.24 ID:JEt/qQLU
>>803
落ち着け。そして>>782を100回読み直せ
反証ができるようになったら出直せ
808デフォルトの名無しさん:2014/05/30(金) 18:48:10.22 ID:cMzaBeH6
>>807
ID:+RdCclji にそんな気も能力もないでしょ
みっともないとかわざわざ参戦してるやつも似たり寄ったりだろうし w
809デフォルトの名無しさん:2014/05/30(金) 18:59:30.21 ID:+RdCclji
>>807
楽勝で論破できるぞ。w
ID:VP4sRqxGが"初回"例外を知らずに知ったかぶりした事をごめんなさいしたら、教えてやるよ。

> もしかして、first chance exception を "初回"例外 だと思ってどや顔してるとか言う美味しいネタじゃないよな
810デフォルトの名無しさん:2014/05/30(金) 19:02:47.56 ID:lau1mzVI
トラベルチャンス来る?
811デフォルトの名無しさん:2014/05/30(金) 19:31:34.64 ID:Nfgt5mCj
他人のやり取りも勉強になるからぜひ論破してほしい
812さて、どんな説明するんだろう、ワクワク w:2014/05/30(金) 19:51:31.30 ID:ueFWRCyi
>>809
知ったかぶりしてごめんなさい
813VP4sRqxG:2014/05/30(金) 20:33:48.17 ID:chDR2v8R
>>809
知ったかぶりしてごめんなさい
first chance=最初の例外=スローされたとき≠初回例外だとおもっとりました
814デフォルトの名無しさん:2014/05/30(金) 21:40:58.77 ID:+RdCclji
ID:VP4sRqxG, ID:cMzaBeH6は逃げたか?
815デフォルトの名無しさん:2014/05/30(金) 21:47:20.28 ID:cMzaBeH6
>>809
"初回"例外を知らずに知ったかぶりした事をごめんなさい
816デフォルトの名無しさん:2014/05/30(金) 21:53:55.92 ID:rhi8CgqP
wktkな展開
817デフォルトの名無しさん:2014/05/30(金) 22:23:26.30 ID:v3FE9BN+
C++ではないが、Objective-CではナントカDeligateって名前のクラスが多数用意されているが、多重継承の一つとして使うように推奨されてる、てゆか多くのサンプルコードがそうなってる
818デフォルトの名無しさん:2014/05/30(金) 22:25:40.71 ID:CBG7ebZv
>>809
"初回"例外を知らずに知ったかぶりした事をごめんなさい
819デフォルトの名無しさん:2014/05/30(金) 22:25:59.11 ID:+RdCclji
よろしい。説明してやろう。
> first / second chance exception は、デバッガが例外に介入する機会 (=chance) のこと
違うよ。知ったかぶりのバカ。

http://support.microsoft.com/kb/105675/en-us
| This is the distinction between the first and second chance exception:
| the debugger gets the first chance to see the exception (hence the name).
(hence the name) それがこの名前の由来です
(hence the name) それがこの名前の由来です
(hence the name) それがこの名前の由来です
「デバッガが例外に介入する機会」の事なんかじゃない。
>>747が書いている"初回の例外"はhttp://support.microsoft.com/kb/105675/en-usの
first chance exceptionに他ならない。
デバッグ中のプログラムで例外が発生したときに、ハンドラの検索前にデ
バッガに通知される例外を、MSはfirst chance exceptionと呼んでいる。

http://msdn.microsoft.com/en-us/library/dd997368(v=vs.110).aspx
では知ったかぶりが屁理屈捏ねないように
How to: Receive First-Chance Exception Notifications
と"-"で接続している。
820デフォルトの名無しさん:2014/05/30(金) 22:27:07.23 ID:UrKX5QhR
>>817
> Deligate
821デフォルトの名無しさん:2014/05/30(金) 22:27:08.54 ID:+RdCclji
おまけ

> 各例外毎に一回目だけデバッガが表示してるやつだよ
これも意味不明 各例外毎に一回目だけ?

int (*p)() = reinterpret_cast<int (*)()>(::VirtualAlloc(0, 4096, MEM_RESERVE, PAGE_NOACCESS));
for (int i = 0; i < 5; i++) {
try{
p();
} catch(...) {
std::cerr << i << " oops!" << std::endl;
}
}
p()の呼び出しで二回目以降も表示されるが。 どんな言い訳するんだ? www
822デフォルトの名無しさん:2014/05/30(金) 22:28:41.88 ID:lau1mzVI
でれげーとじゃなくて?
823デフォルトの名無しさん:2014/05/30(金) 22:30:10.17 ID:+RdCclji
>>805
意味のない url .... 英語読めないのか バカ不憫すぎ www
824デフォルトの名無しさん:2014/05/30(金) 23:55:52.45 ID:v3FE9BN+
ああ、Delegateね
825デフォルトの名無しさん:2014/05/31(土) 00:00:42.96 ID:zlcjKUg4
で、delegateクラスと称してpure virtualなメソッドを宣言してるやつとかは、そのままインスタンス作れないし多重継承にするしかないわけで。
勿論派生させて実装解決すればインスタンス作れるからその上で所有関係築くことはできるけど、それじゃ二度手間だし。
826デフォルトの名無しさん:2014/05/31(土) 08:15:07.19 ID:eTZKpJt5
アクセッサーってgetメンバー変数名 setメンバー変数名のペアーじゃないですか?
メソッドが参照を返す場合はsetがいらないのでget〜という名前は紛らわしくて使えないので
どんな名前にしますか?
あとクラスの変数以外の何かを得たり与えたりするときはsetとgetを使わないでどんな名前にしたらいいですか?
827デフォルトの名無しさん:2014/05/31(土) 08:51:19.96 ID:eTy5fHBW
>>756
>>746 を書き直すと http://codepad.org/dAUPw92x のようなことか?
Java 流だね、というか私も最初、>>744 ではこっちを念頭においていた
828デフォルトの名無しさん:2014/05/31(土) 09:13:37.37 ID:TgtQYY5c
>>807
ID:VP4sRqxG, ID:cMzaBeH6は逃亡したようだけど、ボンクラに騙されてたキミは納得できたかな w

>>754
> どや顔でバカさらしてどうすんのよ (w

近年まれにみる見事なブーメラン www
829807:2014/05/31(土) 09:52:35.09 ID:8HHVfD5H
>>828
勘違いしていたらすまないが
ID:VP4sRqxG, ID:cMzaBeH6の言い分は
 first-chance exception
  =最初の例外
  スロー時にデバッガが反応するやつ
 (英語不明)
  =初回例外=初回の例外、
   何度も出るのを抑制するやつ
という内容だと思うのだが
>>819は前者の内容を繰り返してるだけでそ回答になってないよね?
830デフォルトの名無しさん:2014/05/31(土) 10:03:36.67 ID:Udt15ViO
>>826
非const参照を返す場合でも、参照を取得していると考えればgetでもいい気がするけどねぇ。
メンバーかどうかとget/setをつけるかも直接関係ないと思う。
つまり、getStatus()と言うメンバー関数だからと言ってstatusというメンバーを持っていなければならない法はない。
831デフォルトの名無しさん:2014/05/31(土) 10:44:57.51 ID:bHlPhUcR
非constでメンバの参照を返すケースってどんな場合よ
832デフォルトの名無しさん:2014/05/31(土) 11:11:09.66 ID:Udt15ViO
例えばvectorを持っているクラスがvectorの非const参照を返すとか?
833デフォルトの名無しさん:2014/05/31(土) 11:54:49.81 ID:MRsk+C6x
>>826
メンバへのアクセスというのならペアというのは勘違い。それじゃあ隠蔽してないのと変わらない。
個人的には、setter/getterなんてのはjavaの悪習慣とかフレームワークの都合上しかたなく存在するものだと思ってる。

cなら値を設定した結果なにが変わるのか、何の値を取り出せるのか、そこがわかるように関数作るの方がいいと思う。

一つのメンバー変数に値(例えば状態)の設定する関数を、変更後の状態別につくるとかね。
834デフォルトの名無しさん:2014/05/31(土) 12:15:25.64 ID:bHlPhUcR
まあアクセサだらけのムカデみたいなクラスつくることは滅多にないな
835デフォルトの名無しさん:2014/05/31(土) 14:57:44.74 ID:eTy5fHBW
>>833
>隠蔽してないのと変わらない。
すくなくとも、そのメンバをアクセスするトリガーを捕まえることができるのは割合に好感が
836デフォルトの名無しさん:2014/05/31(土) 15:39:52.73 ID:sqhCd+N4
>>835
いや、そんなんは分かった上でないと>>833のレスはできないと思う。
俺もアクセッサっていう単語からして憎いほどだから。
C#のプロパティに至ってはOOPへの挑発だと思う。
アクセッサを「書くのがわずらわしい」言語のほうがまだ良心的。
837デフォルトの名無しさん:2014/05/31(土) 17:22:12.48 ID:Udt15ViO
アクセッサなんて設計できないバカの為の方便だからな。
838デフォルトの名無しさん:2014/05/31(土) 19:21:06.74 ID:Sm6lvQoM
GUIコンポーネントとその内容でクラスを分けたらアクセッサ使うんじゃ
後はリファクタリングの過程で一時的にとか
839デフォルトの名無しさん:2014/05/31(土) 20:56:00.05 ID:Njt0SmPI
>>828
まだ、醜態を晒すのか? ID:VP4sRqxG
840デフォルトの名無しさん:2014/05/31(土) 21:59:10.21 ID:qX1TzIdn
>>834
Yes
設計がおかしいか、隠蔽する必要がそもそもないかのどちらかだと思う。
841デフォルトの名無しさん:2014/06/01(日) 00:51:10.46 ID:EoOyig9q
あるクラス内のメソッドfunc1(), func2(), func3()内で、例えば
func1()には
if (param) { printf("(1) info %s\n", str); }
func2()には
if (param) { printf("(1) info %s\n", str); }
if (param) { printf("(2) info %s detail info \n", str); }
func3()には
if (param) { printf("(1) info %s\n", str); }
if (param) { printf("(2) info %s detail info \n", str); }
if (param) { printf("(3) info %s (hogehoge) \n", str); }
というように、ここ以外は全く同じコードを持つメソッド作成したいです。
このfuncメソッドのコード量をなるべく少なくしたいのですが
今は、func1,2,3を全てベタ書きしているのでコピペして増やしている状態です。
これをtemplateとか使って1種類のfuncにまとめられないでしょうか?
842デフォルトの名無しさん:2014/06/01(日) 00:54:33.09 ID:GpgCcsB8
>>841
それinlineすれば余裕で片付くんじゃね?
それ以前にコピペする必要がないような設計にしろよと
843デフォルトの名無しさん:2014/06/01(日) 00:56:35.31 ID:4IJ95sWa
そう、そこ以外の全く同じコードがひとつの関数になるべきでは?
844デフォルトの名無しさん:2014/06/01(日) 01:06:39.27 ID:EoOyig9q
そ、そうか…確かに
差分の部分を切り出して別メソッドにして
funcを一つの関数にして、内部の差分の部分をtemplate化する
みたいな方向で考えてみます
845デフォルトの名無しさん:2014/06/01(日) 06:33:18.84 ID:spp4D75s
>>837
設計できないバカのためにどうかご教授を
846デフォルトの名無しさん:2014/06/01(日) 06:41:41.51 ID:4LoFj885
837じゃないけど「パターン指向リファクタリング入門」なんていいんじゃね?
847デフォルトの名無しさん:2014/06/01(日) 09:48:35.50 ID:XllDfri3
バカはテンプレート禁止でお願いします
848デフォルトの名無しさん:2014/06/01(日) 10:05:45.91 ID:neQRhT7W
なんだと
849デフォルトの名無しさん:2014/06/01(日) 12:17:34.48 ID:b+F3mBIE
>>826
むしろメンバ変数以外の何かを得たり設定するのにget〜とset〜を使うべき。
その「何か」ってのはクラス利用者からみて意味のある性質であるべき。
クラス内部でその性質を表現するために複数の属性を管理しているかもしれないが、
それらを直接利用者にゆだねる必要はたいてい無いので、アクセッサのないクラスができる。
850片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/06/01(日) 18:03:20.15 ID:18AEnQgX
polymorphic, multiprecision number class for C++
https://github.com/katahiromz/PmpNumber

これ見てどう思いますか?
851デフォルトの名無しさん:2014/06/01(日) 20:06:42.25 ID:4LoFj885
>>850
有理数とか複素数はないの?
852デフォルトの名無しさん:2014/06/01(日) 22:43:06.92 ID:Hvjx7kIf
>>850
これ作ったやつはコミュ障だな
としか
853デフォルトの名無しさん:2014/06/01(日) 23:01:40.82 ID:b+F3mBIE
>>850
どこをどう見ればいいのか・・・?

...と思います。
854片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/06/01(日) 23:32:25.74 ID:CnlwSSTK
>>851 後で追加します
>>852 あえて必要最小限の記述にしてます
>>853 今は分からなくてもそのうちわかる
855デフォルトの名無しさん:2014/06/01(日) 23:59:05.20 ID:b+F3mBIE
>>854
いやそうじゃなくてもっと即物的な問題
どのファイルのどの部分を見ればいいの?
856片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/06/02(月) 00:03:05.42 ID:0yNOtv/b
上流設計に自信がないので、全体的な設計に間違いがないか確認して欲しかっただけです。
857デフォルトの名無しさん:2014/06/02(月) 02:25:11.22 ID:3GENWCzb
で、その上流設計の結果はどこに書いてあるんだ?
858デフォルトの名無しさん:2014/06/02(月) 17:24:16.20 ID:x/2q9lNt
ああ、自信のない上流設計は晒さずに
それを元に作ったソースコードだけ晒してるんだな。
やっぱお前はコミュ障
859デフォルトの名無しさん:2014/06/02(月) 21:02:33.77 ID:RzT6PUqB
このクラスはどういう時に使えばいいの?
860デフォルトの名無しさん:2014/06/02(月) 21:47:53.49 ID:U5oeCDld
目的も使い方も書いてないものは
単なる「コンパイルが通るだけのデータ」
情報としては何の価値もないゴミクズ
861デフォルトの名無しさん:2014/06/02(月) 23:01:50.71 ID:1qeMCdJk
http://cpplover.blogspot.jp/2010/03/variadic-template-parameter.html

ここにある
template <typename ... ReturnTypes, typename ... ParameterTypes >
void f( ReturnTypes (* ... t)( ParameterTypes... ) ) { }
の (* ... t) ...って、テンプレート引数の 「typename ... ReturnTypes」 に対応するものなの?

返り値をintに固定する場合はどうしたらいいの?
template <typename ... ParameterTypes >
void f( int (* ... t)( ParameterTypes... ) ) { }
とやるとコンパイルエラー出るし。
862デフォルトの名無しさん:2014/06/03(火) 00:11:41.15 ID:fikZMArP
>>861
取りあえずそれらしいコードをでっち上げてみた。
http://ideone.com/RUUX5n

(ParameterTypes...)はあくまで一つの関数ポインタが任意個の引数を取るという表現。
だからint(*...t)(Parametertypes...)において、tはパラメータパックにならない。
(この場合パラメータパックになっているのは関数ポインタが取る引数のほう)
863861:2014/06/03(火) 00:39:52.50 ID:f1zdN6e9
>>862
なるほど。
http://cpplover.blogspot.jp/2010/03/variadic-templates.html
の方も見てみたけど、variadic template って
「任意の型が任意の個数並んでいる」ことを表現するものであって、
「特定の型が個数だけ任意に並んでいる」ってことを直接表現できないんですね。

そういう制約をつけるためには個別の工夫が必要になる、と。
864デフォルトの名無しさん:2014/06/03(火) 01:22:30.03 ID:bPBG1TvN
おまえら 本当にオナニーがすきだな
variadic templatesのズリネタはもう飽きた
865デフォルトの名無しさん:2014/06/03(火) 01:25:43.79 ID:7s/1VrDm
飽きるほどオナヌーしてるのはお前だっていう
866デフォルトの名無しさん:2014/06/03(火) 17:31:03.08 ID:5uaiNwXc
クラス継承に関して質問があります。
Aという親クラスがあり、それをBという子クラスが継承していて
Cという孫クラスがBを継承している場合、Cのデストラクタが呼び出されると
継承しているクラスのデストラクタは呼び出されますか?

クラスが多重継承されていると親クラスのデストラクタが仮想デストラクタでないと
デストラクタが呼び出されないと言う事なんですが、GCCでコンパイルするときに
親クラスのデストラクタにvirtualをつけているとエラーが出ます。
867デフォルトの名無しさん:2014/06/03(火) 17:36:18.02 ID:bAxr9de0
呼び出されるけど、多重継承じゃないよねそれ
868デフォルトの名無しさん:2014/06/03(火) 17:37:17.80 ID:dvYq0Snj
メンバ変数増設するときはvirtualつけるのが普通なのでエラーが出るのかおかしい
869デフォルトの名無しさん:2014/06/03(火) 17:51:31.74 ID:yzccNZEQ
急に歌うよー
870デフォルトの名無しさん:2014/06/03(火) 19:41:15.30 ID:4OgbeXEt
なんのエラーだよ
ソース貼れよ
871デフォルトの名無しさん:2014/06/03(火) 19:47:44.73 ID:4OgbeXEt
>>866
エラーでねーよ
http://codepad.org/QxRpmyvM
872デフォルトの名無しさん:2014/06/03(火) 20:19:03.85 ID:03EWDfc7
>クラスが多重継承されていると親クラスのデストラクタが仮想デストラクタでないと

言語仕様を読まずに言うけど
あり得る気がする。
ただクロスキャストが必用な時だけの気もする
873デフォルトの名無しさん:2014/06/03(火) 20:31:37.39 ID:5uaiNwXc
ソースはこちら。
Avisynth.h-2.5.8.h
http://codepad.org/aDQ3KWVZ
test_filter.cpp
http://codepad.org/0mheycdK

コンパイラ
mingw-w64 32bit GCC 4.8.3

$ g++ -fsyntax-only test_filter.cpp
In file included from test_filter.cpp:2:0:
Avisynth.h-2.5.8.h:584:7: error: conflicting type attributes specified for 'virtual GenericVideoFilter::~GenericVideoFil
ter()'
 class GenericVideoFilter : public IClip {
     ^
Avisynth.h-2.5.8.h:436:19: error: overriding 'virtual IClip::~IClip()'
 virtual __stdcall ~IClip() {}
           ^
874デフォルトの名無しさん:2014/06/03(火) 20:35:42.72 ID:5uaiNwXc
>>873
In file included from test_filter.cpp:2:0:
すみません、これは間違いです。
1行目に#include <windows.h>があったんですが、不要だと気付いたので削除してます。
875デフォルトの名無しさん:2014/06/03(火) 20:37:03.59 ID:4OgbeXEt
ちょ、検証用の最小限ソースじゃねーのかよwww
876デフォルトの名無しさん:2014/06/03(火) 20:46:07.84 ID:4OgbeXEt
てかその__stdcall外せば?
877デフォルトの名無しさん:2014/06/03(火) 20:52:13.43 ID:5uaiNwXc
>>875
AviSynthのPluginサンプルのソースを参考に作ったやつです。
>>876
エラー出なくなった!!!
878デフォルトの名無しさん:2014/06/03(火) 20:58:47.03 ID:dvYq0Snj
基底がvirtualじゃないからそもそもアップキャストして使わない(new/deleteしない)クラスなんじゃね
879デフォルトの名無しさん:2014/06/03(火) 22:19:28.04 ID:Dn1LWQ2K
んなこたーない
880デフォルトの名無しさん:2014/06/03(火) 22:26:41.68 ID:EknACGZG
>>873はべからず集を詰め込んだ教材
881デフォルトの名無しさん:2014/06/04(水) 07:55:54.00 ID:UEKoDQ7D
継承するなら基底クラスのデストラクタをpublic+virtualかprotected+非virtualにするべし
アップキャストするなら前者、しないなら後者
882デフォルトの名無しさん:2014/06/04(水) 08:07:07.10 ID:vrLMGErW
というのが881の持論であった
883デフォルトの名無しさん:2014/06/04(水) 10:02:31.00 ID:1DioknP3
>>881
後者は基底が直接呼べなくなるべ
884デフォルトの名無しさん:2014/06/04(水) 10:07:32.54 ID:WvxPMFL3
前者は呼び出しコストがうんたら
アップキャストだけ禁止に出来るprotected継承とか無いのか
885デフォルトの名無しさん:2014/06/04(水) 10:50:08.56 ID:7LSCBxjN
class D : private B { public: using B::...; ... } でがんばれ。
886デフォルトの名無しさん:2014/06/04(水) 11:08:24.90 ID:JjkiX3zX
クラスのツリーみたいなので
AのコンストラクターがA(B * b ,C * c)のような宣言で
BのコンストラクターもCのコンストラクターもAと同じような宣言といたします。
このようなデザインはポインターの管理が大変で困るのでデザインを変えたいです。
このようなデザインにした理由はインタープリターで使えるという理由なんですけど、
インタープリターにできてデザインを変える方法教えてください。
887デフォルトの名無しさん:2014/06/04(水) 20:48:18.67 ID:NzWHXCRt
>理由はインタープリターで使える

コミュ障の>>886は無理
888デフォルトの名無しさん:2014/06/04(水) 21:45:43.95 ID:348c+vFV
>>886
コンストラクタの宣言だけで「このようなデザイン」と言われても何もわからないよ。
受け取ったものをどうしてるかによる。

あと「ポインターの管理」って何さ?
deleteすること?寿命管理?
889デフォルトの名無しさん:2014/06/04(水) 21:49:36.95 ID:X0w/Z5pg
>>886にはこちらの説明を受け入れる基礎知識も、
理解力も無いからああいう文章が書けるんであって、
これ以上関わっても人生の浪費。
890デフォルトの名無しさん:2014/06/05(木) 00:18:07.90 ID:UssweygK
右辺値参照があるからといっても
std::vectorやstd::listを関数の返り値にするのは良くないですよね?
891デフォルトの名無しさん:2014/06/05(木) 00:23:11.07 ID:4GnTqTpZ
なぜ?
892デフォルトの名無しさん:2014/06/05(木) 00:45:42.98 ID:UssweygK
デバッガで追ってみたら色々ごちゃごちゃやってるので遅そうだなーと思ってたのですが
実測してみたら参照渡しより値返しの方が倍ぐらい早かったです。意外だなァ。
893デフォルトの名無しさん:2014/06/05(木) 00:53:54.35 ID:sLCCXYjM
ちょっと前までは参照で受け取ったvectorをresizeして返すなんてやってたけど、
今じゃどんどんprvalueで返してるよ。
894デフォルトの名無しさん:2014/06/05(木) 03:50:09.73 ID:gtYJGWvk
>>892,893のコードはきっとこうに違いない
vector<kuso> f() {
 vector<kuso> p;
 return move(p);
}

vector<kuso> && f() {
 vector<kuso> p;
 return static_cast<vector<kuso>&&>(p);
}
895デフォルトの名無しさん:2014/06/05(木) 04:28:14.69 ID:R2jt3TWx
NRVO(C++03)=NRVO(C++11)
> NRVO失敗(C++11) ≒参照渡し
>>> NRVO失敗(C++03)

>>894みたいなことしなければ値返しの方が速くて当然
896デフォルトの名無しさん:2014/06/05(木) 05:15:47.62 ID:I2VjvGe/
キャッシュ乗りの違いかな?
897デフォルトの名無しさん:2014/06/05(木) 08:03:46.71 ID:LLYXa5KT
Aというダイアログで作ったスレッドとBというダイアログで停止させたり、再度開始させたりしたいのですが
そのようなことはできますか

具体的に言うとタイマーのスレッドがあって、オプション画面でそのタイマーの時間を変更して、
メインの画面で立てたスレッドにオプション画面を閉じた時に反映させたいのですが
898デフォルトの名無しさん:2014/06/05(木) 08:17:41.83 ID:U3NUfzHN
>>897
環境は?
899デフォルトの名無しさん:2014/06/05(木) 08:24:49.25 ID:LLYXa5KT
>>898
とりあえずC++のプログラム内でWINAPIでスレッドを立てていますが
ダイアログごとソースが分かれていますので
何処で何をしないといけないのかがわかりません
よろしくお願いします。
900デフォルトの名無しさん:2014/06/05(木) 08:32:42.46 ID:U3NUfzHN
>>899
ユーザーメッセージのハンドラーをAに登録
Bからそのメッセージを投げる
で当面動くかな
901デフォルトの名無しさん:2014/06/05(木) 08:40:49.60 ID:LLYXa5KT
>>900
ありがとうございます。
やってみます
902デフォルトの名無しさん:2014/06/05(木) 09:17:15.09 ID:bFFkHpFA
>タイマーのスレッドがあって

まずその残念な発想をやめるべき
903デフォルトの名無しさん:2014/06/05(木) 09:21:48.50 ID:LLYXa5KT
>>902
そもそもタイマーを作ったことがないのですが、
スレッドを使わないやり方が普通でしょうか
904デフォルトの名無しさん:2014/06/05(木) 10:43:37.36 ID:KmT0CCbN
タイマーっていうことばがまぎらわしいぞ。時計のこと?

タイマーは、たいていもうある。タイマーを設定したら、設定時間が経過したらハンドラが実行される。
そのハンドラの中で、タイマーを無効にしたり、また設定したりする
905デフォルトの名無しさん:2014/06/05(木) 10:45:50.49 ID:KmT0CCbN
タイマーは、OSに用意されていて、同時にタイマーを何個つかえるかという問題があったりする
906デフォルトの名無しさん:2014/06/05(木) 12:15:51.18 ID:LLYXa5KT
このようなスレッドですがだめでしょうか
UINT WINAPI timerThread(LPVOID param)
{
HANDLE hTimer = CreateWaitableTimer (NULL, TRUE, NULL);
while (1) {
LARGE_INTEGER li;
li.QuadPart = -10000000*60;
SetWaitableTimer (hTimer, &li, 0, NULL, NULL, FALSE);
WaitForSingleObject(hTimer, INFINITE); // 指定時間までここで待機
func();
Sleep(1000);
}
return TRUE;
}
907デフォルトの名無しさん:2014/06/05(木) 12:20:57.68 ID:CbdkWkFK
うわぁ……

まぁ、それはさておきWinAPIスレかMFCスレか環境依存スレに行けよ。
908デフォルトの名無しさん:2014/06/05(木) 12:27:17.22 ID:LLYXa5KT
特にWINAPIにこだわっているわけじゃなく、これしか見つけれなかったんですよね・・・orz
909デフォルトの名無しさん:2014/06/05(木) 12:33:07.13 ID:RBVRLbKx
その程度の精度でいいなら
画面のSetTimerではだめなの?
910デフォルトの名無しさん:2014/06/05(木) 12:45:39.69 ID:LLYXa5KT
>>909
実際のソースでは何時何分の情報から待機秒を計算して使っています。

SetTimerではそのようなことには使わないほうがよいというページを見ました。
911デフォルトの名無しさん:2014/06/05(木) 13:07:49.04 ID:hkOGLRHa
Web上のページは原則的に英語版MSDN以外は信用しちゃだめ
サンプルコードが載せてあって、実際に確認が取れるページはOK
912デフォルトの名無しさん:2014/06/05(木) 17:03:22.21 ID:mWEIu3wR
時刻を指定させるような厳密なタイマーならともかく
自分で待機時間を計算してるなら意味なくね?
913デフォルトの名無しさん:2014/06/05(木) 18:03:42.54 ID:uhGE5mRq
スレッドに無限ループでひたすら指定時間が来たかどうかのチェックのほうがいいのでしょうか
スレッドはsettimerでもいいのかもしれませんが
914デフォルトの名無しさん:2014/06/05(木) 18:25:22.47 ID:hkOGLRHa
>>913
>スレッドに無限ループでひたすら指定時間が来たかどうかのチェックのほうがいいのでしょうか
こういう事した人間のクズを三人頃したことがある
後悔はしていない
915デフォルトの名無しさん:2014/06/05(木) 18:26:55.24 ID:YxbGXJv1
>>913
タイマー用待機オブジェクトとキャンセル用のManualResetEventを作って
WaitForMultipleObjectする。
916デフォルトの名無しさん:2014/06/05(木) 18:33:04.99 ID:M285qaIr
>>915
ついでにWindowメッセージの到着を確認出来る
MsgWait の方を使えば完璧だな
:-p
917片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/06/05(木) 20:52:27.26 ID:q7fsT5OK
アンパンマン、新しい顔ができたよ!!!

多態多倍長数C++クラス PmpNumber
https://github.com/katahiromz/PmpNumber
918デフォルトの名無しさん:2014/06/05(木) 22:04:17.52 ID:sLCCXYjM
>>894
prvalueとxvalueを間違えてるような
919デフォルトの名無しさん:2014/06/06(金) 09:47:30.90 ID:y0bQ4ynG
C++のIteratorはhasNext()メソッドが無いじゃないっすか。
==演算子で何かと比べてhasNext()の代わりをいたすんですが、
比べるものが無いときはダミーの終端記号を用意するのですか?
その時はクラス変数で用意するのかend()メソッドで用意するのかどちらですか?
920デフォルトの名無しさん:2014/06/06(金) 10:38:14.79 ID:4c1lIHTZ
pos+1==end()
pos==end()-1 // bidirectional only
921デフォルトの名無しさん:2014/06/06(金) 10:38:55.23 ID:geRnNuVW
比べるものが無いときってどういうときっすか?
922デフォルトの名無しさん:2014/06/06(金) 10:45:30.82 ID:y0bQ4ynG
iteratorが1 2 3 4 5 6 と順番に数字をある番号まで出す。
この時iteratorが1を出すときはiterator内部で2という情報を持ちnを出すときはn+1を持つ
そしてiteratorはnを持つとき内部でnという情報を持つときに出力を終了する。
923デフォルトの名無しさん:2014/06/06(金) 10:50:22.92 ID:4c1lIHTZ
hasNext なんてメソッドあっても for ループで使えないし
break の用途位でしかつかえないしイラネーヨ
924デフォルトの名無しさん:2014/06/06(金) 10:56:56.76 ID:y0bQ4ynG
iteratorが1 2 3 4 5 6 と順番に数字をある番号まで出す。
この時iteratorが1を出すときはiterator内部で2という情報を持ちnを出すときはn+1を持つ
そしてiteratorはnを出すとき内部でnという情報を持つときに出力を終了する。
calss it{
int a
int b
...
operator*(){
if(a==b)

b=a
return ++a;

};
925デフォルトの名無しさん:2014/06/06(金) 10:58:35.60 ID:y0bQ4ynG
iteratorが1 2 3 4 5 6 と順番に数字をある番号まで出す。
この時iteratorが1を出すときはiterator内部で2という情報を持ちnを出すときはn+1を持つ
そしてiteratorはnを出すとき内部でnという情報を持つときに出力を終了する。
calss it{
int a
int b
...
operator*(){
if(a==b)return a;
if(条件)
b=a;
else
b=a+1;
return ++a;

};
926デフォルトの名無しさん:2014/06/06(金) 11:00:29.73 ID:geRnNuVW
なるほどわからん
927デフォルトの名無しさん:2014/06/06(金) 11:02:19.82 ID:4c1lIHTZ
なにが一体どうなんだ
928デフォルトの名無しさん:2014/06/06(金) 11:02:23.73 ID:y0bQ4ynG
iteratorが1 2 3 4 5 6 と順番に数字をある番号まで出す。
この時iteratorが1を出すときはiterator内部で2という情報を持ちnを出すときはn+1を持つ
そしてiteratorはnを出すとき内部でnという情報を持つときに出力を終了する。
calss it{
int a
int b
...
int operator*(){
if(a==b)
  return エラー;//これが実行されたら駄目
if(ある条件)
 b=a;
else
 b=a+1;
return ++a;

};
929デフォルトの名無しさん:2014/06/06(金) 11:06:46.34 ID:y0bQ4ynG
iteratorが1 2 3 4 5 6 と順番に数字をある番号まで出す。
この時iteratorが1を出すときはiterator内部で2という情報を持ちnを出すときはn+1を持つ
そしてiteratorはnを出すとき内部でnという情報を持つときに出力を終了する。
calss it{
int a
int b
...
int operator*(){
if(a==b)
  return エラー;//これが実行されたら駄目
if(ある条件)
 b=a;
else
 b=a+1;
return a;

operator ++(略){++a;}
};
930デフォルトの名無しさん:2014/06/06(金) 11:18:28.41 ID:4c1lIHTZ
わけがわからないw
931デフォルトの名無しさん:2014/06/06(金) 11:25:15.82 ID:y0bQ4ynG
iteratorが1 2 3 4 5 6 と順番に数字をある番号まで出す。
この時iteratorが1を出すときはiterator内部で2という情報を持ちnを出すときはn+1を持つ
そしてiteratorはnを出すとき内部でnという情報を持つときに出力を終了する。
calss it{
int a;
int b;
public:
it():a(1),b(2){}
bool hasNext(){if(a==b)return false;else return true;}//実装しない
int operator*(){
if(a==b)
  return エラー;//これが実行されたら駄目
if(ある条件)
 b=a;
else
 b=a+1;
return a;

void operator++(){++a;}
};
932デフォルトの名無しさん:2014/06/06(金) 11:37:55.25 ID:y0bQ4ynG
iteratorが1 2 3 4 5 6 と順番に数字をある番号まで出す。
この時iteratorが1を出すときはiterator内部で2という情報を持ちnを出すときはn+1を持つ
そしてiteratorはnを出すとき内部でnという情報を持つときに出力を終了する。
calss it{
int a;
int b;
public:
it():a(1),b(2){}
bool hasNext(){if(a==b)return false;else return true;}//実装しない
bool operator==(it& i){if(a==b)return false;else return true;}//実装するがiに入れるのが無駄
int operator*(){
if(a==b)
  return エラー;//これが実行されたら駄目
if(ある条件)
 b=a;
else
 b=a+1;
return a;

void operator++(){++a;}
};
933デフォルトの名無しさん:2014/06/06(金) 11:43:38.96 ID:y0bQ4ynG
iteratorが1 2 3 4 5 6 と順番に数字をある番号まで出す。
この時iteratorが1を出すときはiterator内部で2という情報を持ちnを出すときはn+1を持つ
そしてiteratorはnを出すとき内部でnという情報を持つときに出力を終了する。
calss it{
int a;
int b;
public:
it():a(1),b(2){}
bool hasNext(){if(a==b)return false;else return true;}//実装しない
bool operator==(it& i){if(a==b)return false;else return true;}//実装するがiに入れるのが無駄
int operator*(){
if(a==b)
  return エラー;//これが実行されたら駄目
if(ある条件)
 b+=a;
else
 b=a+2;
return a;

void operator++(){++a;}
};
934デフォルトの名無しさん
iteratorが1 2 3 4 5 6 と順番に数字をある番号まで出す。
この時iteratorが1を出すときはiterator内部で2という情報を持ちnを出すときはn+1を持つ
そしてiteratorはnを出すとき内部でnという情報を持つときに出力を終了する。
calss it{
int a;
int b;
public:
it():a(1),b(2){}
bool hasNext(){if(a==b)return false;else return true;}//実装しない
bool operator==(it& i){if(a==b)return false;else return true;}//実装するがiに入れるのが無駄
int operator*(){
if(a==b)
  return エラー;//これが実行されたら駄目
return a;

void operator++(){ある条件?++b:b;++a;}
};