1 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:18:18 ] プログラミング言語C/C++についての、小心者向けスレです。質問・要望・雑談などどうぞ。 関連スレやURLは>>2 以降。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・ぐぐる ・マニュアルで探す ・FAQを読む 例えば www.bohyoh.com/CandCPP/FAQ/index.html 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(なるべくそのままで) ・実行環境(OS名、コンパイラ名) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は小心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって小心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。 宗教的な話題は禁止します。
496 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:04:41 ] 一番考えられるのは、測定ミスだな 釣りじゃないなら、Nの値と処理A,Bの内容を示せよ あと時間測定の方法も
497 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:09:04 ] Windowsなら SetPriorityClass()、QueryPerformanceFrequency()、 QueryPerformanceCounter() を使って自動的に測定させればよい SetPriorityClassを使うのはバックグラウンドでいらないプロセスが動いて 測定値にバラツキが出るのを防ぐため 測定後に元に戻しておかないと大変な事になる(再起動)
498 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 02:44:19 ] >>494 どっちかのループでSSEが効いたんじゃない?
499 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:00:21 ] C++でコードを書いていて引数にとったクラスにメソッドを適用する 関数を書きました。そのメソッドはクラスのprivate変数を変更するメソッドです。 デバッグプリントを追加して、メソッドが呼ばれている事や、 メソッドによってprivate変数が変更されている事を確認したのですが。 その関数を実行した次の行でそのprivate変数を確認するともとに戻ってしまっています。 適切に変更したいのですが、よろしくお願いします。 OS:MacOSX 10.6 Compiler: g++ 4.2.1 よろしくお願いします。
500 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:05:43 ] >>499 引数の型はなにかね?
501 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:19:33 ] メソッドの引数ですか? 独自で作ったHogeクラスのインスタンスです。 void FooBar (Hoge x) { x.SetX(10); } みたいな感じで使っています。 Hoge baz; FooBar(baz); //ここでbazのprivate変数Xは10にかわったはず!! baz.GetX() //なぜかここの返り値がもとのXのまま といった感じです。
502 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:23:54 ] そりゃbazの変数が変わったように見えてるだけで、実際変わったのはxの変数だ。 bazとxのアドレス確認してごらん。
503 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:26:00 ] なるほど、関数はHogeインスタンスのポインタを引数にとるようにし、 bazのポインタを引数に渡せばいいという事でしょうか?
504 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:29:53 ] ポインタでもいいし、C++だと参照ってのもあるから好きなほうを使えばおk。
505 名前:デフォルトの名無しさん [2009/10/23(金) 09:01:30 ] 負の値も含めて四捨五入する方法を教えてください
506 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:22:17 ] std::vector<int> vA; std::vector<int> vB; // vAに値をpush_back vB.reserv(vA.size()); std::copy(vA.begin(), vA.end(), vB.begin()); としたときに vB.size() でサイズを取得するには何か細工が必要ですか?
507 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:23:42 ] >>505 tech.ckme.co.jp/cpp/cpp_round.shtml
508 名前:506 mailto:sage [2009/10/23(金) 10:42:22 ] すみません解決しました
509 名前:デフォルトの名無しさん [2009/10/28(水) 05:31:06 ] Windowsで実行ファイルのディレクトリを取得する方法を教えてください
510 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 09:06:03 ] WinAPIスレにでもどうぞ。 それにしても、「実行ファイルのディレクトリ」とは「実行ファイルのあるディレクトリ」なのか 「実行ファイルを起動したときのディレクトリ」なのかはっきりしないもんだな。
511 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:00:44 ] 後者は普通カレントディレクトリと呼ぶだろ
512 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:40:41 ] 実行ファイルを起動したときのディレクトリのことをカレントディレクトリと呼ぶだって? やめてくれないか。
513 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:00:36 ] >>509 GetModuleFileName _fullpath とか、使って
514 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:42:32 ] >>512 「実行ファイルを起動したときのカレントディレクトリ」と言いたいのだと思う。
515 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 02:13:32 ] /usr/bin/ls
516 名前:デフォルトの名無しさん [2009/10/30(金) 03:42:49 ] デフォルトのコピーコンストラクタは ビットコピーをすると教わりましたが stlコンテナを含む自作クラスについて それをすると問題が起こりませんか? 大丈夫ですか? 代入してスコープ抜けるとき コピー先の奴が元のを破棄してしまいませんか?
517 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 04:50:35 ] >>516 > デフォルトのコピーコンストラクタは > ビットコピーをすると教わりましたが それは、うそだ。
518 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 06:57:24 ] >>517 では全てのメンバオフジェクトに operator=を適用するのですか?
519 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 07:38:15 ] >>518 コピーコンストラクタならコピーコンストラクタ。 operator= なら operator= 。
520 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 07:40:49 ] >>519 アハ!悟った! あり^^
521 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:43:32 ] すみません。計算式についてなのですが long a = 3210; double b = 23.456789; long y = (a*3.1415) - (b+10.5) * 6.28; 例えばこうやって変数yを求めた場合、 「計算の為に見えない変数が確保され、メモリを消費する」という現象は起きるのでしょうか? もしそうだとするならば、 long a = 3210; double b = 23.456789; double c = a*3.1415; double d = (b+10.5) * 6.28; long y = c - d; こうやって(計算式がもっと長ったらしい場合)コードの可視性を良くしておいても メモリ消費や、処理の負荷は変わらなかったりするのでしょうか? それとも何かルールが有るのでしょうか。 「このURL読んで来い」とかだけでも何でも構いませんので、 情報を教えて頂けると助かります、よろしくお願いします。 orz
522 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:47:34 ] >>521 気にするな、コンパイラは善きに計らってくれる。
523 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:50:51 ] >>521 どうしても気になるなら、(最適化ありで)コンパイラにアセンブリ出力を出させて較べてみればいい。 >521が全てなら、恐らくはyが即値で得られるだろう。
524 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:51:29 ] >>522-523 アセンブリ出力・・やってみて確認してみようと思います。 ありがとうございました。 orz
525 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:05:01 ] すみません。 「整数同士の割算」の結果が「整数のみ」か「少数を含む」かを見分ける時、 今はintとdouble2つの割算をし、それらが等しいかif判定しているのですが もっとスマートな方法をご存知な方はいらっしゃられないでしょうか?
526 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:40:57 ] if(a%b==0)
527 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 05:12:31 ] 割り切れるかどうかってこと? あんまりこういうこと言うスレではないかもしれんけど、正直、一瞬で>>526 が 浮かばないようだとヤバくね?
528 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:04:09 ] そりゃ人によるでしょ。C/C++勉強し始めてすぐならしょうがない。 仕事でC/C++使ってる人間なら確かにヤバい。
529 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:17:26 ] >>526-528 成る程。何か効率化の方法が有りそうだとは思ってたのですが 526の式にピンとこず、実際数値を当てて試してやっと理解できました。 アマチュアだけど、センスがないなぁ・・自分。 ありがとうございました。
530 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 14:31:50 ] %を知らなかった(か、見たことはあるけど使ったことがなかった)のか?
531 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 15:37:13 ] >>530 いえ。知っていてほんの数回は使っていたんですが、実際に余った数値そのものが欲しい時ばかりでした orz 普段少数しか扱ってなくて、余り=何かの数値 という先入観が強かったのも有るかもしれません。 ピンと来れず申し訳ないです。 orz
532 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 16:12:09 ] まぁ謝ることではない FuzzBuzz問題を解けないのが普通、って話も少し実感できた
533 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 16:12:49 ] FizzBuzz問題だった
534 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:27:57 ] まぁこういうのはセンスよりも経験だから 積めばそのうちピンと来るようになるさ
535 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:07:57 ] 代入演算子=がオーバーロードされているBaseクラスを public継承したDerivedクラスがあり、 そのDerivedクラスは代入演算子=をオーバーライドしてあります。 そんなDerivedクラスのコンストラクタ中で、 @*this=100; Athis->operator=(100); Boperator=(100); CBase::operator=(100); これらはして良いコードでしょうか?
536 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 00:55:29 ] >>535 1〜4のどれもコンパイルエラーにならないんで、あとはやりたいことを 書いてもらわない限りはそれ以上の良し悪しを判断できない。
537 名前:535 mailto:sage [2009/11/18(水) 06:13:06 ] >>536 ありがとうございます。 コンストラクタ中で、thisポインタや代入演算子を使用しても大丈夫なのでしょうか? ということが伺いたかったのです。
538 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:31:52 ] >>537 同じじゃねーか馬鹿。 コンパイルは通る。一定の動作もする。 「大丈夫」かどうかは、少なくともその動作が期待している動作と合致するかどうかによる。 今のところ期待している動作は不明。したがって判別不能。
539 名前:537 [2009/11/18(水) 20:03:46 ] 仕様上未定義の動作でないことが分かれば大丈夫です。 ありがとうございました。
540 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 23:21:25 ] 条件によっては未定義動作も有りうるって言われてるんじゃないの?
541 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:39:59 ] 質問です 10×10のマス目を「0,1,2」で埋める。使わない数字があっても可 それを例 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 と言うテキストファイルで出力したい。ファイル名は連番。 すべての可能性を(回転して同一等を排除しない)出力するためのプログラムって どうやって書いたらいいんでしょうか?? 見当が付きません。
542 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:45:00 ] 3^100 ≒ 5.15×10^47通り全部書き出す気?
543 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:49:05 ] 3~100になるんですか…… 100~3だと思ってた………… えらいことになりますね。
544 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 18:07:30 ] >>541 のお陰で、STL に next_combination がないことに 今頃気付いた。
545 名前:541 mailto:sage [2009/11/19(木) 20:45:31 ] 少しアプローチの仕方を変えてみようかな まず10桁の数字を「1,2,3」で埋める。使わない数字があっても可 これなら3^10=59049個で、一つずつファイルに出力は厳しいけど 一覧で表示だけならできそうだ。 1111111111〜3333333333 までの数字で「0,4,5,6,7,8,9」を含む物を削除ってほうがわかりやすいのかな。 まぁそのあとどうやって縦に10桁並べるのかよくわからんけどww
546 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 23:10:34 ] 質問ですstd::string クラス文字列の内容ををchar型配列に移すときに char *text; string str ="testtxt"; int i=0; int len = str.length(); text = new char[len]; while(i<len){ text[i] = str.at(i); i++; } こうしたんですがもっとこう単純で綺麗に出来ないものでしょうか?
547 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 23:44:51 ] >>546 whileの代わりにstd::copy(str.begin(), str.end(), text);とかstd::memcpy(text, str.data(), len)とか。 ところで、'\0'の終端がなくていいの?
548 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 00:32:49 ] いいんです。あったら上司に怒られます。
549 名前:デフォルトの名無しさん [2009/11/20(金) 01:19:51 ] 質問です。 ループ中の変数 j をファイル名としてテキストファイル"1.txt"〜"8.txt"を どんどん新規作成していきたいのですが、 「f.open(ji,ios::out)の第一引数は const char*だカス」と怒られます。 こういう場合はどのように行うのでしょうか? 自分で書いてみたものを張ります。 for(int i=0;i<9;i++){ char t_char[10]; sprintf(t_char, "%d", j); string ji = ""; ji += t_char; ji += ".txt"; fstream f; f.open(ji,ios::out) f.close(); }
550 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 01:22:43 ] >>546 std::vector<char> text(str.begin(), str.end());
551 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 01:23:37 ] >>549 ji.c_str()
552 名前:デフォルトの名無しさん [2009/11/20(金) 01:33:49 ] >>549 f.open(ji.c_str(),ios::out) かな
553 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 03:14:37 ] >>547 >>550 ありがとうございます!
554 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:31:02 ] >>549 sprintf(t_char, "%d.txt", j); fstream f; f.open(t_char,ios::out)
555 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 20:36:18 ] >>551 >>552 >>554 ありがとうございます!!
556 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 23:20:28 ] Shift-JISの場合は char*型 strlen strcpyなどを使いますよね? UTF-8を扱う場合の変数型や文字列処理の関数はどうなりますか?
557 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 23:35:29 ] 基本的に、strをwcsに置き換えればOK
558 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 23:42:03 ] UTF-8ってShift-JIS同様マルチバイト文字ではないのですか? UNICODEはワイド文字で、UNICODEとUTF-8は別物ですよね?
559 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 01:44:23 ] >>557 それはおかしい。 UTF-8はマルチバイト文字に分類される。 UTP-8を直接扱うときはcharとそれを扱う関数を使って問題ない。
560 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 01:53:17 ] えー。UTF-8というのはUnicodeのエンコード方式のひとつです。 Unicodeというのはいっぱいある文字を一覧表にしただけだと思ってください。 その一覧表をコンピュータでどのように表現するか、 2バイトで1セットとするコードを使うとか、 4バイトで1セットとするコードを使うとか、 最初の方は1バイトで、大部分は2バイトだけど、いい具合に3バイトとするコードを使うとかetc、etc… そういうなかのひとつがUTF-8です。UTF-8は可変長バイトです。 Unicodeを扱う場合、localeを正しくセットした上で、 wchar_tとwchar_tを処理するライブラリを使います。 ただし、UTF-8が本当に使えるかどうかは コンパイラしだいです・・・。
561 名前:556=558 mailto:sage [2009/11/22(日) 01:55:15 ] >>559 UTF-8を扱うときはShift-JISと同じように扱って大丈夫なんですね。 ありがとうございました。
562 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 03:26:17 ] >>560 UTF-8を単なるバイト列と見なして入力・処理・出力するだけなら、 単なるバイナリデータと同じchar型で扱って何の問題もない。 そのデータ中に'\0'が現れなければ、strlenやstrcpyはうまく動く。 普段使っているマルチバイト文字と改行の扱いが同じならテキストモードでのファイル読み書きもうまくいく。 ここまでlocaleの出番無し。 もちろん、この状態を「本当に使える」と言わないと主張するならそれに賛成するよ。
563 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 04:07:31 ] >>562 UTF-8はASCII互換部分があるからそういうことができるのかな。 いまいちこの辺はよくわからんです*_*
564 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 10:05:16 ] UTF-8は外部インターフェース用と考えた方が良い 直接文字列操作するなんて考えたくない
565 名前:デフォルトの名無しさん [2009/11/23(月) 15:09:23 ] C言語の質問です。 C言語の基本はとりあえず理解したのですが、実際に自分でプログラムを組もうとした時 はて、真っ黒コンソールで走る、組んでて楽しいプログラムって何だ?と、困っています。 そこで、こんなコンソールのプログラムなら、作ってて面白いし、勉強にもなるんじゃ?といった案をお教えください。 ちなみに、基本情報処理者の資格を一応持っているので、多少のシステム関係の知識はあります。 プログラミング環境は、 ・Borland C++ Compiler 5.5.1 ・Microsoft Visula Stdio 2005 の二つあります。 どうぞお願いします
566 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:13:31 ] いや別にコンソール使わなくてもいいと思うけど
567 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:19:55 ] オセロ
568 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:29:16 ] ウィンドウ出す方法でも勉強したらいいんじゃね
569 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:58:24 ] >>564 ハァ?
570 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 20:47:18 ] >>569 俺も>>564 は普通に当然だと思うが
571 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:21:03 ] >>565 テトリスなら2, 30分ぐらいで作れて遊べるから楽しいんじゃない? 昔、流行った頃は電卓に搭載されたぐらいシンプルなものだし
572 名前:565 mailto:sage [2009/11/23(月) 21:50:09 ] >>566 おぉそうですか。Winプログラムじゃ、"Hello, world"で挫折すると聞いていたもので・・・ 窓だと、どのようなプログラムがよいか、よろしければお教えくださいm(_ _)m >>567 なるほど!いいですね 次の手を思考ルーチンを、自分で考えてみるってのも、楽しいかもしれませんね! ありがとうございました >>568 ぐ、やはりWindowsプログラミングですかね、 とりあえずこのソースを打ち込め!的なページを見てみます >570 テトリスですか!いいですね、、、 mainをぐるぐる回して、関数の戻り値を確認すれば出来るのだろうか…やってみます! ありがとうございました
573 名前:デフォルトの名無しさん [2009/11/24(火) 00:20:57 ] CとC++の違いをお願いします。 また、 www.amazon.co.jp/gp/product/4797349816/ref=s9_simz_gw_s0_p14_i1?pf_rd_m=AN1VRQENFRJN5&pf_rd_s=center-1&pf_rd_r=0X37K4K5C7P745SGFKF4&pf_rd_t=101&pf_rd_p=463376736&pf_rd_i=489986 この本はCではなくC++を扱ってるように思うのですが、どうなのでしょうか
574 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 00:50:20 ] どうみてもC VC++はCも扱える
575 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 02:04:41 ] どう見てもC 初心者の俺がもってるイメージとしては c = 関数関数関数関数 cpp = c + クラス他
576 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 02:07:32 ] 言語仕様としては間違ってなくもないけど 実際のコーディングがまったく違うよ。
577 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 19:49:14 ] C++を有る程度使えるようになってから このまえCだけで全部つくる必要がでたときすごくとまどったな なんつっても文字列操作が…
578 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 23:00:39 ] いつかC++のクラスやSTLが突然使えなくなる日が来るんじゃないかと思ふことがある
579 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 00:24:14 ] 〜ヘッダ〜 class BBB; class AAA{ BBB *processor; void do(); } 〜ソース〜 AAA::do(){ BBB &processor = *(this->processor); processor.execute(); } プログラミングの出来る友達のソースを見たらこのような記述がありました。 このようにするメリットって何があるのですか? 友達にも聞いたのですが、いまいち理解できませんでした。
580 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 03:24:18 ] いわゆるpimplだな。 他のソースからそのヘッダだけインクルードしてAAAを使いたい場合に有効。 AAAのインスタンスを生成するには、AAAのメンバ変数のサイズが全部確定してないと ならない。プライベートメンバでも何でも。 でも、ヘッダにAAAのプライベートメンバ変数まで全部書くようにしてると糞ソースに なる。 だから、BBBを名前だけ宣言しといて、AAAのメンバ変数に「BBBへのポインタ」を 置く。ポインタなら中身が分からなくてもサイズは確定するから。 で、プライベートな実装は全部BBBの中に突っ込んで、AAAはBBBに丸投げする。
581 名前:デフォルトの名無しさん [2009/11/29(日) 05:28:36 ] 下のプログラムで、なぜかswitchのところでひっかかってしまいます。原因は何でしょうか。 プログラムの内容はsuujiに乱数を入れ、その乱数が〜なら○○を出力する、というものです。 int suuji; suuji = rand() % 5 ; printf("\n\n\n\nテストプログラム1\n"); switch (suuji) { case '0' : printf("\nCASE 0"); break; case '1' : printf("\nCASE 1"); break; case '2' : printf("\nCASE 2"); break; case '3' : printf("\nCASE 3"); break; case '4' : printf("\nCASE 4"); break; } return 0;
582 名前:581 [2009/11/29(日) 05:30:54 ] 頭にくる int main(void) がぬけてました。 また、ひっかかるというのは表示されないということです
583 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 06:40:40 ] suuji = rand() % 5 + 0x30; これで^^
584 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 08:38:50 ] やべえ俺>>583 を見てもなお引っかかっちまった 文字'0'(ASCIIコード0x30)と比較してるのか
585 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 14:14:52 ] if(1){****} とあった場合、 まともな(有名どころのg++とかVCとか)コンパイラなら if(1)という無駄なオーバーヘッドは消してくれると期待できますか? あるいはif(0)も同じく最適化してくれますかね?
586 名前:585 [2009/11/29(日) 14:22:33 ] #include <iostream> const int num = 1; int main() { if(num){std::cout << "num" << std::endl;} if(!num){std::cout << "!num" << std::endl;} return 0; } これがg++ (最適化-O1) でasmファイルが同じになりました。 他のコンパイラでも期待して良い物なのでしょうか?
587 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:11:43 ] よほど特殊な狂った(または単純に超絶バカな)コンパイラでなければ、最適化を 切ったりしない限りは当たり前のように消える
588 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:32:50 ] >>587 ありがとうございます。
589 名前:デフォルトの名無しさん [2009/11/29(日) 19:33:54 ] C++のクラス&構造体に関する質問です。 構造体を静的メンバとして定義するには、どうしたらいいのでしょうか。 以下のようなコードで、int型の数値をstruct型にまとめたいのです。 class Perception { public: static int trackingPointX; static int trackingPointX; } int Perception::trackingPointX = 0; int Perception::trackingPointY = 0; int main() { printf("%d", Perception::trackingPointX); return 0; } いろいろと検索・試作してみましたが、実装方法が分かりませんでした。 よろしくお願いします。
590 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:44:36 ] >>589 よくわからんな。 そのコードのどこが気に入らないの?
591 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:49:13 ] struct Perception { static int trackingPointX; static int trackingPointY; };
592 名前:589 [2009/11/29(日) 19:51:37 ] >>590 printf("%d", Perception::trackingPoint0.x); printf("%d", Perception::trackingPoint1.x); printf("%d", Perception::trackingPoint2.x); ・・・という風にしたいんです。
593 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:56:42 ] #include <stdio.h> struct _Perception { struct Point{ int x; int y; }; Point trackingPoint0; Point trackingPoint1; Point trackingPoint2; }; _Perception Perception; int main() { printf("%d", Perception.trackingPoint0.x); /* ...*/ return 0; }
594 名前:589 mailto:sage [2009/11/29(日) 20:22:19 ] >>593 構造体をクラス変数として使いたいなら、メンバ変数として定義した上で あらかじめクラスを作っておく方法しかないんですかね・・・。
595 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 20:28:31 ] >>594 クラスインスタンス作るのが気に入らないなら 593 のメンバ変数に static つければいいだろうが。 >>593 要らんところで予約名使うなよ。
596 名前:589 mailto:sage [2009/11/29(日) 20:38:31 ] >>595 さんの方法も試してみます。ありがとうございます。 とりあえずは以下の方法で実装できました。(言われてみれば当たり前かも・・・汗) struct TrackingPoint { int x; int y; }; class Perception { public: static TrackingPoint trackingPoint0; static TrackingPoint trackingPoint1; static TrackingPoint trackingPoint2; }; TrackingPoint Perception::trackingPoint0 = {0, 0}; TrackingPoint Perception::trackingPoint1 = {1, 1}; TrackingPoint Perception::trackingPoint2 = {2, 2}; int main() { printf("%d", Perception::trackingPoint0.x); printf("%d", Perception::trackingPoint1.x); printf("%d", Perception::trackingPoint2.x); return 0; }