1 名前:デフォルトの名無しさん [2010/12/06(月) 02:47:43 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。 過去ログ 01 pc11.2ch.net/test/read.cgi/tech/1167476845/ 02 pc11.2ch.net/test/read.cgi/tech/1178503366/ 03 pc11.2ch.net/test/read.cgi/tech/1187521676/ 04 pc11.2ch.net/test/read.cgi/tech/1221633708/ 05 pc11.2ch.net/test/read.cgi/tech/1230516307/ 06 pc11.2ch.net/test/read.cgi/tech/1231564903/ 07 pc11.2ch.net/test/read.cgi/tech/1232983248/ 08 pc12.2ch.net/test/read.cgi/tech/1235921779/ 09 pc12.2ch.net/test/read.cgi/tech/1240022781/ 10 pc12.2ch.net/test/read.cgi/tech/1242300936/ 11 pc12.2ch.net/test/read.cgi/tech/1245059383/ 12 pc12.2ch.net/test/read.cgi/tech/1248010352/ 13 pc12.2ch.net/test/read.cgi/tech/1260842197/ 14 pc12.2ch.net/test/read.cgi/tech/1269273471/ 15 pc12.2ch.net/test/read.cgi/tech/1273368706/ 16 hibari.2ch.net/test/read.cgi/tech/1279285647/ 17 hibari.2ch.net/test/read.cgi/tech/1285115590/
367 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 20:47:57.63 ] >>362 15分で終わる作業で1ヶ月も掛かるとか初心者かよ
368 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 21:17:12.83 ] >>367 じゃあ君がやってあげたまえ。
369 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 21:22:58.83 ] >>368 20万はらってくれたら。
370 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 21:58:49.67 ] >>367 とりあえず、吹っかけるのがこの業界のデフォルト。
371 名前:デフォルトの名無しさん [2011/03/06(日) 22:47:02.71 ] class A{ public: int* p; A(){ p = new int(); } ~A(){ delete p; } }; A func0(){ A a; *a.p = 1; return a; } void func1( A& a ){ ... } void main(){ func1( func0() ); }; こうすると、func0()の戻り値のA::pがfunc1に渡される前に deleteされてしまうんですが、deleteされずfunc1へ渡す方法を教えてください。
372 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 22:50:56.82 ] void func1( A a ) でおk
373 名前:デフォルトの名無しさん [2011/03/06(日) 23:11:44.94 ] >>372 こういうことがしたいんです。 A func0( A a ){ A b; b = x(a); // aをいろいろ加工してbへ return b; } void main() { A a; func1( func0(a) ); // aをfunc0()で加工してfunc1に渡す }
374 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 23:17:30.05 ] コピーコンストラクタをつくりなさい話はそれからです
375 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 23:20:06.89 ] じゃあ A& func(A& a)で
376 名前:デフォルトの名無しさん mailto:sage [2011/03/06(日) 23:34:24.98 ] コピーコンストラクタを作ったらうまくいきました。 ありがとうございました。
377 名前:デフォルトの名無しさん mailto:sage [2011/03/07(月) 00:46:19.18 ] アライメントって重要ですか?
378 名前:デフォルトの名無しさん mailto:sage [2011/03/07(月) 00:59:16.78 ] unionするとき重要。 通信系のデータマッピングに重要。 その他、データマッピングにも重要。 SSEするときに重要。 スピード狂するときも重要。
379 名前:デフォルトの名無しさん mailto:sage [2011/03/07(月) 01:09:45.95 ] 2番目辺りにライブラリとリンクする時も入れて
380 名前:デフォルトの名無しさん mailto:sage [2011/03/07(月) 01:17:57.54 ] >>378 ,379 ありがとうございます
381 名前:デフォルトの名無しさん mailto:sage [2011/03/07(月) 05:58:02.17 ] 日本語を含むパスを格納してる文字列の ローマ字だけを大文字に変換したいのですが、 それに適したライブラリや処理法ってあるでしょうか
382 名前:381 mailto:sage [2011/03/07(月) 06:02:48.93 ] すいません、解決しました
383 名前:デフォルトの名無しさん mailto:sage [2011/03/07(月) 08:04:22.80 ] ライブラリとリンクする場合は、ライブラリが提供しているヘッダを使うから 気にする必要は無い。ライブラリ作成者は気にしなければいけない。
384 名前:デフォルトの名無しさん mailto:sage [2011/03/08(火) 11:23:21.92 ] ソート済データからの値の検索の場合 常にfindよりlower_bound使う方がいい?
385 名前:デフォルトの名無しさん mailto:sage [2011/03/08(火) 12:50:24.25 ] そもそも使い道が違う findはその値をもつ要素を探す lower_boundはその値以上の要素を探す Aをさがすつもりでlower_boundしてAがなかったら全く違うBやCといった要素が返ってくることになる 素直にfindを使うんだ
386 名前:デフォルトの名無しさん mailto:sage [2011/03/08(火) 12:54:32.71 ] 俺は誰かがDLL作ってくれるまで諦めませんよ 物事が完成するまで何事まで諦めない若者に優しい手を差し伸べてくれてもいいじゃないケチ
387 名前:デフォルトの名無しさん mailto:sage [2011/03/08(火) 13:41:13.44 ] 計算式が四則演算でいいなら、20万円で作ってやるよ。
388 名前:デフォルトの名無しさん mailto:sage [2011/03/08(火) 14:00:32.04 ] >>385 なるほど、値がない場合のことを考えてなかった 値が存在する前提ならO(N)のfindよりO(logN)のほうが良いかなと思ったから
389 名前:デフォルトの名無しさん mailto:sage [2011/03/08(火) 14:18:10.69 ] メンバのfind使え
390 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 11:49:22.82 ] もういいや俺は自分でDLL作ることにしましたので(キリ 分からない事をここで聞く事に方向転換しましたよ
391 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 13:44:03.42 ] それはとても良いかんがえ
392 名前:デフォルトの名無しさん [2011/03/09(水) 14:04:16.47 ] DLLを作るための環境を教えてください 出来れば秀丸で書きたいのでVC以外で必要なソフトを教えてください ノートブックなので容量ないのですよ
393 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 14:05:57.90 ] 秀丸とVC++でおk
394 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 14:13:44.27 ] VC 以外なら Windows SDK のコンパイラを使うか Borland C++ Compiler を使うか MinGW の gcc を使うか ってところ?
395 名前:デフォルトの名無しさん [2011/03/09(水) 15:17:00.51 ] 394さん その3つではどれが一番初心者に向いてますか?
396 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 15:20:57.02 ] 秀丸SDKが対応してるコンパイラ。多分VCだろう。
397 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 19:07:46.21 ] すみません。 メモ帳などに書かれた、プログラムコードらしき物(メンバ関数を呼び引数もセットしてるなど)を 読み込んでプログラム内に取り込んで実行する なんて真似はできるものなのでしょうか? 単に文字列を判定し処理を切り替えた擬似的なもの に過ぎなかったのでしょうか。
398 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 19:13:53.31 ] インタープリターパターンといいます
399 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 19:18:48.35 ] >>397 動的にコンパイルして、動的にリンクすればできるけど、 大変だと思うよ
400 名前:デフォルトの名無しさん [2011/03/09(水) 19:22:02.85 ] 早くしろよ!
401 名前:デフォルトの名無しさん mailto:sage [2011/03/09(水) 19:35:34.28 ] いまやってる!
402 名前:397 mailto:sage [2011/03/09(水) 21:02:49.41 ] >>398 >>399 ありがとうございます。インタープリターパターンという物が有ったのですね。 インタプリタ言語を再現したかのような形式になるのですね。 ちょっと自分には敷居が高そうですが、やっと数日間の疑問が払拭できました。 ありがとうございました。
403 名前:デフォルトの名無しさん [2011/03/09(水) 21:13:52.61 ] 早くしろよ!!!!!!進まないっ!!!!!!!!
404 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 01:17:39.06 ] if((t%320)/80==1){〜〜} if((t%320)/80==3){〜〜} と if((t%320)/80==1){〜〜} else if((t%320)/80==3){〜〜} ではどっちが早いんですの? 極わずかな違いだろうけど。 ((t%320)/80==1)が正の時は((t%320)/80==3)の計算しなくて済むけど、 elseでぶっ飛ぶこと自体めんどくさいのかなって。
405 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 01:20:57.02 ] 後者。
406 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 01:23:04.58 ] オケーイ。ありがとぅー
407 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 04:19:17.77 ] >>404 tの型によっては、(t%320)/80の結果を一時変数に入れた方が速くなるかもしれない。 整数型ならコンパイラが何とかするだろうけど。
408 名前:デフォルトの名無しさん [2011/03/10(木) 07:09:05.14 ] 質問です。 C言語の数値配列はなぜscanfのときは&がいるのに printfのときは&がいらないんですか?
409 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 07:26:25.93 ] >>408 まずその疑問に至ったソースを出しなさい。基本的なことを誤解している。 例) int hoge[10]; hoge[0] これは、int型データー。 &hoge[0] これは、hoge[0]のアドレスを指す。 hoge これも、hoge[0]のアドレスを指す。 だから、 hoge と &hoge「0」 は同じものだ。
410 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 07:39:04.04 ] ×だから、 hoge と &hoge「0」 は同じものだ。 ○だから、 hoge と &hoge[0] は同じものだ。
411 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 07:40:39.16 ] >>409 見当違いだ。 用意されている関数とは別に、自作関数fを考えたとき 引数xの値を書き換えるにはどうすれば出来るか考えろ。
412 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 07:43:04.24 ] 値の更新したいとき。 int f(int x) では値の更新できないだろ。 だからアドレス渡しのint f(int *x)にする必要がある。 printfに&xを渡しても動くがそのときはメモリのアドレスが出てくるだけ。
413 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 07:58:49.67 ] すまん そもそも数値配列だったか
414 名前:デフォルトの名無しさん [2011/03/10(木) 10:14:09.75 ] CでDLL作るのとC++でDLL作るのはどちらが簡単ですか? 速度はどっちが速いですか?
415 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 10:32:58.60 ] C C
416 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 11:21:55.29 ] すいません、質問です。 ShowDialog()ではフォームが開くのですが、 Show()に変えると開かなくなってしまいました。 エラーにもならないので原因がわからずこまっています。
417 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 13:01:29.83 ] Show()に変えなければいいだけ Showもないことを聞くな
418 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 19:49:47.68 ] >>414 CもC++もこれから学ぶのなら絶対C++。 C++を便利なCとして使うのが楽。オート変数の取り扱いだけでも。
419 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 21:33:53.23 ] 複雑なことするのでなければCでいいよ
420 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 21:35:10.16 ] オート変数の扱いがなんだって?
421 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 21:37:00.00 ] C厨 vs C++厨
422 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 23:20:01.18 ] C++ を便利な C として使うと言ってる人は、 C++ や C をキチンと使いこなせてるのかな?
423 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 23:54:34.29 ] better Cとして使ってもいいって普通に言われてないか?
424 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 00:01:58.32 ] 使ってもいいとはよく言うけど勿体無いなぁと思う
425 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 00:14:01.88 ] >>423 それは better C が便利だから言われてるのではなく、 C++ プログラマが自由に C++ を使いたくて、C の制限を 排除する為の方便として言われてるだけ。 実際は C プログラマにとってデメリットはあれど、大した メリットはない。
426 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 00:33:46.14 ] C++はCを由来とする言語だがCとはおおよそ異なる言語に進化している。 初学者必読の書、Effective C++を読むだけでも、 Better Cなどという使い方はありえないと教わる。 実際にCライクな泥臭いプログラムが必要となる場面があるのは事実だが。 CにはCの、C++にはC++の利点があり、 双方の利点は競合している。
427 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:12:03.09 ] ベターCいいと思うけどね 関数ローカルで可変長のバッファがほしいなーとか思ったときに vectorでササッとやっつけしちゃったり その程度でも十分役に立つし
428 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:19:51.86 ] それは C プログラマが alloca() でササッとやっつけるのとどう違うの? もちろん malloc/free でも良いよ
429 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:27:43.01 ] >>428 なんかエラーでたときとかRAIIで楽だしコードもすっきりするじゃん
430 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:31:14.68 ] >>429 で、それは alloca() で関数を抜ける時にバッファが解放されるのとどう違うの?
431 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:37:21.50 ] allocaは関数を抜けるときに開放してくれるとは限らないよ
432 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:40:03.00 ] >>431 それはどんな時?
433 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:42:08.48 ] ライブラリで実装の時とか
434 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 01:58:46.11 ] >>433 つ 無理筋 もしそんな物が今の時代に生き延びているとして、そんなコンパイラを使う方が悪い
435 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:03:30.81 ] 建前: 「Better C として使うと便利だよ〜」 本音: 「俺が後で C++ から使い易い様に、お前も C++ で書いとけ」
436 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:10:27.58 ] 中途半端な知識で書かれたC++コードなら純Cのがまだマシ
437 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:12:23.02 ] 完全無欠なる知識でC++のコードを書けるのは、この世界で一人だけ
438 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:21:28.78 ] allocaって標準入りしたの? C99で可変長配列が採用されたから今後も予定はないって聞いてたけど
439 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:31:30.81 ] >>438 入ってない。可変長配列でオケ。
440 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:35:59.83 ] >>436 リーナストーバルズちゃんもそう言ってたな。 実際、Cの流儀で書かれたC++コードほど迷惑なものはない。
441 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 02:41:28.45 ] 結局、ベターCって誰得?
442 名前:408 mailto:sage [2011/03/11(金) 03:52:59.23 ] >>409 さん たとえば int data[10]; int i; for (i = 0;i < 10;i++) { printf("%d 番目の数値を入力して下さい:",i); scanf("%d",&data[i]); } for (i = 9;i >= 0;i--) { printf("%d ",data[i]); } printf("\n"); なぜこのプログラムではprintfのときに配列個々に&をつけていないのでしょうか。 配列の名前は配列の先頭のアドレスを表すつまり、このプログラムなら data=&data[0]なのはわかりますが、なぜほかの要素に&をつけていないのに データが参照されているかということがわからないのです。
443 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 04:01:33.33 ] scanfが要求するのはポインタ、printfが要求するのは値。 単にこれだけの違い。 void f( int ); と void f( int * ); の違いみたいなもんですね。 パラメータ型が違うんだから、与える引数の型も変わって当然。
444 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 06:56:05.10 ] >>441 俺がbetter Cとして使うときは、C + ネームスペース&クラス位しか使わんが 俺様プログラムを作るときは、コメント省略しても実害なく作れるので、無茶苦茶便利 合わない人と組んでやるときは、誰の特にもならない
445 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 07:55:56.16 ] BetterCとして作るときって言うと、構造体に演算子オーバロードはよく使うな。自分用ツールなら他人が読めるかは余り気にせずできるし。 それでも流石にDoxygenコメント位入れるけど。
446 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 08:30:07.62 ] >>444 ネームスペースに頼った命名法ってgrepで検索といった古典的な手法が使えないよね。 IDE必須になるのが嫌だな。
447 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 08:42:24.51 ] >>444 クラスを使ったら、それはもうベターCじゃなくC++だと思うんだが・・・ 元々がC with Classな訳だし
448 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 08:58:28.54 ] >>447 そう? 俺の中では、class + コンストラクタ + デストラクタ + コピーコンストラクタ までは ちょっと便利な構造体だけどな? 継承とか演算子のオーバーロードがあるとC++って感じになる と言いつつ、クラスの性質に合わせて両方とも使ってるけどね
449 名前:デフォルトの名無しさん [2011/03/11(金) 10:15:11.38 ] DLLを作るとき1+2=3みたいに計算させる場合はCとC++どっちがいいのか聞いておるのだ
450 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 10:32:20.70 ] どっちでもいいよ。
451 名前:デフォルトの名無しさん [2011/03/11(金) 10:55:27.62 ] Cで作ることにしました
452 名前:デフォルトの名無しさん [2011/03/11(金) 10:56:10.21 ] 勉強熱心な若者はCでアイフォンアプリもアンドロイドアプリも作れることを学習したんですよ
453 名前:デフォルトの名無しさん [2011/03/11(金) 11:02:28.87 ] 至急!!!!!コンパイラが見つかりません!どこにありますか? www.embarcadero.com/jp/downloads
454 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 11:27:06.71 ] 目が悪いのか?Downloadって...
455 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 11:31:37.36 ] スルーしないと永遠に付きまとわれるぞ
456 名前:デフォルトの名無しさん [2011/03/11(金) 12:35:41.62 ] 何故若者のやる気をなくす事を言うか?
457 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 12:40:32.02 ] 出る杭は打たれるよ
458 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 13:04:40.16 ] それは457が陰湿なだけでしょ
459 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 13:40:46.46 ] 出てねーし めり込んだ杭をどうしろと
460 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 23:16:01.68 ] っ全然関係ねーけど、 町田市ようやく電気回復したよ。 9時間C++で遊べず^^;
461 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 23:43:36.66 ] それは喜ばしいが小田急とJRが止まってるから町田に帰れない><
462 名前:デフォルトの名無しさん mailto:sage [2011/03/12(土) 00:20:57.01 ] 今回は被災しなかった地域だけど 俺はオフィスに自転車おいてるから電車が止まってもなんとか帰れる お前らも折り畳み自転車くらい持っとけば?
463 名前:デフォルトの名無しさん mailto:sage [2011/03/12(土) 00:45:03.54 ] >>448 もちろん STL も使うでしょ? そこから分かる事は、ベターCというのは人に依って範囲が全然違うから 具体的な実態を持たない、気をつけるべき用語だと言う事だね。
464 名前:デフォルトの名無しさん mailto:sage [2011/03/12(土) 05:09:26.98 ] >>462 道路はどこも渋滞と帰宅難民で大混雑だそうだから気をつけなよ
465 名前:デフォルトの名無しさん mailto:sage [2011/03/12(土) 13:39:27.78 ] DLLのグローバル変数やstatic変数の寿命って最初にロードされたときですか?
466 名前:デフォルトの名無しさん mailto:sage [2011/03/12(土) 14:21:20.69 ] はい
467 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 21:59:40.13 ] ttp://n.xxad.net/watch/sm13809685 【どうすればこの欲望の渦巻く堕落した世界に私の名を残せるだろうか】 ※名を残したいとは思わないがw。 【狂乱のマシンを残せばいい】 【この狂乱の世界に相応しい野獣のようなマシンを】 【狼が来たからやってきた】 【お前の平和な街は今はもう安全ではない】
468 名前:デフォルトの名無しさん mailto:sage [2011/03/16(水) 08:25:09.18 ] すみません。C++でファイル等の読込状況をリアルタイム表示したいのですが、 マルチタスク、プロセスなど色々有る様なのですが、何を学ぶのが適切でしょうか? また、学習にオススメのサイト、学習用サンプルの有るサイトなども有れば、教えて頂けますと幸いです。よろしくお願いします。
469 名前:デフォルトの名無しさん mailto:sage [2011/03/16(水) 20:54:30.09 ] >>468 スレッド。
470 名前:468 mailto:sage [2011/03/16(水) 22:58:44.95 ] >>469 マルチスレッドなのですね。ありがとうございます
471 名前:デフォルトの名無しさん mailto:sage [2011/03/22(火) 00:22:33.52 ] >>468 分割ファイル読みの方が楽だと思うけど。
472 名前:デフォルトの名無しさん mailto:sage [2011/04/05(火) 02:49:28.72 ] const char* char const* の違いを教えてください
473 名前:デフォルトの名無しさん mailto:sage [2011/04/05(火) 03:14:41.32 ] >>472 同じ
474 名前:デフォルトの名無しさん mailto:sage [2011/04/05(火) 03:43:50.45 ] >>473 ありがとうございます!!!
475 名前:デフォルトの名無しさん mailto:sage [2011/04/05(火) 19:53:08.28 ] 西日本も福島原発の放射能に曝される。 4/7 予測 up3.viploader.net/ippan/src/vlippan198234.jpg 発表はドイツ気象庁 www.dwd.de/ 今後 atmc.jp/ を注目せよ。
476 名前:デフォルトの名無しさん [2011/05/03(火) 22:35:12.60 ] test
477 名前:チョクト mailto:sage [2011/05/04(水) 11:33:45.69 ] どなたかバージョンアップしていただけないでしょうか? とてもじゃないですが、自民の論客どもに太刀打ちできません ( ノД`)シクシク… 答弁プログラムver.1.0 #include <stdio.h> #include <stdlib.h> int main(void){ srand((unsigned)time(NULL)); while(1){ switch(rand()%3+1){ case 1: printf("しっかり\n"); break; case 2: printf("きっちり\n"); break; case 3: printf("ちゃんと\n"); break; } } }
478 名前:デフォルトの名無しさん [2011/05/04(水) 16:45:02.58 ] #include<stdio.h> main() { int a1,a2,a3,a4; a1 = 5; a1 = a1 + 2; printf("a1 = %d\n",a1); a2 = 5; a2 += 2; printf("a2 = %d\n",a2); a3 = 5; a3 = a3++ + 2; printf("a3 = %d\n",a3); a4 = 5; printf("a4 = %d\n",a4++ +2); return 0; } なぜかコンパイル出来ません 6行目のa1 = a1 + 2;が指摘されてるんですが、理由が分かりません
479 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 16:47:01.47 ] >>478 codepad.org/dMf4ePXj コンパイルと実行できたよ。
480 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 16:48:45.45 ] >>478 main関数に型がついてないだけだよ! codepadは無くても良いのね
481 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 16:51:19.60 ] >>478 です int mainで出来ました だけど、今までこれ以外の他のコードではint mainとかかなくてもコンパイル出来てたんですが なぜこのソースに限ってはint mainとしなきゃダメだったんでしょうか?
482 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 16:53:44.72 ] >>481 コンパイルする環境が変わったとしか思えない
483 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 16:57:04.48 ] ずっとBorlandのままです
484 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 16:59:09.67 ] いままで return 0; つけてなかったんじゃねーの
485 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 17:05:37.07 ] 拡張子を .c にすると C になって int を省略できるけど 拡張子を .cpp にすると C++ になって int を省略できないとか そういうことじゃないのかい
486 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 17:07:34.24 ] 今までOKで急にエラーになったんなら、なにかしら環境変わってるだろ。
487 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 17:14:19.53 ] >>484 それはないです ずっとソースを使いまわしながら関数だけ変更してたので たまたま今回はint mainにしなければなぜかコンパイル出来ない状態になったので ビックリしております 環境が変わったにしてもその理由もサッパリです ただ、大した問題じゃなさそうだし解決したのでよしとします
488 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 17:32:10.22 ] #defineとはどういう意味ですか?
489 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 18:04:55.47 ] 定義
490 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 18:25:08.91 ] どうゆうときに使うんでしょうか?
491 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 18:33:24.25 ] 名前空間を汚すだけのバッドノウハウです 使う必要はありません
492 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 18:34:24.93 ] >>490 置換用のマクロだよ
493 名前:デフォルトの名無しさん [2011/05/04(水) 22:36:46.64 ] 勃起するまでのない質問はここで
494 名前:デフォルトの名無しさん mailto:sage [2011/05/04(水) 23:02:42.87 ] #defineは神
495 名前:デフォルトの名無しさん mailto:sage [2011/05/05(木) 00:10:15.05 ] メンバー変数の初期化順って仕様で決まってる?
496 名前:デフォルトの名無しさん mailto:sage [2011/05/05(木) 00:25:49.87 ] >>495 初期化子の話なら決まってるよ
497 名前:デフォルトの名無しさん mailto:sage [2011/05/05(木) 23:45:19.26 ] c++のホントに最初の入門書だとやさしいc++で宜しいでしょうか 他の言語はC言語をさわりだけやった程度なので、他の言語をやった人向けのは難しいです
498 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 01:33:46.81 ] >>497 なんかググったら同じ本二種類出てきてわからないが、理解できそうならそれでいいと思うよ 初心者用って書いてあるけど他の言語習得者向けな本があること知ってるなら他に注意すべきこともないだろう C++はコンパイルは通るし動くけどやっちゃいけないことというのが多いので むしろ基礎が終わったら、そのうちEffectiveC++とか読むのをおすすめする ちょっと便利な機能の増えたCとして使う気ならべつにいいが
499 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 01:59:32.25 ] 初心者はC++に触っちゃいけない。バッドノウハウの塊だから。 まだ、perlの方がまし。
500 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 02:09:18.61 ] getcharってのは何か文字を入力したらその文字だけを蓄えるという意味ですか?
501 名前:>>500です mailto:sage [2011/05/06(金) 02:39:24.23 ] while (1) { printf("A:\n"); printf("X:\n"); while (1) { c = getchar(); if(c != '\n') /*cが\nでないなら*/ break; } switch (c){ case 'A': case 'a': printf("\nAだった\n\n"); break; case 'X': case 'x': end = 1; break; default: printf("\nまじめにやれ\n\n"); break; } if (end == 1) /*endが1なら*/ break; /*whileループを抜ける*/ } printf("\nおわり\n"); Aとa、Xとx以外の文字を入力すると「まじめにやれ」と出力されるのはどこで判断してるのかが 分かりません。 また6,7行目と25,26秒目のifのところがイマイチ理解できません。
502 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 02:47:59.64 ] >>501 default: がなんなのか分からない breakの意味が分からないってことか?
503 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 02:52:22.64 ] >>502 それは大丈夫です
504 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 07:22:37.68 ] 大丈夫じゃねぇじゃん
505 名前:デフォルトの名無しさん [2011/05/06(金) 14:12:10.90 ] それはほんとに大丈夫なんでお願いします
506 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 14:23:43.80 ] case 'X': case 'x': end = 1; break; breakがないとcaseはそのままスルーしてたとえXでもendのところにくる だが一般にこれは行儀が悪く良くない書き方
507 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 14:36:31.73 ] end 1ってのはそもそもどういう役割ですか?
508 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 15:04:36.37 ] たぶんX,xが入力された場合もwhile(1)のループを抜けたいんだろうけど switch文の中なので直接飛べないのでendという変数をフラグにしてあるんだろ swtichの次のところでendが1ならwhileループを抜けると書いてある
509 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 15:13:05.69 ] 初心者です VC++で、コンボボックスにデータバインドする方法を教えてください。 XSDファイルをバインドしたいのですが、データソースには「なし」としか書かれていなくて困っています
510 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 16:33:48.63 ] ある関数において長さが不確定の値を配列に受け取り 配列の反復子を関数に渡してそれに入れてもらうと仮定した場合 配列の大きさが前もってわかってないので十分な大きさを確保する必要があると考えますが これは不合理と理解しますのでソリューションをご教示ください。
511 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 17:45:59.69 ] 1,std::vector vec; vec.resize(n); 2,char* = new char[n]; 3,char* = (char)malloc(sizeof(char) * n); 好きなのを使えばいい。メモリは解放するんだぞ
512 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 17:49:37.15 ] メモリー解放すぐ忘れちゃうんで 使い終わったら勝手に消えてくれるイテレーターがあると助かるんだけど。
513 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 17:55:19.63 ] 必要に応じて領域を確保していく出力反復子的なものを作って渡せばいいんじゃない
514 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 18:00:28.20 ] std::back_inserterというものが有ってだな
515 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 18:13:32.59 ] codepad.org/pJvvXAhu 仕様的にこのようにlistの走査中に削除や追加をしていいのだろうか?
516 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 18:18:20.28 ] listだから問題ないだろ 一つ一つの手続きに問題が無いんだし
517 名前:デフォルトの名無しさん mailto:sage [2011/05/06(金) 20:17:11.94 ] そういう事じゃなくて、個人はどう呼ぼう
518 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 01:22:42.46 ] 誰か>517の解説を頼む。
519 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 08:56:21.46 ] そういう事じゃなくて、故人はどう呼ぼう
520 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 09:22:56.32 ] >>515 一般的なlistの実装なら問題ないのかな これがvectorだったら再確保された場合イテレーターが死ぬから無理だけど 仕様で許可されてるのかどうかまではわからないな
521 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 10:29:04.37 ] つ規格書 listコンテナのmodifier (23.2.2.3) insert,push_front,push_back はイテレータや参照の有効性に影響を及ぼさない。(p1) erase,pop_font,pop_back,clear は削除される要素へのイテレータや参照だけ無効になる。(p3)
522 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 12:09:13.01 ] https://gist.github.com/960160 void solve(vector <pair<string, int> >& h){} この様な "ペアを内包したベクタへの参照を引数に取る関数" を定義したいです。でも出来ません。 「invalid initialization of non-const reference of type…」とコンパイラに怒られます。 現状は void solve(const vector<pair<string, int> >* h){} としています。お教え頂けませんか?
523 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 12:20:51.60 ] 日本語仕様書ってどこにあるの?pdfただで見れるの?
524 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 12:22:36.45 ] >>522 const
525 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 12:53:18.25 ] 姉はああいう味なんだと思う。
526 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 13:16:57.37 ] >>522 gcc4.5.2(MinGW)では普通に通るが typedef std::vector<std::pair<std::string, int> > Vpsi; void solve(Vpsi& h) { for (Vpsi::const_iterator pos = h.begin(); pos != h.end(); ++pos) std::cout << "String = \"" << pos->first << ", int = " << pos->second << std::endl; } int main() { Vpsi v; v.push_back(std::make_pair(std::string("abc"), 1)); v.push_back(std::make_pair(std::string("def"), 2)); solve(v); std::cin.get(); }
527 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 13:38:25.91 ] 構造体の配列をコピーするのですが、 memcpy_s でコピーして問題ありますか? 次のような構造体のときmemset()で0初期化すると 整数型0と挙動小数点0.0f, 0.0dの区別の関係で問題があると きいて懸念ができたので聞いておきたいのです。 struct A { char c; int i; float f; double d; };
528 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 13:43:47.11 ] こうすれば、問題ない。(しなくてもよい) struct A { double d; float f; int i; char c; };
529 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 13:52:47.05 ] >523 C++03の日本語版X3014ならJISCのサイトで閲覧できる
530 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 14:14:08.99 ] >>526 関数定義が構造体(貴殿のでいうVpsi)の参照渡しなのに、アドレス渡してcallしてました。 呼び出す方のミスでした。アホだった。ありがとうございました。 >>524 const は記載ミスでした。関係有りませんでした。すみません、ありがとうございます。
531 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 14:26:48.76 ] >>527 注意する点は、 「C++の仕様内で整数型および浮動小数点数型の内部表現が定まってない事」 「バイト単位によるコピー、セットに伴うアラインメント」 「A自体がPODかどうか」 それぞれぐぐれば出てくる。 まぁ、AはPODだしアラインメントは::operator new使えば関係ないし 整数型の内部表現も二進数で1バイトのbit数も8だろうし 浮動小数点数規格IEEE 754, 854は全てのデータが0であると+0として認識されるから その時点ではそれらの関数を使うことに対して全く問題はない。
532 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 16:31:42.78 ] >>509 winapiスレがいいですよ
533 名前:527 mailto:sage [2011/05/07(土) 17:31:50.00 ] ありがとう。 でもアライメントはsizeofで構造体サイズを指定すればいんじゃない?
534 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 20:23:26.98 ] よくあるタイプの処理系だとdoubleのサイズが最大のアライメントになるから 構造体サイズをアライメントに採用すると間違いではないけど無駄が多くなる
535 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 22:31:08.50 ] STLがアロケーターに要求しているmax_sizeって、メモリが無限にあると仮定して 1 現在において一度に取得可能な数 2 最も良い状況での取得可能な数 のどっちでしょうか?
536 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 22:46:21.51 ] 無限のメモリをアドレッシングするには無限長アドレスが必要だけど、 そんなCPUアーキテクチャは存在しない。バカな質問するな。
537 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 22:51:13.86 ] >>536 仮定って言ってるだろ 空きメモリの限界に引っかかる場合を除いてって意味でしょうに
538 名前:デフォルトの名無しさん mailto:sage [2011/05/07(土) 22:57:33.51 ] std::numeric_limit<std::size_t>::max()
539 名前:デフォルトの名無しさん mailto:sage [2011/05/08(日) 21:42:53.33 ] >>535 論理的に確保可能な要素の数。
540 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 05:19:28.20 ] C++でAの処理が終わったら主処理ループn回分待機してからBの処理、 Bの処理が終わったら主処理ループm回分待機してからCの処理 のような仕組みをカウンタの変数用意して回すのが嫌で嫌でなりません どうにかしてC++でマイクロスレッドやコルーチンを用いる方法はないでしょうか
541 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 06:40:07.93 ] 手段を問わないんならコルーチン実装したライブラリ使えばいいだけじゃないのか
542 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 10:36:46.35 ] AMD64が主流になってもLLP64じゃsizeof(size_t)==sizeof(unsigned long)==32bitだしなあ 欠陥を感じずにはいられない なぜLP64またはILP64にしなかったのか まあWin64を直接コールすれば関係ないが C/C++を軽視したモデルと言わざるを得ない もちろんメモリスペースの問題からintは現行の32ビットでも十分だ size_tをlong long intにすればいいのに あれ?でもMSDNには >int と long は、64 ビット Windows オペレーティング システムでは 32 ビット値です。 >64 ビット プラットフォーム用にコンパイルする必要があるプログラムでは、ポインタを 32 ビット >変数に割り当てないように注意してください。ポインタは、64 ビットのプラットフォームでは 64 ビット >なので、ポインタを 32 ビット変数に割り当てると、ポインタ値を切り捨てることになります。 >size_t、time_t、および ptrdiff_t は、64 ビット Windows オペレーティング システムでは 64 ビット値です。 >time_t は、Visual C++ 2005 以前の Visual C++ バージョンの 32 ビット Windows オペレーティング >システムでは 32 ビット値です。Visual C++ 2005 以降では、time_t は既定で 64 ビットの整数です。 >詳細については、「時間管理」を参照してください。 と書いてあるぞ???
543 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 10:46:16.97 ] どしたの
544 名前:デフォルトの名無しさん [2011/05/09(月) 11:06:17.37 ] (´・ω・`)
545 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 15:59:54.51 ] >>540 ttp://codepad.org/xl8U0aul こういうのは?いろいろパターンあると思うけど
546 名前:デフォルトの名無しさん [2011/05/09(月) 16:00:30.77 ] >>507 どうもすいません aかAを入力すると「Aだった」出力されます それ以外のキーを入力すると「まじめにやれ」と出力されます つまりXかxを入力しない限り、このコマンドは終わらないということですが、 それは何がどう働いてるからこういう動きになるのでしょうか?
547 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 16:06:25.58 ] 全体を while (1) { 〜 } で囲んで繰り返しにしているのでそういう動きになります
548 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 16:16:22.39 ] >>547 whileが真の間だけ繰り返すというのは理解してるんですが、この場合、何か入力したら、 getcharがゲットし、それをcに代入するわけですよね? ここでここでcが\nと等しくない(>>501 の7行目)ってのが何を意味するのかイメージつかめません また、24行目のif( end == 1)の1ってのがどういうアレなのかもイメージ尽きません
549 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 16:23:19.38 ] 自分がコンピューターになったつもりでc,endに何が入っているか追跡してみなよ。
550 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 17:11:39.62 ] >>548 端末に例えばAだけ入力したくても通常は1行入力モードだから改行文字が必要。 で、そいつを入力すると今度は判定の邪魔になるから改行文字は無視したい。 さて、どうする? と言うお話だったのさ。
551 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 17:16:12.62 ] >>548 getchar() は、入力した文字を1文字ずつ返します。 改行も '\n' という文字になります。 例えばあなたは、まず a を押し、次にエンターを押し、さらに x を押し、次にまたエンターを押したとしますね? そうすると、最初は getchar() が 'a' を返し、それが c に代入され、次の時 getchar() は '\n' を返し、それが c に代入され、さらにその次の時 getchar() は 'x' を返し、以下同様に動きます。 549氏の言われるようにそれで1行ずつプログラムの動きを追ってみてください。 人間コンピュータになったつもりで。 end の 1 は、ほら、case 'x': のところで代入してるじゃないですか。 end に 1 を代入したら end が 1 になり、 end == 1 が成立するようになります。
552 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 18:12:36.07 ] getcharもendも意味が分かりました。 しかし、 if(c != \n); break; がどうもダメです。 文字がエンターと等しくない事がどうしてwhileループを抜けるになるんでしょうか? aを押したあと、エンター押しますよね普通。 xを押せば終了ですが、aだと終わることなくループしますし。 つまりwhileループは抜けないことになるかと思います。
553 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 18:19:30.30 ] >>552 while(1) は2つあるだろ printf から switch 文まで全体を囲ってる外側の while(1) と、getchar と if 文だけを囲ってる内側の while(1) そこの break で抜けるのは内側の while(1) だよ
554 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 23:04:22.40 ] コンパイルすると九九が出力されるソースです。 iがjより大きいコンティニューになるようですが、どうみればいいのでしょうか? #include <stdio.h> int main() { int i,j; for(i = 1; i < 10; i++){ for(j = 1; j < 10; j++){ if(i > j) continue; printf("%d×%d = %2d\n", i,j,i*j); } printf("---------------------\n"); } return 0; }
555 名前:デフォルトの名無しさん mailto:sage [2011/05/09(月) 23:57:39.95 ] >>554 i<=jのときだけそこのループ処理を行う
556 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 00:45:39.25 ] CとC++どっちが強いですか?
557 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 00:48:48.31 ] 五十歩百歩 ダブルスコアでC++
558 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:12:34.78 ] >>555 もうちょい詳しくお願いします iとjがインクリメントで1つづ増えてそれが9までいくってのはわかります しかしi>jが何を意味すんのか、それによって何がどうなるかがイマイチ分かりません
559 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:15:09.64 ] >>558 iがインクリメントされるタイミングわかる?
560 名前:デフォルトの名無しさん [2011/05/10(火) 01:15:37.91 ] あげといてやるよ
561 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:22:51.64 ] >>559 iがjより大きいときですか?
562 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:25:29.36 ] >>556 C の方が断然強いよ www.tiobe.com/index.php/content/paperinfo/tpci/index.html
563 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:31:20.92 ] >>554 を出力すると以下のようになるわけですが、iのほうはずっと1のままで、jは 2,3,4・・・インクリメントされてます。 でjが9に達したところで、iが2になってるのです こうなるのはforとかifがどういうタイミングで働いてるのかがどうもつかめません 1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 ・ ・ ・ 略
564 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:38:49.07 ] >>563 ちゃんと自動でインデントしてくれるエディタ使ってる? そしてfor文について理解してる?
565 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:42:08.79 ] >>564 forはほぼばっちりです。
566 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:44:58.93 ] >>563 #include <stdio.h> int main() { int i,j; for(i = 1; i < 10; i++){ for(j = 1; j < 10; j++){ printf("(i, j)=(%d, %d)\n",i,j); } } return 0; } #include <stdio.h> int main() { int i,j; for(i = 1; i < 10; i++){ for(j = 1; j < 10; j++){ } printf("(i, j)=(%d, %d)\n",i,j); } return 0; }
567 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 01:50:46.96 ] おい
568 名前: ◆6W4srb4nmo mailto:sage [2011/05/10(火) 03:10:20.81 ] /* www.geocities.jp/ky_webid/ProgrammingPlacePlus/c/017.html#continue if(i > j) continue; は、もし、jがiより小さいか等しいなら、内側のループの最後まで飛び越す。次はj++ */ #include <stdio.h> int main() { int i,j; for(i = 1; i < 10; i++){ for(j = 1; j < 10; j++){ /* if(i > j) continue; printf("%d×%d = %2d\n", i,j,i*j); */ if(i <= j) printf("%d×%d = %2d\n", i,j,i*j); } printf("---------------------\n"); } return 0; }
569 名前:デフォルトの名無しさん mailto:sage [2011/05/10(火) 19:35:17.14 ] typeidの情報ってtypeidを一度も使ってないクラスのデータも取られる? かかるコストはコンパイル時にtypeid使ってるクラスの分だけ?
570 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 00:34:10.88 ] RTTIを有効にしたら全部だろう。 リンカあたりが取り除いてくれる最適化があるのか? もっとも今時のPCなら、全部作られたとしても、そう大したコストではないとは思うが。
571 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 02:57:06.85 ] 全部のクラスでやってたらテンプレートであれこれするとすごい無駄になりそう
572 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 12:38:25.51 ] 文字列定数同士の比較ってstrcmpを使わなくてもポインタの値が等しいかで問題ないですか?
573 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 12:46:13.89 ] 有ります
574 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 12:49:00.96 ] あーすみませんなんでもないです ごめんなさい
575 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 13:35:03.57 ] >>572 あります。文字列リテラルを同じ空間に確保するかどうかは環境依存です。
576 名前:デフォルトの名無しさん mailto:sage [2011/05/11(水) 15:14:46.74 ] インターフェースを追加するだけのクラス継承(メンバ変数を一つも持たない)ならスライシングが起こってもなんら問題ないよね?
577 名前:デフォルトの名無しさん mailto:sage [2011/05/12(木) 17:25:51.36 ] C++の質問。 SuperClass* pSuper p = new SubClass(); SubClass pSub = (SubClass)p; このようにダウンキャストするときにdynamic_castを使わず C言語ライクにキャストするとキャストコストがない、で正しいでしょうか? >>576 仮想関数があるとサイズに違いがでるよ。
578 名前:デフォルトの名無しさん mailto:sage [2011/05/12(木) 17:45:47.09 ] >>577 演算子オーバーロードは問題外として 仮想関数関係のアレはC形式のキャストでもちゃんとやるよ
579 名前:469 mailto:sage [2011/05/12(木) 19:45:23.61 ] >>577 Cスタイルキャストはオススメしない。コードが不明瞭になる 絶対キャストが成功する保障があるなら static_castを使いましょう boost使えるならpolymorphic_downcastをオススメ
580 名前:579 mailto:sage [2011/05/12(木) 19:46:54.73 ] 名前はミス
581 名前:デフォルトの名無しさん mailto:sage [2011/05/12(木) 22:16:42.49 ] ポインタの場合はreinterpret_castもありますけど static_castの方は実行時ではなくコンパイル時ですね。 ありがとうございます。
582 名前:デフォルトの名無しさん mailto:sage [2011/05/13(金) 00:38:27.80 ] C++やっているけどいまだにオブジェクト指向ってのが何なのか分かっていない
583 名前:デフォルトの名無しさん mailto:sage [2011/05/13(金) 00:42:29.93 ] 実行時のキャストコストって、CスタイルとC++スタイルで同じじゃないの?
584 名前:デフォルトの名無しさん mailto:sage [2011/05/13(金) 00:56:02.33 ] >>582 手続き型の言語に手を出すといいよ
585 名前:デフォルトの名無しさん mailto:sage [2011/05/13(金) 01:23:33.11 ] オブジェクト指向を使ったいい例がない
586 名前:デフォルトの名無しさん mailto:sage [2011/05/13(金) 20:44:52.19 ] C++の << >> ってかわいいよね
587 名前:デフォルトの名無しさん mailto:sage [2011/05/13(金) 21:14:56.83 ] いやかわいい顔して悪魔だよ
588 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 03:10:16.10 ] コンストラクタから 仮想メンバ関数は呼んではいけなかったんでしたっけ? 基底クラスの非仮想メンバ関数は呼んでいいんでしたっけ? 教えてくださいお願いします
589 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 04:22:17.45 ] コンストラクタで仮想関数を呼ぶと オーバーライドされていても親クラスの関数が呼ばれる
590 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 14:40:10.68 ] 親から順番にコンストラクトされる仕様だから 親がコンストラクトされる前に子のメンバ関数を呼び出せてしまうとやばい 子の準備前に呼ばれるわけだからね
591 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 14:55:30.91 ] >>590 親のコンストラクタから子のメンバ関数って呼べるんですか? 親のコンストラクタからメンバ関数を呼ぶと普通に其のクラスのメンバ関数(さらに親はいないとして)が呼ばれるみたいなんですが
592 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 15:06:05.73 ] 呼び出せてしまうとやばいから、呼ばれないようになっている
593 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 15:07:59.11 ] >>592 ですよね みなさん参考になりました どうもありがとうございました
594 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 17:20:54.22 ] codepad.org/Vt0OuT8c 無理やり呼ぶとこうなる
595 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 01:15:06.08 ] C++を知ってしまうとCなんて馬鹿らしくてやってられないよな;;
596 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 01:31:05.73 ] C++の前にCをやれって言われてるのは、文法を解説してるC++のサイトや書籍が少ないからなんだよな ほんと今から触れる人はCすっとばしてC++触るべきだと思うわ
597 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 01:33:37.57 ] さらにC++03すっ飛ばしていきなりC++0xの機能使ったりSTLより先にboostとか触るべきだわ
598 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 01:37:43.22 ] STLガンガンつかってるけどboost使ったことないわ 環境構築が居るってのが抵抗ある
599 名前:uy mailto:sage [2011/05/15(日) 02:36:23.56 ] Boostとか、別にただのライブラリなので自分でかいたって良い。 たいしたものは存在してない lambda? スマートポインタ? 自分でかけよ 自分でその程度の機能すらかけないゴミカスが、ライブラリに頼る時に使う機構をBoostと呼ぶ そしてC++で出来る事は実は、やろうとすりゃCでも出来るので、 現在のITの世界の互換性っていう観点からみると、 C++よりもCを極めたほうが、広い世界を見ることが出来る Cにしろ、C++にしろ、いずれ、マシなコンパイラ言語が世の中に出てくるはずなので そのときに、いずれ両方とも消え去る Cは時代遅れ、C++は、時代遅れではないけれど記述が冗長すぎて、 この言語は、使っていけません、ただの芸術作品です 情報技術のお部屋に未来永劫飾っておく言語、C#、JAVAよりは偉いよC++。 Cの次くらいに、偉い C++は初心者の学習用言語にむいてる 生半可な力で使っていける言語ではないという点が、学習用途にはとても良い材料ではある その苦境を超えてこれるなら、よきプログラマになれるだろう そのままC++を使い続けるプログラマになったとしても、 C++から別言語に移ったとしても、C++を( その気になれば )かける奴というのは 根が強い。 言語というそのものへの理解が、深いといえる ゴミグラマは死ね
600 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 02:39:16.30 ] >>599 死ねゴミ
601 名前:uy mailto:sage [2011/05/15(日) 02:39:56.84 ] >>600 よおゴミ^^
602 名前:uy mailto:sage [2011/05/15(日) 02:40:39.85 ] いっとくけど、すいとんしても無駄だからな ブラウザ5つもって全てのクッキーがレベル6以上なので、1個潰されたくらいなんともないので^^;;;;
603 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 02:52:16.47 ] >>601-602 死ねゴミ
604 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 03:14:08.73 ] ゲーム作るために速度が欲しいからC++って人もいるだろう プリミティブが多いゲームだとC#じゃ速さが足りない
605 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 04:11:10.08 ] 俺は案件が要求する言語を使うが、そうでないやつがあれがいいこれがいいって言ってるんだろ?
606 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 04:13:24.29 ] プリミティブじゃねぇよパーティクルだよ!あぁ恥ずかしい!
607 名前:uy mailto:sage [2011/05/15(日) 05:05:34.61 ] >>603 お前が死ね ゴミグラマ
608 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 08:44:14.07 ] >>607 死ねゴミ
609 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 09:34:01.17 ] ゴミという単語をNGにしようと思ったけど それじゃGCネタとかメモリ管理ネタが誤爆で見えなくなりそうだし困ったものだ
610 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 10:35:04.63 ] >>609 uyをNGネームに指定してあとは連鎖で
611 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 00:25:12.92 ] C++でクラスのメンバとしてchar型の文字列を扱う方法はありますか? おねがいします。こんな感じで書いてみたんですが、案の定ダメでして。 class hoge { char hogehoge; public: char getHogeHoge() { return hogehoge; } char setHogeHoge(char value) { hogehoge = value; } }
612 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 00:29:51.81 ] >>611 class hoge { char hogehoge[256]; public: char* getHogeHoge(char* value) { strcpy(value, hogehoge); return value; } void setHogeHoge(const char* value) { strcpy(hogehoge, value); } }
613 名前:uy mailto:sage [2011/05/16(月) 07:52:46.15 ] >>608 お前が死ね
614 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 11:25:07.85 ] >>613 お前が死ね
615 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 12:28:17.12 ] >>614 お前が死ね
616 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 12:39:18.70 ] >>613-616 全員死ね
617 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 12:41:34.17 ] >>616 お前が死ね
618 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 13:14:13.55 ] >>615 お前が死ね
619 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 18:11:55.21 ] じゃあ俺が死ぬわ
620 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 23:53:33.74 ] いや俺が死ぬよ
621 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 23:56:59.25 ] はぁはぁ、生き残ったのは俺だけか…
622 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 23:59:50.40 ] 死んで行った仲間のために、俺は戦う
623 名前:デフォルトの名無しさん [2011/05/18(水) 14:02:29.70 ] 例外処理について教えていただきたいのですが、他の人が作ったソースの修正を行います。 __try{}文を見つけました、これをC++のtry{}catch()に変更したいのですが、特に問題ないでしょうか? 環境は、windowsのアプリです。
624 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 14:04:11.34 ] >>623 だめだよwwwwwww それはそれぞれ全然違うものだ
625 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 14:25:05.62 ] try{ __try… } catch{ … }
626 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 14:30:06.78 ] win32構造化例外でぐぐればなんとなくは分かるはず てゆーか何で書き換えたいの?
627 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 20:09:40.63 ] 現在VC++から変数の値をVBに渡してVBで処理するプログラムを作成しています。 VC++でのdll作成、読み込み VBでのdll作成、読み込みはできるようになりました。 しかし以下のサイト www.nextftp.com/swlabo/m5_cpp/hp_dll/dll_00.htm を参考にVC++でdllファイルを作成しても VBではどうしても参照してくれません。参照しようとすると ファイルアクセスが可能で、有効なアセンブリまたはCOMコンポートであることを確認して下さい。 と出ます。 VC++は数値計算をかじった程度の知識しかないので、これ以上はお手上げです。 何がどういけないのか教えてください。
628 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 20:20:26.64 ] スレ違い
629 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 20:43:02.19 ] ∵
630 名前:デフォルトの名無しさん [2011/05/19(木) 20:00:37.39 ] Cがちゃんとしたオブジェクト指向を提供しないからC++やらないといけないよね;;
631 名前:デフォルトの名無しさん mailto:sage [2011/05/19(木) 20:45:37.91 ] C++が「ちゃんとした」オブジェクト指向かどうかは微妙だけどな
632 名前:デフォルトの名無しさん mailto:sage [2011/05/19(木) 21:17:28.94 ] 627です。 解決しました。 お騒がせしました。
633 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 17:32:09.73 ] CとC++の違いを教えてください。、
634 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 17:36:35.19 ] >>633 使えるライブラリが違います C++ではboost使えますが、Cでは使えません。
635 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 17:54:11.54 ] >>634 あっ。て事はCの後はC++でほぼ同じ内容を違う言葉で覚え直す感じでしょうか?
636 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 18:01:04.36 ] とりあえずwikipedia読んだほうがためになると思われ ttp://ja.wikipedia.org/wiki/C%2B%2B
637 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 18:02:49.14 ] ありゃ。 wikiは参考にさせていただきます。 ありがとうございます。
638 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 18:06:44.37 ] うむ。 人に聞いてわかるほど単純じゃないな。 全部、一から勉強しよう。
639 名前:デフォルトの名無しさん mailto:sage [2011/05/20(金) 19:09:24.15 ] wikipediaをwikiっていうな
640 名前:デフォルトの名無しさん mailto:sage [2011/05/21(土) 01:54:51.53 ] wikipedia ⊂ wiki
641 名前:デフォルトの名無しさん mailto:sage [2011/05/21(土) 02:53:46.74 ] pukiwikiってうまそう
642 名前:デフォルトの名無しさん mailto:sage [2011/05/21(土) 11:04:41.03 ] wifi
643 名前:デフォルトの名無しさん [2011/05/21(土) 23:29:00.28 ] VC++ 2010でzlibのlibファイルを作ろうとしているのですが、 大量のfatal errorを吐かれてコンパイルできません。 zlib\adler32.c : fatal error C1853: 'Release\zlib.pch' プリコンパイル ヘッダー ファイルが旧バージョンのコンパイラで作成されています。また、C++ のプリコンパイル済みヘッダー ファイルを C で使用しています (その逆も考えられます)。 zlib\compress.c : fatal error C1853: 'Release\zlib.pch' プリコンパイル ヘッダー ファイルが旧バージョンのコンパイラで作成されています。また、C++ のプリコンパイル済みヘッダー ファイルを C で使用しています (その逆も考えられます)。 以下略 手順は 1.プロジェクトは新規作成->Win32 コンソールアプリケーション 2.表示されたウィンドウのスタティックライブラリを選択して完了 3.zlibの公式からsource code, version 1.2.5, zipfile formatを落として.cと.hをプロジェクトフォルダに入れる 4.既存のファイルから.cと.hを追加し、Releaceでコンパイル プリコンパイル済みヘッダを消してみたり、stdafx.hなどを消してみたり色々試したのですが、 他のエラーを吐き始めるので先に進みません。 宜しくお願いします。
644 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 00:20:15.73 ] .hをコンパイルしている悪寒。つーか、VSスレにでも逝ったら?
645 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 01:00:28.24 ] >>643 暇なので試してみた 1、プロジェクトは新規作成->Win32 コンソールアプリケーション プロジェクト名はzlib(zlib1でもなんでもいいけど),ソリューションのディレクトリを作成にチェック 2、表示されたウィンドウの"スタティックライブラリ"および"空のプロジェクト" を選択し完了 3、 zlibの公式からsource code, version 1.2.5, zipfile formatを落として.cと.hをプロジェクトフォルダに入れる 4、exsample.cを除く他の*.c,*.hをzlibプロジェクトに追加しコンパイル 4996を除けばエラー0、警告0 動作確認方法は 同ソリューションに コンソールアプリケーションプロジェクトを追加し exsample.cを追加 $(OUTDIR)\zlib.libをリンクしコンパイル こちらも4996を除けばエラー0、警告0 実行しても問題はない模様 >4、exsample.cを除く他の*.c,*.hをzlibプロジェクトに追加しコンパイル この行は適当だから他のメイクファイルを参考に確認したほうがいいかも
646 名前:デフォルトの名無しさん [2011/05/22(日) 01:39:12.77 ] >>645 2度ほど、慎重にやってみましたがエラーの内容は変わりません。 もしかすると、と思いfatal errorの内容で調べてみたら プリコンパイル済みヘッダを使用しない、/Tcオプションを付ける、などで対処できるらしいと聞きました。 そこで、プロジェクトのプロパティ->構成プロパティ->C/C++->プリコンパイル済みヘッダ、 プリコンパイル済みヘッダーの項目を使用しないに変更しました。 また、同様にプロパティ->構成プロパティ->C/C++->詳細設定、 コンパイル言語の選択をCコードとしてコンパイルを選択、 プロジェクトをクリーンしてビルドしました。 ビルドは通りました。.libも作成されています。ログを載せておきます。 www.dotup.org/uploda/www.dotup.org1657702.log.html 半分自己解決したようなものでお手を煩わせてすみません……。 ありがとうございました。
647 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 02:18:22.21 ] > そこで、プロジェクトのプロパティ->構成プロパティ->C/C++->プリコンパイル済みヘッダ、 > プリコンパイル済みヘッダーの項目を使用しないに変更しました。 "スタティックライブラリ"の場合はそうだね、すまん > また、同様にプロパティ->構成プロパティ->C/C++->詳細設定、 > コンパイル言語の選択をCコードとしてコンパイルを選択、 拡張子が*.cならCコードとしてコンパイルされるのが デフォルトの動作なので意味無いよ
648 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 03:51:49.25 ] C++で独自のクラスAを格納するベクターコンテナ(STL)があったとき、 Aのoperator==は、フレンドで、グローバルに定義しないといけないの?
649 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 11:03:07.01 ] 例外はオブジェクト指向、特にカプセル化と相性が最悪な気がするんですがどうでしょうか? せっかく実装を隠ぺいしたのに実装に依存して例外処理を書き換えないといけないなんて不愉快ですよね
650 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 12:15:32.99 ] ほお、カプセル化すればエラー処理はしなくても良いと?
651 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 15:08:08.45 ] >>648 なぜ?
652 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 15:16:10.20 ] >>649 例外処理を実装に依存して書き換えるって、意味がよくわからないんだが。 それは例外処理の中身によるだろうし、もしそこが実装依存にしか書けない エラー処理なら、それは例外処理を利用しなくても実装依存にしか書けないんじゃないのかな?
653 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 16:22:54.39 ] >>648 ideone.com/Mdu3w 別にフレンドでグローバルでなくても良い
654 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 16:30:46.19 ] >>652 例えばもともとnothrowだったメソッドが実装変更で例外投げる仕様になったら困るだろ 中身は意識しなくていいのがカプセル化のメリットなのに これでは何を投げるかドキュメントやソースを常にチェックしないといけない そして変更があったらクライアントコードすべてを調べなければならない 例外のせいでカプセル化台無し。こんなバカな仕様があってたまるかってこと
655 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 16:39:36.63 ] >>653 あ、コンパイル通った…… 通らなかったときは何してたんだ…… サンクス
656 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 18:21:43.32 ] #include <stdio.h> struct Man { char name[32]; int age; } int main() { struct Man student; strcpy(student.name, "山田太郎"); student.age = 16; printf("生徒の名前は%dです\n", student.name); printf("年は%d歳です\n", student.age); return 0; } このソースのstrcpyの所に赤波線が出て、マウスを乗せると識別子"strcpy"が定義されていませんと出ます。 どうすればいいのでしょうか? win7・VC++です
657 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 18:27:26.20 ] #include <string.h>
658 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 18:34:14.18 ] >>657 ありがとうございます。 猫でもわかるCなんて買うんじゃなかった・・
659 名前:デフォルトの名無しさん mailto:sage [2011/05/22(日) 20:16:22.38 ] >>654 それは言語仕様というより、設計の問題では。
660 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 14:52:04.45 ] class CFoo { public: template <class CBoo> static int hogehoge(int CBoo::*); …省略… }; という(ような)クラスを目にしたのですが、 staticメソッド hogehoge の引数「int CBoo::*」 が意味不明です;; これはなんの型なんでしょうか?
661 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 15:23:40.52 ] 引数なしintを返すCBooのメンバ関数ポインタ
662 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 15:33:07.62 ] 関数ちがう変数
663 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 16:27:47.21 ] ああ、ありがとう。なんとなく分かって来た。 型int のCBooメンバへのポインタって事ですね。 int を void に変えたらコンパイルエラーになったけど、 それは 型void のメンバなんてそもそもないからなんだね。
664 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 17:43:09.44 ] こういう風に書かないとコンパイルエラーになるけど気のせいか? hogehogeはstaticメンバ関数なので非staticメンバ変数にはアクセスできないだろ class CFoo { public: template <class CBoo> static int hogehoge(int *cbp) { return *cbp; } }; class CBar { public: static int i1, i2; }; int CBar::i1 = 1; int CBar::i2 = 2; class CBar2 { public: static int i1, i2; }; int CBar2::i1 = 3; int CBar2::i2 = 4; int main() { std::cout << CFoo::hogehoge<CBar>(&CBar::i1) << std::endl; std::cout << CFoo::hogehoge<CBar2>(&CBar2::i1) << std::endl; }
665 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 18:07:23.67 ] >>664 なんか指摘おかしくないか? 確かにhogehogeはstaticだから"CFooの"非staticメンバ変数にはアクセスできないけど それが>>660 となんの関係があるのかわからないな hogehogeにメンバ変数のポインタ渡してるだけだぞ?
666 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 18:10:00.84 ] >>665 そうなのか そしたらメンバ変数のポインタを渡したhogehoge()内でどんな事がCBoo::*に対して 出来るのかがわからない
667 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 18:19:12.36 ] >>666 コンパイルエラーになるっていうんだもの おかしいってのはそこ グローバル変数かstaticメンバ変数使えば何かすることはできるだろう 意味は知らんが
668 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 18:19:22.11 ] これなら分かるんだよな class CFoo { public: template <class CBoo> int hogehoge(CBoo* cp, int CBoo::*cbp) { return cp->*cbp; } }; class CBar { public: CBar(int i, int j) : i1(i), i2(j) {} int i1, i2; }; int main() { CFoo cf; CBar cb1(1, 2), cb2(3, 4); std::cout << cf.hogehoge(&cb1, &CBar::i1) << std::endl; std::cout << cf.hogehoge(&cb2, &CBar::i1) << std::endl; }
669 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 18:21:01.12 ] >>667 ああやっぱりか staticメンバ変数にstaticでないメンバへのポインタを渡してもコンパイルエラーになるだけだしな
670 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 18:32:23.08 ] staticメンバ関数がthisを受け取らないという事を知らないとこのエラーの意味は 永遠に分からないだろう
671 名前:デフォルトの名無しさん [2011/05/23(月) 20:56:25.55 ] 文字列変数をグローバルで volatile char recbuf[20]; と宣言して、 mainの中で char s[20]; と定義して、strcpy(s,recbuf); と書くと、 warning: passing argument 2 of 'strcpy' discards qualifiers from pointer target type という警告が出ます。 どのように処理するのが正しいのかわからずに困っています。 どなたかこのワーニングの対処法がわかるかたいらっしゃいますか?
672 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 21:28:00.89 ] >>671 キャストする 俺はconst_castはvolatileも外せるっていう程度の知識しかない人なので それが本当に正しい対処法なのかは知らないが
673 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 21:33:43.36 ] >>672 それが正しいかどうかがわからないので困ってます。 volatile char* を char* にキャストすることの意味が いまいちよくわからないですよね。
674 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 21:51:53.10 ] const char* にキャストすればいい
675 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 22:33:05.35 ] それが本当にvolatileなら、迂闊に外していいものか充分に検討すべき。
676 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 23:09:09.73 ] >>675 どうせ外さなくったって暗黙のキャストが発生するだろ どうしたらいいんだよ
677 名前:デフォルトの名無しさん mailto:sage [2011/05/23(月) 23:17:17.18 ] いやだから、そのvolatileな領域にアクセスする前に排他処理を行なわなくていいのか、などの検討をするべきだ、と。
678 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 05:06:31.12 ] C++でのクラス構成で質問です。 自分はよくこういう事をします。(文法細かい部分無視で説明用に省略) Class A{ MyDataClass data; // データ管理クラス B ChildClass; A(){ ChildClass.pdata = &data; } } Class B{ MyDataClass* pdata; // データ管理クラスポインタ } シングルトンパターンでの構築方法は知ってますが、ついついこっちのが簡単なのでやってしまいます。 こういうのは一般的なんでしょうか?それとももっと良い方法があるのでしょうか?
679 名前:678 mailto:sage [2011/05/24(火) 05:13:56.85 ] さすがにMyDataClassのアドレスを次々と下へいくつもリレーしていく数が多くなれば、 シングルトンパターンで構築します。 しかし、我流の組み方故に果たして自分はオブジェクト指向プログラミングしているのか? そもそもそんな構築方法でいいのか自信が無くなってきました。 そもそもテンプレートとかも利用価値を感じたことがありません。 単一オブジェクトや変数を扱うなら小細工いらないし、複数のオブジェクトを扱うようなら テンプレートの中で条件分岐が大量に増えてややこしくなるので、別関数いくつも用意したほうがいいように思います。
680 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 08:44:54.64 ] 相互参照をどう解決するかってこと? 普通に弱参照つかったり、引数で親をリレーしたりとかじゃねーかな
681 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 10:46:56.93 ] >別関数いくつも用意したほうがいいように思います。 テンプレートの読み難さは尋常じゃないよな。 ありゃ完全にエロい人のための仕様だ。
682 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 11:06:21.92 ] そうか? std::min()なんてシンプルそのものじゃないか。
683 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 12:30:12.27 ] 派生クラスの間に合わせ感はすごい。 完全に後でちょっとした使用変更に対応する為のもの。 最初から組み込むのは混乱の元。
684 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 13:04:36.49 ] メタプロまで出来るとテンプレートの凄さが理解できるんだけど もはや完全にバッドノウハウだから だったら最初から言語機能に組み込んで綺麗に書けるようにしろよとは思う
685 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 13:37:02.25 ] いま勉強中で仮想基本クラスとかやってるんだけど、 本当にこんなややこしいもので開発なんてできるのけ?
686 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 13:48:04.47 ] 初心者的な質問で申し訳ありませんが、よろしくお願いします。 AとBのメソッドがあり、複数のスレッドで非同期的にメソッドが呼ばれています。 AとAが同時に呼ばれるときに排他処理をする必要は無いのですが、AとBが同時に呼ばれてはいけないので、排他処理をする必要があります。 この場合、一般的にはどのように排他すればよいのでしょうか? Windows環境でWin32APIを使用しています。
687 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 17:36:12.12 ] EnterCriticalSection
688 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 19:52:09.97 ] >>685 問題が発生するような多重継承が出てきた時点で 設計がおかしいくないか疑うべきだがな
689 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 22:01:42.86 ] 結局CとC++はどっちのが実行速度速いんだ
690 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 22:28:25.36 ] >>689 腕の良いプログラマーが書いたほう。
691 名前:デフォルトの名無しさん [2011/05/24(火) 22:57:03.38 ] こういうバイナリファイル(先頭から1,2,0,4,0,0,0) 0102 0004 0000 00 ... を先頭から1バイト、2バイト、4バイトで読み込むと 1,2,4にならずに1,0,4になるのですが、これはなぜですか? ifstream ifs ("mem.dump"); ifs >> buf_1; printf ("%x ", buf_1); ifs >> buf_2; printf ("%x ", buf_2); ifs >> buf_4; printf ("%x ", buf_4);
692 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 23:03:00.82 ] 結果は $ ./a.out 1 0 4 です。
693 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 23:06:05.14 ] 違った。初期値が入ってました。 1バイト目が1(正しい) 2〜3バイト目が0(間違え) 4〜7バイト目が変わらず(間違え) です。とにかくおかしいです。
694 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 23:12:58.60 ] わかった。アライメントがあってないと壊れて0が帰ってきて それ以降一切読めなくなるのですね。 飛んだ欠陥品だ > ifstream
695 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 23:22:25.71 ] >>691 buf_1, buf_2, buf_4の型は?
696 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 01:58:32.67 ] >>694 clear()やってないに1票
697 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 02:37:23.53 ] オブジェクトのメンバを介してゲーム上のキャラクタ同士がダメージを与えたりするものなのだろうか。 いきなりだが、ゲームプログラムの噺です。
698 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 03:00:50.40 ] >>694 欠陥品なのは君の頭の方です #include <iostream> #include <fstream> #include <iomanip> const char* const FILENAME = "test.bin"; int main() { std::ifstream ifs(FILENAME, std::ios::in | std::ios::binary); char buf[128]; if (!ifs) return -1; ifs.get(buf, 7); std::cout << std::setw(1) << std::hex << std::setfill('0') << std::right << static_cast<unsigned>(*reinterpret_cast<unsigned char*>(buf)) << std::endl; std::cout << std::setw(2) << *reinterpret_cast<unsigned short*>(buf + 1) << std::endl; std::cout << std::setw(4) << *reinterpret_cast<unsigned*>(buf + 3) << std::endl; }
699 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 03:04:39.50 ] 桁数を間違えていたので修正 #include <iostream> #include <fstream> #include <iomanip> const char* const FILENAME = "test.bin"; int main() { std::ifstream ifs(FILENAME, std::ios::in | std::ios::binary); char buf[128]; if (!ifs) return -1; ifs.get(buf, 7); std::cout << std::setw(2) << std::hex << std::setfill('0') << std::right << static_cast<unsigned>(*reinterpret_cast<unsigned char*>(buf)) << std::endl; std::cout << std::setw(4) << *reinterpret_cast<unsigned short*>(buf + 1) << std::endl; std::cout << std::setw(8) << *reinterpret_cast<unsigned*>(buf + 3) << std::endl; } 実行結果 01 0002 00000004
700 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 05:35:25.85 ] A.h #ifndef classA #define classA class A{ public: class B{ public: static const int foo; }; }; #endif A.cpp #include "A.h" const int A::B::foo=0; M.cpp #include <iostream> #include "A.h" int main(int arg, char** argv){ int i=0; switch(i){ case A::B::foo: std::cout << "hoge" << std::endl; } return 0; } ***** こう書いたら「M.cpp:6: error: ‘A::B::foo’ cannot appear in a constant-expression」と怒られるのだけれど、 なして? それと、クラス構造をそのままにしたい上でこういうとき、どうやったら良いんでしょう。 無理なのかな
701 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 06:10:02.38 ] fooをenumにしてみるしかなひ
702 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 06:21:29.13 ] >>701 やっぱりそうなんかー enumは値の名前がグローバルになるのでイヤなんだ 結局クラス外にインナークラスを追い出して、 クラスじゃなくてnamespaceにしました orz ※ でもA.cppの中にmainがあると上のソースで通るんだよなぁ なんなんだー
703 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 06:24:55.20 ] え?インナークラス内でもenum使えるよ?
704 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 08:35:09.63 ] え? enumの名前がグローバルって何そのC。
705 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 09:01:17.20 ] ごめんenum勘違いしてた
706 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 09:24:26.67 ] これだとアライメントが揃ってない読み込みでifstreamが壊れる。 ifstream ifs ("dump.bin"); char buf_1 = -1; short buf_2 = -1; int buf_4 = -1; ifs >> buf_1 >> buf_2 >> buf_4; printf ("buf_1 = %x\n", buf_1); printf ("buf_2 = %x\n", buf_2); printf ("buf_4 = %x\n", buf_4); バイナリデータは01 02 00 04 00 00 00 ... 実行結果は、 buf_1 = 1 buf_2 = 0 buf_4 = ffffffff
707 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 09:52:56.11 ] template<int i> { int xxx() { if (i == 0) { ... } else { ... } } }; このメンバー関数xxxをテンプレート関数にしてifを使用しないようにしたいと思っています。 i == 0で特殊化すれば良いと思うのですが、どのように記述すればよいですか?
708 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 09:54:27.14 ] template<int i> struct x{ でした。
709 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 10:28:32.90 ] template < int i > struct x { int xxx( void ) private: int xxxZero( void ) { ... } int xxxNonZero( void ) { ... } };
710 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 10:37:05.48 ] 途中で送っちゃった これでおk #include <iostream> using namespace std; template < int i > struct helper { } ; template < int i > struct x { int xxx( void ) { return dispatchXxx( helper< i >( ) ) ; } private: int dispatchXxx( helper< 0 > const & ) { return xxxZero( ) ; } template < class T > int dispatchXxx( T const & ) { return xxxNonZero( ) ; } int xxxZero( void ) { cout << "zero" << endl ; return 0 ;} int xxxNonZero( void ) { cout << "non zero" << endl ; return 1 ;} }; int main( void ) { x<0> x0; x<1> x1; x0.xxx(); x1.xxx(); return 0; }
711 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 10:56:44.45 ] >>710 ありがとうございます。思ってたより複雑だなあ。精進します。 > template < int i > struct helper { } ; これはint => 型に変換? マップ?するテクニックでしょうか?
712 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:09:10.06 ] >>711 >707ではメンバ関数だけどクラスから独立させちゃっていいの? それだったらもっとずっと簡単。
713 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:20:20.34 ] 中でメンバー関数を呼ぶので、メンバー関数じゃなければだめです。
714 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:24:58.75 ] 関数を宣言するときと定義するときとの両方で型を明示するのは何で?
715 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:31:33.54 ] めんどくせぇなぁ。インスタンスの参照を渡すクラス外関数にしちゃえばいいのに。
716 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:31:39.54 ] Visual Studio 2005のC++でプログラミングしてます。 ごくまれに実行ファイルの明らかに計算結果がおかしくなってしまうことがあって、 前ファイルをリビルドすると治ります。 これってC++だと起こりうることなんでしょうか。 それともPCのどこかがおかしくてobjファイルが壊れたりしているのでしょうか。
717 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:36:18.27 ] >>716 VC++がおかしいまたは時計がおかしい C++がおかしいということは無い
718 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:38:46.92 ] たぶんタダのバグって落ち
719 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:43:38.10 ] >>716 project propertyのC++/GeneralのTreat warnings as errorsをyesにしろ。これで9割方解決する。
720 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 11:43:40.85 ] 未初期化変数か未初期化領域がありそうだな。
721 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 12:42:43.68 ] >>706 アライメント関係無い バイナリを>><<で読み書きすんな
722 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 14:29:22.25 ] >>721 C言語の勉強をやり直せ。 >>706 の使い方は完全に正しい。
723 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 14:59:56.83 ] C言語かよ
724 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 15:58:57.99 ] >>722 アホ >>706 はC++だよ しかもテキストデータではなくバイナリデータを読み書きしてるんだ バイナリデータに>>と<<は禁物 C言語でもバイナリデータの読み書きにはfread()とfwrite()を使うだろうが それと同じ よく話が分かってないのに余計な首突っ込むなカス
725 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 16:11:12.59 ] >>724 あまり弱いものいじめはするな。彼は可愛そうな子なんだ
726 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 16:11:21.86 ] >>724 バカはお前だ。ifstreamはバイナリ専門ではない。 わからないなら引っ込んでろ。
727 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 16:12:42.50 ] ifstream ifs ("test"); int number; ifs >> number; ↑ これは完全に正しい。分かったら恥ずかしさのあまり布団に頭突っ込んで悶えてろ。
728 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 16:18:29.41 ] 文字をデータとするrange(istreamで仮定されているものはここまで汎化されたものではないのだろうけど) から読み取るものと考えると1byteが1文字に対応する多くの環境なら問題ないのかな? 一応openmodeにbinaryフラグが用意されてるからこういう使い方も想定済みとは思うのだけど
729 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 17:12:41.89 ] >>727 まだ言ってるのかしつこいなあ 話は>>706 から来てるんだぞ 「バイナリデータ」と書いてあるのが目に入りませんか?めくらですか?
730 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 17:19:53.26 ] >>726 "dump.bin"の中身が a 111 222 とかだったら>>でいいだろう しかし今の場合は 01 02 00 04 00 00 00 と続くバイナリデータの読み書きだ この場合はオープンの時に>>699 のように std::ios::binary を指定し、さらに メンバ関数 get() でないと正しく読み取れない もちろん改行文字など指定してはいけない テキストではないのだからね 嘘だと思うんなら自分でバイナリファイルを作って読み書きしてみろ
731 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 17:41:34.90 ] www.cplusplus.com/reference/iostream/istream/ によるとデータの解釈を伴う抽出するのが>>の役割だから これを元にすればその解釈という作業が必要無い生データを読み込む場合であることと 別にgetなどのunformatted dataに対する操作を提供するメンバ群が用意されていることを考えると>>の使用は不適であることは言えるか
732 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 17:45:26.34 ] >>731 「言えるか」じゃなくて実際に試してみろって 話はそれからだ 話がややこしくならないようにgccを使え
733 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 17:47:39.58 ] >>732 お前がまず試せよ低能
734 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 17:52:18.80 ] >>733 #include <iostream> #include <fstream> #include <iomanip> const char* const FILENAME = "test.bin"; int main() { std::ifstream ifs(FILENAME, std::ios::in | std::ios::binary); unsigned char c; unsigned short us; unsigned u; if (!ifs) return -1; ifs >> c >> us >> u; std::cout << std::setw(2) << std::hex << std::setfill('0') << std::right << static_cast<unsigned>(c) << std::endl; std::cout << std::setw(4) << us << std::endl; std::cout << std::setw(8) << u << std::endl; } 実行結果 01 0000 0040b0ac
735 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 18:06:16.66 ] いい加減にあきらめろ>>733 ちなみに使ったファイルは>>699 と同じ物 バイナリエディタで中身を覗けるから間違いない
736 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 18:55:41.69 ] なあなあ、なんでこんなに低レベルなの?
737 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:00:09.20 ] 自分の思い通りにならないのは糞だって決めつけてるからさ
738 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:00:27.15 ] >>736 お前みたいのが多いから
739 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:04:42.58 ] バイナリデータを>>で読めないとか主張する奴は仕様から読み直せ。 まったく禁止されてない。もう見てられない
740 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:08:54.60 ] もうねアホかと
741 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:15:06.34 ] 俺はistream::readとostream::write使うようにするけど>>でも空白とか改行に影響されずに読める方法があるなら興味ある
742 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:17:49.68 ] >>739 が教えてくれる
743 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 19:48:15.25 ] template <class T> class Binary { T _data; public: Hoge(T data=0) : _data(data){} ... friend istream& operator>>(istream& is, Binary& b) { is.read(reinterpret_cast<char*>(&b._data), sizeof(T)); return is; } ... }; みたいのを用意してやれば ストリーム演算子で読み書き出来るのは分かるけど プリミティブな型ではどうやるかは分からんな >>739 氏に期待
744 名前:722 mailto:sage [2011/05/25(水) 19:50:05.56 ] ごめん 俺の勘違いだった
745 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 21:04:41.51 ] 今日も大漁でした。本当にありがとうございました。 またのご利用をお待ちしていません。
746 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 21:19:46.18 ] >>744 バーカ 仕様書ぐらい用意しとけ 恥かくぞ
747 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 21:20:37.20 ] >>736 OSも書ける低レベル言語です
748 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 21:52:05.42 ] >>699 も厳密には間違っているんだけどな get()じゃなくてread()を使わなければならない get()では改行文字が現れるとそこで読み取りを終了してしまう まあ operator>>でバイナリを読み取れると顔を真っ赤にしてファビョっていた ヤシよりはマシだけどな
749 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 00:44:12.10 ] C言語以前の問題なのですが コマンドプロントでディレクトリの移動がよく分かりません。 デスクトップ上に保存しているメモ帳に「test.c」と名前を付け chdir C:\Users\ユーザー名\Desktop\test.c.txt とコマンドプロンプトに入力したところ ディレクトリ名が無効ですとなりました。 ディレクトリ名に問題があるとおもうのですがどうなおせば良いのでしょうか? 独習Cという本を買ってさっきから始めたのですがこの辺詳しく載っていなくて困っています
750 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 00:49:17.83 ] デスクトップにtest.c.txtっていうディレクトリがあるのか? 違うならそこ削らないと
751 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 00:49:34.53 ] ディレクトリとファイルの区別がつかない人ですか?
752 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 00:53:10.05 ] >>750 ,751 どうやらディレクトリとファイルの区別が付いていなかったようです。 調べてみたらなんとか解決しました。ありがとうございます。
753 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 01:50:34.74 ] その本にはなんて書いてあるんだ?
754 名前:デフォルトの名無しさん [2011/05/26(木) 17:12:19.44 ] cinって英語で何て単語の略なんですかね?
755 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 17:28:38.37 ] cはcharacter inはstandard input
756 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 18:23:19.70 ] Cの標準入出力なんだから、(c)のためのin/out とか、標準なんだから、(c)ommon とか、 当時はキャラクタベースだから、(c)onsole とか、バイト単位だから (c)haracter とか、 好きなの選べ。
757 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 18:40:39.97 ] Cってほんとにあいまいな言語だな
758 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 18:44:48.75 ] www.libjingu.jp/trans/bs_faq2-j.html#cout "c"は"character"の略です。これは、iostreamsが値とバイト(文字)表現を対応づけるものであるという理由からです。
759 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 19:19:27.34 ] 知らんかった…今までconsoleだと思ってた でもたしかにiostreamヘッダだしconio.hみたいに明記されてるわけじゃないな
760 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 20:24:01.25 ] >>757 CとC++一緒にすんな
761 名前:デフォルトの名無しさん [2011/05/26(木) 21:07:57.23 ] 世間一般(と言っても、理科系の大学)では、CもC++も一緒くだだよ。
762 名前:デフォルトの名無しさん [2011/05/26(木) 21:32:15.61 ] Character INputでcinって事でOK? 変な端折り方だな。 coutはなんとなく意味分かるのに。
763 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 01:42:31.93 ] マス目のゲーム戦闘画面ってDXライブラリで製作出来ます? マップに座標を打ち込みつつ初期化 {0,0,0} {0,1,1}の様な形。 for文でマップのマス目左上からズレていくように書き switch文で case 0 は DrawGraph 画像 case 1 は 〜〜 の様にしてみたんですが、上手く表示されません・・・。 マス目ごとに対応した番号の画像を表示させるにはどのようにすれば宜しいでしょうか?
764 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 02:15:37.60 ] >>762 INput OUTput むずかしいね
765 名前:763 mailto:sage [2011/05/27(金) 04:39:14.04 ] すみません スレ間違えました
766 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 19:02:14.31 ] >C++は関数のオーバーロードがあるから保守性が高い ?
767 名前:uy ◆yyC0rYWEq2 mailto:sage [2011/05/29(日) 17:34:51.12 ] >>766 何この人 だれのレスを引用したの? きもちわる・・・
768 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 17:43:18.41 ] >>767 お前が気持ち悪い
769 名前:デフォルトの名無しさん [2011/05/29(日) 19:25:46.47 ] すみません。C++にて、あるクラスのコンストラクタを 関数の戻り値にして、main関数で受け取るということはできるでしょうか? 一応、できるみたいなんですが、文法上ただしいのでしょうか・・ なんしろ、コンストラクタというと、新しいオブジェクト生成しか使ったことがないんで・・
770 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 19:57:57.87 ] >>769 「コンストラクタを関数の戻り値」というのがよくわからないが、これのこと? 値を返すならコピーされるから問題ない。 string f() { return string("abc"); } int main() { cout << f() << endl; }
771 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 20:14:29.21 ] コンストラクタのメンバー関数ポインタをとれるかってことじゃないの?
772 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 20:26:32.64 ] まぁそれだったらコンストラクタのアドレスを取得してはいけないでFAだな >>769 はなにをしたいんだろうな オブジェクトを生成する関数を変数に入れたいとか?
773 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 20:40:17.85 ] コンストラクタ(デストラクタも)のアドレスは取得できない、じゃないの?
774 名前:769 [2011/05/29(日) 21:21:04.85 ] Area Ex :: getArea() { return Area(); // Areaクラスのコンストラクタ } void Ex :: nanigasi() { Area area = getArea(); }
775 名前:デフォルトの名無しさん [2011/05/29(日) 21:24:55.16 ] 簡単に話すと↑こういうことです。最初のselectArea()関数の戻り値で Area関数のコンストラクタを使っています。 以上のことは、C++の文法上許されていることなんでしょうか? もちろん、最初から、2番目の関数(getArea関数)で、 Areaクラスのオブジェクトを作れば一番簡単なのは当たり前ですが・・
776 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 21:25:30.72 ] Area()は一時オブジェクトの生成だよ それがコピーされてareaに代入される そりゃ結果的に当然コンストラクタ自体は呼び出されるが、 コンストラクタを直接呼び出してるわけじゃない
777 名前:769 [2011/05/29(日) 21:27:00.40 ] まちがえた・・・正しくは、 >最初から、2番目の関数(getArea関数)で、 最初から、2番目の関数(nanigasi関数)で、 です・・・
778 名前:769 mailto:sage [2011/05/29(日) 21:29:13.73 ] >>777 ああ、一時オブジェクトの生成っていうんですか。この場合は。 本を読んでいて、なにか、見慣れない構文だなと疑問におもっていて どうも頭を悩ましていましたので・・ ありがとうございます。だいぶすっきりしました。「一時オブジェクトの生成」で、 よくググッてみます。 ありがとうございました。
779 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 21:30:20.88 ] >>777 メンバ関数へのポインタなら返せる staticじゃなければthis、つまり本体のオブジェクトを指すポインタも必要だが・・・・
780 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 21:38:39.26 ] ずれてやがる
781 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 21:40:33.63 ] 最短経路探索とかのテスト用に、ノード群とそのエッジ群をランダムに作りたいんだけど、 エッジの作成をノードを2つランダムに選んで作成ってすると、明らか遠すぎる所 と繋がっちゃってぐちゃぐちゃな経路になってしまう。 よくあるこんな図みたいに、ある程度近くのノードと繋がってる綺麗な経路をランダムに 作る方法ってありませんか?
782 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 21:47:44.98 ] 画像貼るの忘れてた。 テスト用に生成するだけだから、実行速度や正確性を求めるよりも楽に作れる方が良いです ttp://www.deqnotes.net/acmicpc/dijkstra/graph.png
783 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 22:17:09.78 ] ココで聞いていいのか微妙なんですが、 GNU General Public License でのソフトを、自分のソフトが途中で起動する、という状況の時、 自分のソフトと利用するソフトの両方を配布するなら自分もGNUである必要がありますか? また、もし自分のソフトを使う人に、GNUのソフトのダウンロードを任せるとしたら、 自分のはGNUである必要がありますか?
784 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 22:22:16.26 ] >>781 平面グラフにするとか、n部グラフにするとか
785 名前:783 mailto:sage [2011/05/29(日) 23:26:35.74 ] やはり質問取り下げます。すみません
786 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 23:45:09.49 ] >>782 どの程度の規模で作るのかにも寄るけれど、せいぜい100ノードくらいでいいのなら、 全ノード間の距離を計算してもたいしたことないんじゃないか? あとは、各ノードで距離順にソートして、範囲も個数も好きにしたまえ。
787 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 03:01:36.08 ] >>784 >>786 ありがとう、楽な方の予め距離計算して近い物同士を繋げる方法でいってみることにします。
788 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 09:41:01.83 ] >>781 距離をパラメーターにして、乱数を一様ではなく正規分布とか、自然な分布にすればそれっぽく見えると思うよ
789 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 15:42:46.99 ] vectorでクラスを保持していて、そのクラスの中の変数を基準に昇順でソートしたいんだけど、 どうすればできますか? 一度vectorから取り出して、自分で書いたソート関数でソートしてまた戻すってするしかない?
790 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 15:54:09.12 ] operator< と operator> を用意しなされ
791 名前: 忍法帖【Lv=1,xxxP】 mailto:sage [2011/05/30(月) 16:07:27.31 ] 前者だけで充分。
792 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 17:12:39.45 ] でもなんか比較がひとつだと対称性がなくて気持ち悪い
793 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 17:15:23.02 ] reverse_iteratorで取り出せば逆順になる
794 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 17:20:33.75 ] >>789 環境とオブジェクトの個数にもよるけれど、オブジェクト数に対してメモリが十分あるなら vectorで保持してそれとは別に、setなりmapなりで比較関数を用意して、 オブジェクトを登録するメソッドを呼ぶたびに、vectorと、ソート用コンテナにポインタで 登録するとかした方が楽じゃないか? かっこわるい?
795 名前: 忍法帖【Lv=1,xxxP】 mailto:sage [2011/05/30(月) 17:37:07.51 ] 格好悪いと言うか、面倒臭い。
796 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 17:47:25.19 ] 楽か?
797 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 17:55:30.03 ] >>789 自分で書いたソート関数って叙述関数の事か 普通の関数にしろ関数オブジェクトにしろlambda式にしろ std::sort()で行けるだろ もちろんdeep copyをするためにコピーコンストラクタと代入演算子は定義しとくのが コンテナにクラスを入れる必要条件だが
798 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 22:00:00.50 ] ありがとう、operator定義してsortで実装しました。 今までoperatorって難しそうだし面倒そうだと、勉強せず避けてきてたけど、やってみれば 意外とすんなり理解できたし、何よりすごく便利だね もっと早く身につけておくべきだった
799 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 22:13:42.73 ] そしてop地獄
800 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 23:15:30.76 ] 次は何でもかんでもoperatorを付ける病に
801 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 23:57:48.21 ] >>800 いやいやshallow copyしか必要ないクラスにはいらないだろ 要するにコンテナに入れるクラスの要件がCopy ConstractableでCopyableであればよい 最初なぜauto_ptrがコンテナに入れられないのか随分悩んだけどそのお陰でよく理解できた
802 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 00:01:29.36 ] 普通にshared_ptr使えばよくね?
803 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 00:02:38.46 ] >>802 今はな その当時はboostなんか無かったんだよ
804 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 00:14:37.34 ] >>803 > その当時 > 789 名前:デフォルトの名無しさん[sage] 投稿日:2011/05/30(月) 15:42:46.99 え?
805 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 03:46:23.25 ] ifstreamを最初にテキストモードで開きました。 途中からバイナリモードで読み取りをしたくなった場合、 どのようにモードを変更すればいいですか?
806 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 03:53:14.82 ] read/write
807 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 04:24:04.15 ] >>806 ありがとうございます。なんかトンチンカンな質問だったかもしれません
808 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 04:40:06.47 ] なぜか下のプログラムではファイルの真ん中あたりまでしか読めませんでした。 途中なのにwhileを抜けて実際のファイルサイズの大体半分くらいの ByteNum サイズになってしまいます。どんな原因が考えられますか? std::ifstream ifs(Filename); int ByteNum = 0; while(true) { unsigned char buf[1] = ""; ifs.read(reinterpret_cast<char*>(buf),1); ByteNum += 1; if(ifs.eof()) break; }
809 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 05:28:12.08 ] 改行が\r\nから\nに変わったとかじゃないの? あとeof()の使い方が間違ってる それじゃ一回余計にread呼んでByteNumも1足しちゃうよ
810 名前:808 mailto:sage [2011/05/31(火) 06:14:18.46 ] >>809 やはり改行の関係のようでした。 結局バイナリモードで全部やったところきちんと読めました ありがとうございました
811 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 15:08:49.71 ] よく分からないので教えてください えっと、自作クラスAを格納するvector<A>のSTLコンテナがあるとして そのコンテナのインスタンスをI1、I2とかとします クラスAには単純な代入と比較「A& operator=(const A&)」や、 「bool operator==(A&)」を定義してます ここで「単純な」というのは、メンバをコピーや比較するだけと言う意味です ここでコンテナインスタンスI1, I2に対して、I1 == I2や、I1 = I2などを使うと g++で色々(/stl_algobase.hのなかで)エラーがでたあと、 「 note: candidates are: A& A::operator=(A&)」と怒られます こういう自作クラスをSTLコンテナに格納し==や=をコンテナに対して使うとき、 Aに==や=を単純に定義するだけじゃ無理なんでしょうか 無理な場合、なぜ無理かという構造を教えてくれたらうれしいです できる場合、なにが足りないのか教えていただけたら助かります お願いします
812 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 15:27:53.08 ] あ、いけました すいません お騒がせしました
813 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 16:51:42.45 ] >>811-812 全部読んだじゃ無いか。
814 名前:デフォルトの名無しさん mailto:sage [2011/05/31(火) 17:51:06.91 ] >>811 こういう事だろ std::vectorにはメンバ関数operator==があるので、これを呼び出すとコンテナ内の オブジェクトのoperator==をそれぞれ呼び出して比較する ideone.com/12uke
815 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 07:07:38.25 ] std::copy std::equal
816 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 07:14:01.86 ] >>813-814 すいません どうもコンテナに入れるクラスにoperator==を定義するとき、 引数と関数自体をconstにしないといけないみたいですね そしてconstで受け取ったクラスインスタンスのメンバにコンテナがあったら 返ってくるイテレータ型がiteratorじゃなくてconst_iteratorなんですね 勉強になりましたが、C++ややこしいっす……
817 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 09:10:09.38 ] >>816 そうなのかかえって勉強になった 俺はconstの参照で引数をバインドすると引数の受け渡しが高速になるので そうしていただけだが(コピーコンストラクタの呼び出しが行われない)、const関数は 非constの引数も受け取れるけどその逆はだめだからな
818 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 11:35:17.70 ] ある法則にしたがってデータを変換し、 新しいストリームオブジェクトを返す関数があったとして MyStream * convert(MyStream *source) この関数はストリームのヘッダ位置をどうするのが一般的? source ストリームのヘッダ位置は関数呼び出しの時点に戻しておく source ストリームのヘッダ位置は元に戻さず、最後に読み取った位置で放置 関数が返すストリームはヘッダ位置を0にしておく 関数が返すストリームはヘッダ位置はデータ末尾(追記可能な位置)にしておく 用途によって違うなら、想定しているのは... ZIPからファイルを読み出す MyStream file = GetFileFromZipStream(zipStream) とか スクリプトのプリプロセッサ MyStream preprocessedSource = RunPreprocessor(rawSourceTextStream) とか。
819 名前:デフォルトの名無しさん [2011/06/01(水) 14:39:43.26 ] 今、抽象クラスの勉強してるんですけど、まどマギ思い出したわ。
820 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 15:15:43.93 ] >>816 これって今や、「C++が」ややこしいって印象になるんだな…
821 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 15:35:54.51 ] >>819 kwsk
822 名前:デフォルトの名無しさん [2011/06/01(水) 18:18:14.79 ] >>821 virtualつけると具体的なオブジェクトから抽象的な概念としての存在になる辺りがまどかのラストに似てるから。 //魔法少女クラスの宣言 class Mahousyoujo{ private magic; public: void mahousyoujo(int personal); }; //魔女クラスの宣言 class Majo:public Mahousyoujo{ public:Majo(int personal); }; ↓ //神クラスの宣言 class Madoka{ protected: int magic public: virtual void majo(int personal); }; //あと書くのめんどいや。
823 名前:デフォルトの名無しさん [2011/06/01(水) 18:29:35.92 ] 1000×1000ぐらいのBMPの画像データ読み込もうと char a[10000000] ってでかい配列作ったら大きすぎてプログラムがメモリ確保できなくて動きませんでした。 こういうのって一般的にどうやって解決するんでしょうか?
824 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 18:32:01.53 ] >>823 先頭にstaticつけとけ
825 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 23:10:06.09 ] >>823 ファイルをメモリの代わりに使う
826 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 07:29:25.05 ] >>823 newかmallocで確保
827 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 11:06:40.37 ] すみません。2つ質問なのですが、 1.CreateWindowで作った子窓を移動・消去するにはどうすれば良いのでしょうか? 2.CreateWindowで作った子窓同士を、いちいちマウスでクリックせずキー操作でフォーカスを移動したいのですが そうした方法の解説サイトは無いでしょうか?
828 名前:827 mailto:sage [2011/06/02(木) 12:11:45.16 ] 1の子窓の移動はSetWindowPosで出来る事が解りました。下手に窓を作ったり消したりは考えて見ると怖いので見えない位置に移動させるべき・・ですね。きっと。 フォーカスについても自己解決目指していろいろ調べてみようかと思います。
829 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 12:15:02.68 ] アホな手法使うんじゃない
830 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 12:32:45.84 ] >>828 それが正解です。 見えないところは、マルチディスプレイに気をつけるように。
831 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 13:08:35.39 ] MinGW gppでコンパイルしてるんですが、このばあい成果物を公開するとしたら、ソースも公開しないとだめなんですか?
832 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 13:13:05.01 ] いや、一部のソースも公開しないなら、しなくていいんじゃない。
833 名前:827 mailto:sage [2011/06/02(木) 13:35:44.82 ] フォーカスについてもSetFocusで出来るとわかり、自分なりの形で組んでみようかと思います。 >>830 マルチディスプレイ・・環境に対しても気をつけ様と思います。 ご助言ありがとうございました。
834 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 17:06:41.43 ] >>833 829さんの忠告が見えないの? 見えないところに移動じゃなくてShowWindowで何とかしろ。
835 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 20:59:27.45 ] 環境:VC++2008 MFC 同じリストの内容を持つコンボボックスを16個作りたい。(IDC_COMBO1~16) 16個のDDX変数を用意し、16回値を格納するのは綺麗じゃないので1個のDDX変数でなんとかしたいです。 ソースは以下の物で練習しています。 www.g-ishihara.com/mfc_cb_01.htm どのようにすれば簡潔にかけるでしょうか?
836 名前: 忍法帖【Lv=2,xxxP】 mailto:sage [2011/06/02(木) 21:08:41.34 ] 配列使えば?
837 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 07:23:30.44 ] [萌+]【アニメ/IT】「ほむほむ」だけでプログラミングできる言語登場 わけがわからないよ headline.2ch.net/test/read.cgi/bbynews/1307041589/ 二進数かよ
838 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 07:29:14.70 ] >>837 どうせbfを差し替えただけなんだろ
839 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 07:47:25.06 ] bf派生?いいえgrass派生です
840 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 08:11:12.32 ] そっちか
841 名前:福盛俊明 [2011/06/03(金) 09:11:45.19 ] 俺はDarkBASICの天才♪” 俺に答えられない質問はない 質問はこちらへ www.geocities.jp/courant_de_console/main_street/index.html アハアハ〜♪”
842 名前:デフォルトの名無しさん [2011/06/03(金) 19:30:13.92 ] プログラムをassert()で終了させた際に、 それまでに開いていたストリームを閉じてしまいたいのですが、 やり方があるならば、どなたか教えてください
843 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 19:52:46.95 ] assertは内部でabortを呼んでプログラムを終了するが、 abort呼び出しはシグナルSIGABRTを投げるので、 signalハンドラでそれを拾えばそういうこともできる
844 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 20:01:23.50 ] シグナル拾ったら、肝心のcoreが出来ないじゃん。
845 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 20:12:25.88 ] そんなこと無いだろ
846 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 20:13:25.38 ] やってみろよ。
847 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 20:20:44.26 ] やってみたら当たり前のようにcore吐いたwww 低能哀れすぎwww
848 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:18:20.47 ] そもそもSIGABRTは拾えない飢餓。
849 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:20:08.55 ] Assertは使うものじゃないって習った バックトレース拾えないから
850 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:21:06.09 ] そもそもassertはそういう使い方をするものじゃないしな。
851 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:21:58.11 ] なるほど、シグナルハンドラから戻ってきたらSIG_DFLに再設定してもう一回自殺するのか。
852 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:39:54.51 ] 言語規格書にはSIGABRTハンドラはreturnしないと書いてある つまり、登録したハンドラの実行後プログラムは終了する
853 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:44:07.98 ] >>842 atexit()で関数を登録して、そこでfcloseall()を呼ぶとか。
854 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:44:43.67 ] >>853 abortだから無理っしょ
855 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 22:45:52.06 ] つかassert書くぐらいで終了処理したいなら if文書いて中の最後でexit呼べば良いと思う
856 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 23:00:49.16 ] 本当は sigaction() の方が便利だが、標準の範囲だとこんな感じ? #include <stdlib.h> #include <stdio.h> #include <signal.h> void sig_abort(int sig) { puts("interrupt"); } int main(void) { if (signal(SIGABRT, sig_abort) == SIG_ERR) { perror("Couldn't establish sig_abort"); }; abort(); puts("Do not abort"); return 0; }
857 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 23:05:04.75 ] >>825 そんな事は書いてない。 The abort function causes abnormal program termination to occur, unless the signal SIGABRT is being caught and the signal handler does not return. unless以下の例外はSIGABRTハンドラ内でexitしたりlongjmpしてハンドラから帰ってこ なかった場合の事を述べている。
858 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 23:13:43.96 ] C1X でいうところの _Noreturn 関数なのは abort() のほうだね
859 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 23:42:52.63 ] >>857 ん?だからSIGABRTハンドラからabort()の呼び出し側へ戻ることは出来ず ハンドラ実行後はプログラムが異常終了するんだろ?>>852 の通りじゃん
860 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 23:45:49.77 ] 一応断っとくと、>>852 は>>851 を受けてのことだからね ちゃんと文脈は読もうね
861 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 23:56:54.58 ] てか assertしといてcloseはしたいという ありえない話を前提にしても意味がなくね?
862 名前:デフォルトの名無しさん [2011/06/03(金) 23:57:19.13 ] >>859 日本語訳が必要? > abort関数は、シグナルSIGABRTが補足され、かつシグナルハンドラがリターンしない > 場合に、異常プログラム終了を引き起こす。 >>852 > 言語規格書にはSIGABRTハンドラはreturnしないと書いてある こんなこと書いてないじゃん。 >>860 用語間違えたなら言い訳しないでそういえよ。 SIGABRTハンドラはリターンすることも、リターンしないことも可能。 リターンしないのはabort()
863 名前:842 mailto:sage [2011/06/03(金) 23:58:28.43 ] 高度な助言が沢山あってうれしいです。けども質問する内容事態を間違えました…orz 数値計算のシミュレーションをやっていて、変数の中身を追っていたのです. ofstreamで変数の値を出力させていたのですが、assert()で止まると、 途中の結果が反映されないものだと思い込んでおり、閉じ方を聞いてみたのですが、 再度の確認してみたら普通にデータが書き込まれてました。 助言して下さった皆さん、ありがとうございました。(どうみても無能です) スレチで申し訳ないのですが、数値計算やシミュレーション関係のプログラムって、 どんな感じでプログラムを書いていくものなのでしょうか?今のところ #if DLEVEL > 1 ofs << t << "\t" << x << std::endl; #endif をあちこち埋め込んでいるのですが、ソースが全体的に汚くて見通しが悪いし、 条件分岐や関数を入れると時間が掛かるので、何かうまい方法はないものかなと
864 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:01:03.80 ] >>823 関数のスタック領域にメモリを確保してるんじゃない? グローバル領域かヒープ領域でなら、回避できた経験はあるけど、 詳しいことは、この板のグルを待って
865 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:02:24.14 ] >>862 英語なんて誰でも読めるよ >>851 が「シグナルハンドラから戻ってきたら」って書いたから 戻れないって書いたんだけど、そんなに不思議? 日本語読めない?アホなの?
866 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:11:04.22 ] >>865 >> abort関数は、シグナルSIGABRTが補足され、かつシグナルハンドラがリターンしない >> 場合に、異常プログラム終了を引き起こす。 つーか、思わずスルーしてたけどそれ訳間違ってんじゃん アホ過ぎるだろ
867 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:19:28.08 ] >>865 いや、読めないようだから。 > シグナルハンドラから戻ってきたら 普通に戻れる。戻れないと主張するなら↓このシグナルハンドラはどこに戻るんだよ。 void abort_handler(int sig) { }
868 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:23:32.28 ] >>867 さっすが、英語も日本語も読めないアホは違うね >>851 を読めば、この文脈で戻る/戻らないで指してる場所は abort()の呼び出し元のことだと分かるだろ?
869 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:25:50.02 ] >>867 abort関数は、シグナルSIGABRTが補足され、かつシグナルハンドラがリターンしない 場合"を除き"、異常プログラム終了を引き起こす unlessすら読めないアホが何言っても無駄
870 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:32:18.35 ] >>866 ああ、「除く」を余計に削除しすぎた。これはすまない。 >>868 あほ、>>851 はabortの実装の事だ。 ライブラリソース見てないから推測だが、シグナルハンドラから戻った後にもう一回自殺するんだろう。 この規格書の原文は? こんなことどこにも書いてないよね。 > 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
871 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:42:35.94 ] だから abort() が _Noreturn 関数だってことが言いたかったんだろ いい加減うざい
872 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:44:15.67 ] てめーが言いがかり付けてきたんだろ。↓ソースは? > 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
873 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 00:50:06.53 ] ぷぷぷwww 英語もろくに読めず、文脈もろくに読めない低能が 言いがかりつけて来たんじゃないの?www えーと、それとも間違っててごめんって謝って欲しいの? 「そんなに粘着質でアホとは思わなかったよ。こんなアホがこの世に存在するとは思ってなかった。 分かってたら相手にしなかったよ、ごめんねー」
874 名前:デフォルトの名無しさん [2011/06/04(土) 00:59:42.38 ] やっぱりウソだったんだね。 > 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
875 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 01:02:55.30 ] >>873 自己紹介はいらないよ。 シグナルハンドラから帰るのはシグナル送ったabortの中であることは当たり前だし、 英語読めれば↓こんなウソ書かないもんね。 > 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
876 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 01:07:24.15 ] うわー、自分が訳を間違ったのスルーしてるwww かっこわるー
877 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 01:09:20.25 ] 日本語訳が必要? (キリッ とか書いて間違えるとかwww
878 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 01:12:51.17 ] えーと、英語読めるひとにとって>>862 の間違いはありえんからね 流し読みでも接続詞の論理構造は把握するから 大方どっかからコピペしてきたんだろ で、英語読めないから間違いに気付かない
879 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 01:13:14.76 ] Cスレは既にあるから次スレは スレを勃てるまでもないC++の質問はここで にして欲しい 誰も聞いちゃいないのに毎回毎回おっぱじめる おっさん同士のオーラルセックスは気持ち悪い
880 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 01:33:38.92 ] C++のスレはもうあるしここに閉じ込めとけよ
881 名前:デフォルトの名無しさん [2011/06/04(土) 01:57:04.15 ] >>876-877 それは謝ったぞ。カッペしたときに抜けた。 でも、英語が読めれば↓こんな間違いしないよな。 > 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
882 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 07:40:59.58 ] >>881 カットアンドペーストの失敗?www 問:以下の文の括弧内に文章を入れて正しい文にしなさい abort関数は、シグナルSIGABRTが補足され、かつシグナルハンドラがリターンしない 場合に()、異常プログラム終了を引き起こす。
883 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 07:54:39.56 ] >>863 vectorなりに計算中は溜めておいて assertの代わりにthrow投げて catchでvectorの中身をファイルに書き出して終了とした方が 実効速度早いと思うよ
884 名前:デフォルトの名無しさん [2011/06/04(土) 08:36:56.68 ] >>882 結局、どの言語規格書に↓が書いてあるんだ? 書いてあったとして、ハンドラがリターンしないというのはおかしいと思わないのか? www > 言語規格書にはSIGABRTハンドラはreturnしないと書いてある
885 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 08:59:51.62 ] >>884 C言語の仕様的に考えて>>868 以外の読み方できんだろうが むしろ、それ以外にどんな意味があると思ったのが知りたいわ で、コピペミスって言い訳はどうしたの?www
886 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 09:09:13.71 ] え、もしかしてハンドラの中でreturn文を書いちゃダメって そういう意味で言ってると思ったの? だったら>>852 の二行目の文と繋がらないじゃん
887 名前:デフォルトの名無しさん [2011/06/04(土) 10:37:14.28 ] で、「SIGABRTハンドラはreturnしない」と書いてある言語規格書はどこにあるんだい?
888 名前:デフォルトの名無しさん [2011/06/04(土) 11:26:05.69 ] >>885 それはオレが一番知りたい。「シグナルハンドラから戻ってきたら」と言ったら 「規格書にSIGABRTハンドラはreturnしないと書いてある」と言いがかりをつけられたんだから。 ボンクラの考えることは全くわからん。 >>860 で>>851 への言いがかりだと言ってるんだから、見苦しい言い訳すんなよ。
889 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 16:24:43.42 ] >>888 > それはオレが一番知りたい。(キリリッ コピペミスって言い訳も嘘バレバレで笑ったけど 自演もヘタクソだなwww
890 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 16:43:45.56 ] 下記のような事したいのですけど、 ポインタが特定の配列を指しているのかについて調べるときに アライメントなどの問題が生じることがありますか? class BOX { ... }; int sizeBuffer = 1024; int sizeBox = sizeof(BOX); BOX pDefaultBuffer[1024]; BOX *ptr = ...; // = &pDefaultBuffer[?] or new BOX(); if( ptr >= pDefaultBuffer && ptr < pDefaultBuffer + sizeBuffer ) { } else { ....delete ptr; }
891 名前:842 mailto:sage [2011/06/04(土) 16:44:45.97 ] >>883 良さそうな方法ですね。ただ、今に書いているプログラムでは ループ回数が100万回ぐらいあるので、配列やvectorは利用し難いです。 各関数を通過するときにうける引数の値も確認したいですし。 それと、throwやcatchを使うことで条件分岐やジャンプ命令なんかが ループ内部に入りそうな気がするのです。 assert()なら、NDEBUGのマクロを定義すれば、空行になってくれるといった 記事を見たことがあったので使っているんですが。
892 名前:デフォルトの名無しさん [2011/06/04(土) 18:06:49.73 ] >>889 ボンクラは言い逃れも支離滅裂だな。 既に間違いを認めているカッペに突っ込んで話題をそらすしかないんだろうな。 SIGABRTハンドラはreturnしないと書いてある言語規格書はどこにあるんだ?
893 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:09:18.75 ] プログラムの世界って情報誌とかないんですか? 週刊プログラム 的な。
894 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:10:08.01 ] C++ だと const int でも配列の宣言の添字に使えることを知ったんですが int でいいんでしょうか? なんとなっくunsignendのが正しいような気がするんですが intでいいんですか?
895 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:11:49.91 ] 配列の添え字って負の値も使えるんだよ。
896 名前:デフォルトの名無しさん [2011/06/04(土) 18:16:09.45 ] 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
897 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:26:58.71 ] >>891 とりあえずマクロ作って1行にまとめてみるとか? ttp://ideone.com/Qmarv
898 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:34:08.22 ] >>893 「インターフェース」とか?
899 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:57:26.40 ] ビルドに時間がかかる巨大なプログラムって動作確認はどうしているのでしょうか。 コード中にミスがあったり、意図したどおりに動くかどうかを確認しようとしてもものすごく時間がかかって不効率のように思います。
900 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:57:56.69 ] >>892 >>896 自演バレたからって発狂すんなよwww このスレで今sageて無いのお前だけだから一発で分かったわwww
901 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:02:41.74 ] あぼーんするから名前付けてくれ
902 名前:デフォルトの名無しさん [2011/06/04(土) 19:15:58.08 ] ついに、進退窮まって自演という事でなかったことにするのか。 バカのくせに負けず嫌い。バカだからリアルでも連敗なんだろうな。www 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
903 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:19:25.30 ] ところで真面目な話>>882 には何が入るの?
904 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:21:48.45 ] それは>>902 が知っている
905 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:29:46.27 ] >>882 に何が入るかで>>902 の完全勝利が決まる がんばれ
906 名前:デフォルトの名無しさん [2011/06/04(土) 19:35:10.90 ] 話題を逸らすしかないんだろうな。無様すぎる。 言語規格書 www 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
907 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:44:26.26 ] なんだ、カッペ抜けは嘘か 英語も読めないアホがスレ荒らすな
908 名前:デフォルトの名無しさん [2011/06/04(土) 20:02:41.18 ] すでに間違いと認めてるところに粘着して話題を逸らすしかないんだろうな。無様すぎる。 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
909 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 23:59:34.50 ] 日本語訳が必要?とか言って速攻で訳添削された気分はどう? それをカッペ抜けとか誤摩化したあげく嘘がバレて 言い逃れできなくなった気分はどう?
910 名前:デフォルトの名無しさん [2011/06/05(日) 00:37:53.26 ] そろそろよそでやれ
911 名前:デフォルトの名無しさん [2011/06/05(日) 01:46:06.72 ] 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
912 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 10:28:00.38 ] 発狂するほど悔しいのは分かったから よそでやれ
913 名前:デフォルトの名無しさん [2011/06/05(日) 11:08:32.55 ] ライブラリコールとシグナルハンドラの区別がついてないんだろうな。 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
914 名前:デフォルトの名無しさん [2011/06/05(日) 11:42:15.71 ] > ライブラリコールとシグナルハンドラの区別がついてないんだろうな。 (キリッ きもいからどっかいけ
915 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 11:58:52.34 ] >>899 distccで高速化とか?
916 名前:デフォルトの名無しさん [2011/06/05(日) 12:01:31.09 ] 今度は他人のふりして誤魔化そうとしてるようだな。民主並みの見苦しさ。w 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
917 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:10:36.24 ] 微妙にスレチかもしれないけど、どうしてOSってC言語で書かれるの? どのプログラム言語でも最終的には機械語に変換されるんだから、別にどんな言語でも書けそうなんだが OSを開発するに当たって、C言語でなければならない理由を教えてくれ
918 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:16:37.43 ] 歴史上最初に高級言語で書かれたOSが、Cで書かれていたから。でいいかな?
919 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:25:42.37 ] そもそもUNIXを書くためにCを作ったんじゃなかったっけ?
920 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:30:10.15 ] >>918-919 つまり、慣例によりCで書かれるだけで、別に他の言語でも書けるってこと?
921 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:52:14.24 ] 寒冷の意味
922 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:54:30.50 ] C#で作ったOSとかJavaで作ったOSとか一時期聞いた覚えがある
923 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:56:19.47 ] カーニハンとリッチーが、BCPL(型のないc)でUnix書いてて、 それに型を付けてC言語ができたんじゃなかったけな C以外の言語だと、c++やjavaでOSが書かれたこともあった気がする MS-DOSをc++で書いたらとんでもないバイト数になったってジョークもあった 別の言語を作り出したりするのは、既存の資源を廃棄することになるから、 今後も、cが使われていくことになると思うけどな うん百頁の企画書やSystemCなんかの規格だったり、 言語やライブラリのデバッグに多くのリソースが使われている 既在の環境でそれなりに快適に生活している人が居る以上は、 新しい何かが出来ても移住しないんだよunix書いた人たちがplan9を書いたけども、 結局のとこ流行らなかったって歴史だってある つまるところ、慣例というよりも、他に選択肢がない
924 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 13:59:51.04 ] >>920 すでにC言語以外で書かれたOSは有るよ
925 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 14:02:38.43 ] 汗でしょ、Cとかなかった時代は
926 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 14:41:35.17 ] >>924 JavaとかC++でしょ? 両方とも、文法や形式がC言語にかなり近いじゃん
927 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 15:09:03.66 ] >>920 Cはハードウェアへの直接アクセスが簡単なんだ。 他の言語でもライブラリとか使ってアクセスすることもできるけど、Cほど直接的じゃない。 書ける/書けないでいえば他の言語でも書けるけど、Cより楽にかける言語は知らない。
928 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 15:10:49.64 ] >>926 バイナリに変換されたら表現記法など意味がない 言語が異なれば言語の構文が似てようがまったく別物 近い遠いというのは人間の主観でしかない
929 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 16:20:54.70 ] Cで書かれたプログラムとc++で書かれたプログラムの バイナリが近いわけねーだろJK
930 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 18:27:11.51 ] C++の #include <cstdio> int main() { std::printf("Hello world.\n"); return 0; } と、Cの #include <stdio.h> int main() { printf("Hello world.\n"); return 0; } で、近くないコードが出力され得るとでも?
931 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 18:46:45.08 ] >>930 詭弁のガイドラインにジャストミートだなw
932 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 19:09:54.37 ] >>930 std::cout 使ってみ?
933 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 19:12:07.02 ] 実行できるという点以外 似てようが似てまいが違いはないと思うがね だからOSが手続き型で書かれる理由にはならない
934 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 19:22:29.40 ] OSにC++がなかなか使われない理由はメモリ管理が主因だと思う
935 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 19:27:08.52 ] チューリング完全という意味では 宣言型も手続き型も同じなのに、 手続き型の方が抽象度が低いと認識されてるのは ハードウェア制御との親和性が高いからでは?
936 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 21:42:37.58 ] OSを書くには、ない方が良い機能が満載だからだろ クラスや継承なんてつかったら、vtblなんかのポインタで無駄なメモリを食うだろし 組込み用途につかうもんじゃねーだろ 何がチューリング完全だよ。どこの厨二だ
937 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 22:32:28.24 ] >>936 低学歴には難しすぎたね、ごめん。
938 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 22:50:22.62 ] 手続き型以外 = OOP かよ OOPなんて只の手続き型の一種
939 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 22:50:23.51 ] DLLとかsoで名前マングリングが邪魔になるからじゃないの?
940 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 22:51:42.04 ] コンパイラ決め撃ちしたらC++でも大丈夫
941 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 22:57:21.31 ] Haskell で OS programatica.cs.pdx.edu/House/
942 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 23:09:12.56 ] extern "C" ばかりするのならC++を使う意味がないしな
943 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 01:34:12.52 ] >>935 それに、宣言形言語(というか関数型言語・論理型言語)は、計算理論・計算可能性理論・記号論理の再帰理論等の実装といってもいいから。
944 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 11:28:40.55 ] float の==比較を行いたいのですが、 ある数値の次の限りなく小さな次の差分 ulp(Units in the Last Place)を求める関数はありますか? javaでいうところのMath.ulp(float)です;
945 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 12:34:39.88 ] float.hかな?
946 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 12:36:31.43 ] >C言語においては、<float.h>でFLT_EPSILON、DBL_EPSILON、 LDBL_EPSILONという定数が定義されており、それぞれfloat型、 double型、long double型の計算機イプシロンの値となっている。
947 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 13:00:57.96 ] >>944 cmathのnextafterf もしくは直接の比較として boost::math::float_distance
948 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 13:06:38.17 ] ある数値だからfloat.hじゃまずかったかすまん
949 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 13:09:52.24 ] >>946 内部表現って知ってる? ttp://codepad.org/yh9cjksS
950 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 22:21:56.18 ] スマートポインタを使わなくてもどこかのクラスに生成を任せて解放をプログラムの最後に実行するようにすればいいと思うんですが どうでしょうか
951 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 22:23:02.37 ] >>950 そんなことするぐらいならスマートポインタ使えばよくね?w
952 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 22:25:18.25 ] >>951 そうなんですけど生ポインタのほうがシンプルですので、、、
953 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 22:56:42.84 ] プログラムの最後でいいならハンドル形式にしてしまうとか。
954 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 23:59:14.17 ] スマートポインタだってシンプルじゃねぇか まあ慣れもあるのかもしれないけど
955 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 07:58:10.11 ] GCでいいじゃん
956 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 08:51:45.34 ] 他の言語でいいじゃん
957 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 10:58:29.27 ] すみません、ちょと気になったんですが C++で構造体やクラスの同名変数のみを自動でコピーするような処理は可能でしょうか? 若干条件付きでも構いませんが、順序はバラバラ(memcpyナシ)でお願いします。 struct A { int x, y, z; } struct B { int a, x, y; } A a; B b; autoCopy(a, b); // ← x, yのみコピーされる感じ
958 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 11:44:39.63 ] 出来ない。
959 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 12:04:26.97 ] >>957 template<class A, class B>void autoCopy(A & a, const B & b) {a.x = b.x; a.y = b.y;}
960 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 12:14:16.38 ] >>959 同名のメンバー名のリストは与えられないという条件に決まってんだろ。ちっとは頭使え。
961 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 12:21:38.94 ] Aを全クラスに継承させれば実質できるんじゃね?w
962 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 12:51:07.87 ] >>960 それだったら既に>958で答が出ている。 敢えて次善策を提示しているに決まっているだろう。 ちっとはその身体の上に乗っかってる代物を有効活用したらどうだ?
963 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 12:58:05.25 ] >>957 設計が間違ってるからそんな欲求が生まれる
964 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 13:01:35.72 ] 同名の変数部分をまとめて構造体にすればいい まとめて一回でコピーできる
965 名前:944 mailto:sage [2011/06/07(火) 13:19:12.71 ] >>947 遅れましたが、これを使っていきます。ありがとうございます!
966 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 14:32:10.20 ] bccで.tdsや.objを生成しない方法はありますか?
967 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 14:35:44.11 ] DBや通信が絡んだりすると、 どうしても一部のメンバ変数のみを送受信したくなると思うのですが、 設計ミスですかそうしたか。
968 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 14:44:42.83 ] boost::serialization
969 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 17:28:13.32 ] >>960 ヘッダ見ろカス
970 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 23:00:51.94 ] すみません。キー入力の常態を知りたくて www-higashi.ist.osaka-u.ac.jp/~k-maeda/vcpp/com3-2keycodes.html ここの一覧全ての定数とWPARAMを、if文で==で比較しているのですが なぜか定義していないA〜Zのアルファベットキーに反応して Aだと97の値が来て、VK_NUMPAD1(テンキー1)に一致し、 Sだと115の値が来て、VK_F4(F4キー)に一致し、 Dだと100の値が来て、VK_NUMPAD4(テンキー4)に一致してしまいます。 なぜこんな事になるのでしょうか?
971 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 23:50:31.75 ] WM_CHARはキャラクタ−コード。 WM_KEYDOWN等は仮想キーコード。 VK_???は仮想キーコード。 なので、 case WM_CHAR: if(wParam == 'A') { ... とすれば拾えるハズ
972 名前:970 mailto:sage [2011/06/08(水) 02:01:02.82 ] >>971 ご助言を元にいじって、仮想キーを != WM_CHAR で取得する事で解決できました。 勉強になりました。ありがとうございます。
973 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 11:59:43.70 ] void func(int n) { assert(n>0); if(!(n>0)) throw func_error(n) ; //・・・ }; アサーションって運が悪いとデバッグ時に気がつかないかもしれないから(例えばfunc(rand())みたいな場合) 上のようにリリース時のチェックも追加したほうがいいと思うんだが、なぜみんな書かないの?
974 名前: 忍法帖【Lv=1,xxxP】 mailto:sage [2011/06/08(水) 12:02:28.20 ] リリース時もチェックするならなんでassertするの?
975 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 12:04:08.48 ] つまりassert不要論
976 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 12:26:58.45 ] 表示処理なんかでエラーが雪崩れないところ用にlogging_assertみたいなc/c++標準機能が欲しいね
977 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 12:30:07.19 ] stderrを表示処理に使うのはいかがなものか
978 名前:デフォルトの名無しさん [2011/06/08(水) 13:30:00.24 ] ZZ型の変数を10進数から16進数にするにはどうすればいいですか??
979 名前: 忍法帖【Lv=1,xxxP】 mailto:sage [2011/06/08(水) 13:59:43.82 ] >>978 変数自体は進法は関係がない。 表示などの目的で16進数に変換したいなら、printf()系で変換するのが手っ取り早い。
980 名前:デフォルトの名無しさん [2011/06/08(水) 14:14:44.98 ] >>979 解答ありがとうございます。 表示目的ではないのですが、sprintfやstringstreamなどで試してみてもZZ型が 16進文字列になりませんでした。
981 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 14:18:25.27 ] ZZ型ってNTLとやらの多倍長整数でいいのかな? NTLにZZ型を扱う文字列関数(printfやitoa相当のもの)がないなら自分で書くしかない
982 名前:デフォルトの名無しさん [2011/06/08(水) 14:21:50.77 ] はい。 やっぱり自分で書くのが一番なんですかね。ありがとうございました。 参考になりました。
983 名前:デフォルトの名無しさん [2011/06/08(水) 14:24:18.69 ] static char a[] = "0123456789ABCDEF"; long n = (long)(zz % 16); s = a[n] + s;
984 名前:デフォルトの名無しさん mailto:sega [2011/06/08(水) 14:34:02.59 ] 今開いてるディスクリプタの一覧を取得する方法 ってありますか?
985 名前:デフォルトの名無しさん [2011/06/08(水) 14:40:42.61 ] >>984 標準的な方法は存在しない d.hatena.ne.jp/ihiroky/20101122/1290409915
986 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 15:17:13.53 ] >>985 マジすか。 標準Cライブラリも案外だらしないな・・・ しかたない。 /procの下でも読みます。
987 名前: 忍法帖【Lv=1,xxxP】 mailto:sage [2011/06/08(水) 17:03:01.18 ] >>986 そもそも標準ライブラリはディスクリプタを扱わない。 ∵そう言う方法で管理しないシステムで使うことも考慮されているから。
988 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 17:21:48.39 ] >>987 あーそういえばそうだったね 低レベルばっかり触ってるからうっかりしてた
989 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 19:18:04.28 ] ファイルのアドレスとデータを指定して書き換えたい ただしかなりファイルが大きいので一部のために全部書き換えることはしたくない 固定長のデータ等扱うのに需要はあると思うけど どれ使っていいかわからない
990 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 19:19:43.01 ] 日本語でOK。
991 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 19:46:47.33 ] つ[fopen(), fclose(), fseek(), fread(), fwrite()]
992 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 19:48:16.87 ] >>989 "r+"でfopen 〜 fseek 〜 fwriteやfprintfで書き込み fstream 〜 seekp 〜 write や << で書き込み
993 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 20:05:38.45 ] >>990 はずかしいね
994 名前:デフォルトの名無しさん [2011/06/08(水) 22:03:41.24 ] 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ 言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
995 名前:デフォルトの名無しさん [2011/06/09(木) 00:20:38.27 ] (´・ω・`)