1 名前:デフォルトの名無しさん [2007/07/26(木) 00:33:07 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 テンプレその他 >>2-15 付近参照 前スレ class C++相談室lt;part56gt; pc11.2ch.net/test/read.cgi/tech/1170343752/l50
175 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 00:53:06 ] テラBCB
176 名前:174 mailto:sage [2007/08/02(木) 00:57:40 ] 書き込みが途中までしか出来てませんでした。 ↓続き 関連する項目をググって、上記ソースを見つけたのは良いのですが、 得た値"Value"をstrcpy(a,b)のbで使おうとすると、 AnsiString型からキャストできず、エラーとなります。 AnsiString型をキャストすること自体がよろしくないようなのですが、 キャストか、他に良い方法がありましたら教えてください。 長文すみません。よろしくお願いします
177 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 01:01:43 ] strcpy(dst, AnsiString("あひゃ").c_str());
178 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 01:13:55 ] >>177 は Value.c_str()でやれということ
179 名前:174 mailto:sage [2007/08/02(木) 07:30:49 ] >>177 =>>178 さん どうもありがとうございます。 助かります。
180 名前:デフォルトの名無しさん [2007/08/02(木) 22:26:11 ] プログラム中から現在のCPUのクロック数を測定したいのですが どうすればいいでしょうか?
181 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:29:12 ] >>180 Win32APIのQueryPerformanceFrequencyは?
182 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:32:00 ] あれはかなりいい しかしモバイル用CPUとか動的にクロックが変化するCPUだとちょっと困る
183 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:42:28 ] すいません>>182 の理由により別の方法をおねがします もしかして不可能?
184 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:45:00 ] 条件があったのなら初めに言えよ
185 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:46:46 ] cpuid命令を呼ぶ レジスタに信用なら無いモデルナンバーが返って来る メーカーの資料と照らし合わせる 周波数を知る
186 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:51:17 ] CPUとは違う固定周波もってるハードに割り込みかけてもらうぐらいしか思いつかん……
187 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:56:08 ] >現在のCPUのクロック数を測定 だから>>181 でFA
188 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 23:08:53 ] >>185 ああ、その方法もありますね。しんどいけど。 どこかに cpuid --> cpu clock 変換表みたいなのありませんか? クロック自体はrdtscで読めるんですが、 最近のCPUは省電力モードとかで クロック自体が落ちてることもあって 正確なクロックが取得できないんです
189 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 23:15:32 ] CPU毎の定格周波数が知りたかったのか?
190 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 23:24:10 ] CPU に意図的に負荷かけてから測定するとか。
191 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 23:40:09 ] asmでおk
192 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 16:33:06 ] 可変長のメンバ配列変数は C99 で規格合致になったけど、 C++ だと 9.2p8 を見る限り対応されてなさそうな雰囲気を感じる。 これは、非静的メンバ配列変数のサイズは必ず指定する必要があるという記述だから ここだけじゃ実際のところはっきりとは分からんけど。 でも、次期 C++ ドラフトを見るとこの記述が削られてる。 これは C99 と同様に可変長のメンバ配列変数に対応された現れだと見ているけど、 そのことが書いてある箇所が見つからない。 C++ での可変長のメンバ配列変数への対応具合の状況はどんな感じなんじゃろか。
193 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 20:55:47 ] 可変長配列がないならvector使えばいいじゃない(マリー
194 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 21:23:30 ] それなら C でも malloc 使えるしー。 でも、本気でそれでも問題ないと思うんだよな。 正直可変長メンバってどのくらい意味があるのか分かんないな。 Windows API とか可変長メンバを要求するところがあるから しゃーなしで使わんといかんこともあるんだが。
195 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 21:33:07 ] ポインタ使うかわりに可変長メンバ使うとメモリ上のレイアウトがフラットに なるから、そのままファイルに読み書きしたりできて便利な場合もあるでそ
196 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:04:00 ] stlのアロケータってrealloc操作がないのな。 vectorやstringのサイズ増加時にコピーが走りまくって参った。
197 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:16:19 ] reserveとかあるだろ そういうハナシじゃない?
198 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:19:34 ] ふつうdeque
199 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:25:23 ] >>195 書き込みは一発だけど、 読み込む時は一旦サイズを読み出さないといかんのだよな。 状況によってサイズが分かる場合もあるけどさ。 そこまでの利点には思えんのよなあ。 昔だとその僅かな差も重要だったんだろうか。
200 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:27:52 ] >>196 <cstdlib>のreallocも、その場で拡張できなければ、 新しい領域を確保して、そこへ元の記憶域の内容をコピーすることになっている。 クラスインスタンス相手にコピーコンストラクタを使わず複写なんて やるわけには行かないから、アロケータにrealloc相当の操作がないのも妥当な判断。 仮にやるとしたら、その場で拡張できるときだけ成功するrealloc操作 なんてことになるんだろうな。
201 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:33:47 ] >>199 malloc()/free()一発で確保・解放できるのも「Cでは」便利 で、特にデメリットも無いわけで まあ可変長に出来るのは最後のメンバだけ、という制限があるけどな ま、基本的に言語サポートが貧弱なCで特に生きるテクニックという気がする
202 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:35:49 ] 記憶域の内容がコピーされても、 その後にちゃんとコピーコンストラクタを placement new で呼べば一応正常に動作する。 問題は二度手間になることと、 realloc による管理は C++ っぽくないってところだな。
203 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:36:31 ] PODのときはrealloc or memcpyするぐらいの配慮が欲しかったなあ パフォーマンスに関わるんで結局手書きしちゃったよ 無駄にT()でfillするし・・・
204 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:37:30 ] >>201 どっちゃにしろ動的に確保する場合は 確かに一発で済むから便利か。なるほど。
205 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:40:24 ] でもまあバッファを拡大するときも、必要な量ぎりぎりではなく、 例えば倍々に増やしていったりする実装の存在なんかを考えれば、 やっぱりコンテナがrealloc相当のことをやっているんだよなと思う。
206 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:42:15 ] なんでC++にnew/deleteがあってrealloc()相当物が無いのかってのは Stroustrupが説明してた気がするが、忘れた
207 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:45:50 ] placement new でコピーコンストラクタ使ってオブジェクト作ってるよ。
208 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:49:31 ] Win32 APIのVirtual Allocみたいなの使ってアドレス空間だけ予約しとけ
209 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:02:59 ] シグナルって何に使えばいいの? 中で特別な関数以外の関数呼んだら未定義とか規格に書いてるんだけど。
210 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:04:27 ] ぶっちゃけsignalがCの標準に含まれているのはどうかと思う
211 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:04:59 ] マジ?あの欠陥品が?
212 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:05:32 ] >>209 Unixの規格を読むんだ
213 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:09:07 ] Posix的にはsignal()は推奨されないでしょ sigaction()を使うべき Windowsのコンパイラが提供するsignal()は、規格を満たすためだけの紛い物で 何の役にも立たない つまりsignal()なんて要らない子
214 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:10:34 ] いやシグナルという仕組み自体が正直勘弁だ
215 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:11:28 ] まあスレッド登場前の化石だよな
216 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:14:57 ] signal handlerからlongjmpがunixの作法ですが何か?
217 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:15:53 ] おk。大体分かった。
218 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:17:24 ] それが今となっては最悪の作法だよねって話でしょ スレッドと相性が非常に悪いし それでなくとも シグナルハンドラが再インストールされるかどうかとか システムコールが再送されるかどうかとか シグナルハンドラ内であれをやってよいこれはよくないとか バッドノウハウのすくつやん
219 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 02:23:03 ] write一つとっても、linux/*bsd/solaris/hp(dec)でそれぞれ挙動が違うからねえ posixもM$がサーバ戦略に本腰いれて慌てて始めたもんだしなあ
220 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 03:22:10 ] set_terminate ってどういう場合に使う? main で全ての例外補足してから異常終了した方が ローカル変数のデストラクタが呼ばれていいと思うんだけど。
221 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 03:24:59 ] そういうまともな例外処理が出来ないときのためにあるのでは 例外処理中に例外が出たとか
222 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 03:27:03 ] >>220 2行目以降の意味がわからん。 set_terminate() 関係ないだろ。
223 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 03:36:23 ] >>221 ああ、二重例外に対応する場合か。なるほど。
224 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 12:41:24 ] VS2005 MFCなんだけど、アクセスバイオレーションの例外処理を 捕らえたいんだけど、 try{} catch( ... ){} この構文では捕えられないんだけど、どうしたらいい?
225 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 12:44:09 ] アクセスバイオレーションて単純にソフトウェアのバグじゃないか?w
226 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 12:54:51 ] /EHaとか/EHcがらみじゃないの? でもデフォルトから変更した場合、 ミドルウェアとか依存するライブラリ絡みの整合性が心配だな。
227 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 15:14:37 ] ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdndeepc/htm/deep060399.asp まあC++の範疇じゃないな。
228 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 06:55:48 ] 構造化例外で捕まえた方が良いと思うヨ。
229 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 18:19:11 ] _set_se_translatorという手もある。 いずれにせよVC++くらいしか使えるものがないというのに変わりはないけどな。
230 名前:デフォルトの名無しさん [2007/08/06(月) 21:25:46 ] スレ違いだったらすいません。 アプリ開発の依頼スレが見つからなかったのでこちらに書かせて頂きました。 当方所有のウェブアプリケーションソフト (以前プログラマに依頼して作ってもらったものですが今は連絡が取れません) がURL先の変更?で突然使えなくなってしまいました。 そこで、緊急で本日中に改変が出来そうな方是非お願いできないでしょうか? 当方、全くの知識不足で言語が C++ということ以外分かりません。 ソースファイルは持っております。料金は2万円でお願いします! seishinkeiki@hotmail.co.jp
231 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:29:58 ] マルチはよくないな
232 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:47:57 ] やすっ
233 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:11:47 ] >>230 ソースがあるならソースを晒せよ。ロハでできるぞ。 ソースを晒せないから有料でということなら、2万円なんて人を見下したようなことをするもんじゃない。
234 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 06:33:04 ] void foo(char *p, size_t len) { }
235 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 06:34:28 ] すみません途中で送信してしまいました。 void foo(char *p, size_t len) { // ここでpとlenからistreamを作りたい } 実際には、basic_istreamの派生クラスを作るしかないのでしょうか?
236 名前:235 mailto:sage [2007/08/07(火) 06:44:00 ] 最初は、std::istringstreamを使って実装していたのですが、バイナリを扱う必要があるので、見送りました。
237 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 07:39:56 ] 俺判定 ↓エスパー1級
238 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 07:48:18 ] >>236 ファイルストリーム以外でバイナリとテキストの問題なんて起こらないだろ? istringstream でいいと思うよ。
239 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 07:50:42 ] >>236 なんでバイナリを扱う必要があったら istringstream を見送るの?
240 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 09:01:36 ] stringという名前が付いてるからバイナリは扱えないと思っているんだろうな
241 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 20:13:23 ] 義務教育もしっかり受けてるのに x = x +1 が疑問でもなんでもない俺は負け組
242 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 20:15:25 ] 柔軟な思考は大事 固定観念はよくない
243 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 21:16:13 ] もう疑問を持ったかどうかすら覚えてないわ
244 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 21:57:28 ] >>241 x = x * x + Cならマンデルブロ集合なんだけどね。
245 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 10:46:54 ] >>241 むしろそのへんの切り替えが高速にできない子は算数のできない子
246 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 19:51:16 ] リアル演算子オーバーロードだよな。
247 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 19:59:43 ] 要は「今まで習った常識・ルール」に囚われてしまっていて、 新しいルール、新しい前提の上でのゲームには一歩も踏み出せないってことだからな その程度の頭の柔軟性が無いのでは算数やプログラミングに限らず 何やってもだめ
248 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 09:40:31 ] 何でも受け入れるのもあれだけどな。 そこに疑問を持ち、考察し、納得する、というプロセスをだな・・・
249 名前:身の程知らず mailto:sage [2007/08/10(金) 12:01:33 ] C++の文法に疑問を持つのは、よほどの天才か身の程知らずのどちらかだろ。 もちろんもっと人間にもコンパイラにも分かりやすくて、すばらしい文法は作れただろうが、 今のような位置を占めているかどうかは疑問だ。 以下、俺様演算子を定義できる機能とか、 Cのプリプロセッサなんかより、もっとプログラマブルで、文法を考慮するマクロとか、 ↓禿のお気に入りだったマルチメソッドなどについて語ろう↓
250 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 12:04:48 ] >以下、俺様演算子を定義できる機能とか、 演算子オーバロードではお気に召しませんか? >Cのプリプロセッサなんかより、もっとプログラマブルで、文法を考慮するマクロとか、 C99のプリプロセッサではお気に召しませんか? それならDをどうぞ。
251 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 12:06:05 ] Lispじゃねぇの
252 名前:デフォルトの名無しさん [2007/08/10(金) 12:10:18 ] 開発当時はのんびり言語仕様考えるヒマなかったんだろう。 シェア争いを制するために時間を惜しんだんだろ 結局当時は高級言語に負けたが。
253 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 12:11:29 ] 俺様演算子っていうと、Prolog みたいなやつか。
254 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 14:42:56 ] 俺様演算子っていうと、Haskell みたいなやつか。
255 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 14:58:06 ] Forth なら何でもありだな
256 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 15:05:03 ] 禿は演算子オーバーロードは必要最小限に抑えたほうが良いと言ってなかったか
257 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 15:54:28 ] おまいは禿が死ねって言ったら死ぬのか?
258 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 16:32:06 ] 詭弁のガイドライン
259 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 17:05:23 ] おまいは「おまいは禿が死ねって言ったら死ぬのか?」ってレスを見たら詭弁だと短絡的に思うのか?
260 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 17:07:20 ] 次の相談者の方、どうぞ↓
261 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 17:10:30 ] 禿はC++に関しての第一人者だけど、死に関しての第一人者じゃない。 詭弁じゃないと言うなら、何をもって 「禿は演算子オーバーロードは必要最小限に抑えたほうが良いと言ってなかったか」 「おまいは禿が死ねって言ったら死ぬのか?」 というのが同じ重みがあるとするのかを明確化しろ。
262 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 17:44:52 ] 物事の良し悪しは他人任せにせずに自分で考えましょう、 と注意する場合の定型句だと思うが。
263 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 18:16:58 ] ならそう書けばいいんじゃないかなw
264 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 18:21:40 ] なんでも平たく書き下すんじゃなく、 慣用句等あれば使うのが文化って奴だろ その点APLなんかすごいぞ
265 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 18:26:07 ] 論点ずらしの天才
266 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 18:34:21 ] 演算子と人の生死を結びつけるところが正直よく分からん
267 名前:身の程知らず mailto:sage [2007/08/10(金) 18:45:10 ] 禿があれほどD&Eで多くのページを割いて、規格に入らなかったことを悔しがっているのに、 一言も突っ込まれないマルチメソッド哀れ。 まあ、正直言ってまず使わないと思うけど。
268 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:05:50 ] (動的)マルチメソッドマジ欲しい。 Lokiにもマルチディスパッチの実装あるけど、さすがに面倒だ。 でも、コンパイラの実装大変そうだよね。 演算子オーバーロードはPEGとかEBNFを実装するためにあると思うんだ。
269 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 12:00:15 ] 質問があります。 class A class B class C があるとして、class Cをclass AとBのメンバに持たす時、 class AとBのインスタンスを複数作った場合、メンバであるclass Cも 複数作成されてしまうと思います。 そこで、classA、B共に一つずつしかclass Cを作らないようにしたいのですが、 こういう場合はstaticメンバ変数にするしかないのでしょうか? ていうのも、static変数はクラス外に宣言を書かないといけないためclass A,Bみたいなクラスを たくさん作ると大変なんですよね・・・。 class A,Bの基底クラスに持たすことはできませんし・・・ 良い方法があればご教授ください。
270 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 12:27:32 ] つ 静的局所変数
271 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 12:45:41 ] >>269 CRTP が使える場面かもしれない。 でも、そんなに静的変数が要るのかどうかが疑わしい。 クラス外に定義が必要なのが嫌だというのも理解しかねる。
272 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 16:51:02 ] template<UINT nID>. class Base { static C s_c; }; template<UINT nID> C Base<nID>::s_c; class A : public Base<0> {}; class B : public Base<1> {};
273 名前:269 mailto:sage [2007/08/11(土) 19:13:13 ] >>270-272 返事が遅れてしまい申し訳ありませんでした。 レスありがとうございます。 CRTPってデザインパターンの一種みたいですね。 >>272 のソースがCRTPなのでしょうか? 面白そうなので試してしみようと思います。
274 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 19:43:47 ] それは全然違う。 CRTPはベースクラスが、継承クラスの型を知ること
275 名前:269 mailto:sage [2007/08/11(土) 19:55:41 ] >>274 なるほど。どもです。 ちょっとググって来ます。