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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。 宗教的な話題は禁止します。
730 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:38:00 ] >>728 エラーとはどういうこと? 次のように、単純に2回実行することを試したが、なんの例外も投げられることなく実行されるけど。 using namespace System; using namespace System::IO; int main() { UInt32 aa; aa = 0x12; { FileStream^ fs = gcnew FileStream("tmp.bin", FileMode::Create); BinaryWriter^ binWriter = gcnew BinaryWriter( fs ); binWriter->Write( aa ); binWriter->Close(); } { FileStream^ fs = gcnew FileStream("tmp.bin", FileMode::Create); BinaryWriter^ binWriter = gcnew BinaryWriter( fs ); binWriter->Write( aa ); binWriter->Close(); } }
731 名前:728 mailto:sage [2009/12/22(火) 01:08:58 ] >>730 すいません、他のサブルーチンがひっかけてました。 ありがとうございました。
732 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 01:35:39 ] >>731 そうそう、BinaryWriterのCloseは、大元のストリームもCloseすることになっているから、 fs->Close()は無くても平気だよ。もちろん、あっても害はないから気にしなくても全然問題ない。
733 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 02:58:29 ] すみません、 普通、構造体のインスタンスに、STLで見かける.size()メンバなんて有りませんよね? ttp://marupeke296.com/DXG_No37_AnimationController.html ここの「アニメーション上位レベル構造体」が「SetLoopTimeメソッド」で.size()されていて そのままインスタンスを作ってコンパイルしようとすると、当然のように >error C2228: '.size' の左側はクラス、構造体、共用体でなければなりません と出ます。 この構造体は何か、普通と違った使い方をしているのでしょうか? それとも私が、何か知らなければいけない事を知らないだけなのでしょうか。
734 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 04:52:19 ] >733 C++は詳しく知らないし、僕が昔使っていたときにはinterfaceなんてなかった気もするがおそらく class CHighLevelAnimController : IHighLevelAnimController { private: vector<struct HLANIMATION_DESC> m_Amin; CHighLevelAnimController operator=(CHighLevelAnimController& c) { return c; } public: CHighLevelAnimController() { } ~CHighLevelAnimController() { } bool SetLoopTime(UINT, FLOAT); ... }; CHighLevelAnimControllerクラスは、IHighLevelAnimControllerインターフェイスを継承(実装)して m_Aminオブジェクトは、vector<>のようなテンプレートクラスのインスタンスとしてCHighLevelAnimControllerクラスまたはその基底クラスで定義されている interfaceキーワードに詳しい人詳細キボン
735 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 05:39:46 ] >>734 Windowsでは、どこかのヘッダで#define interface structってされているだけ。 >>733 自分も、m_Animは実際にはなんらかのSTLコンテナか何かなのだと思う。
736 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 11:08:03 ] >>734 >>735 何か特別な使い方かと思いましたが、STLに包んでいるとかなのですね。 ありがとうございました。
737 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:13:02 ] すみません。 起動や大型のファイル群を読み込むなどで10秒前後待たせる時 画面にLoading表示やその進行状況を表示したいのですが、 あれはどう実装するものなのでしょうか? 普通に組むと1つの工程(ファイルなど)単位で処理が停止してしまいますし、 「Loading」「読み込み画面」などの検索ワードでは違うものばかりHitし、 実現方法を見つけられずにいます。 何かご助言を頂けると幸いです orz
738 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:24:50 ] マルチスレッド
739 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:57:06 ] 1ファイルの読み込み途中の経過を出したいなら、読み込みの関数を呼ぶ度に進行状況のウィンドウを書き換える
740 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 17:13:38 ] >>738 ググってみました。マルチプロセス処理というものが有るのですね。 これで実現への道筋が見えました。ありがとうございました。 >>739 そうですね。その程度なら勉強〜開発時間を殆どかけずにやれそうですね。 ありがとうございました。
741 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 17:15:01 ] 凝ったLoading画面を作るならマルチスレッドが楽 止まってないことだけ示したいなら、一部読み込んでは表示、を繰り返せばいい
742 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 17:15:41 ] マルチプロセスとマルチスレッドは一般的には別物だぜ
743 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 09:19:30 ] 端折れば マルチプロセス>メモリ空間が別 マルチスレッド>同じメモリ空間
744 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 14:01:26 ] HAL研のプログラミングコンテストの難易度をおしえてください。 ひととおり文法勉強したんですが、難しく思えます
745 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 18:35:29 ] 2009年のを見たけど、C++を適切に勉強していれば(文法的には)難しくはないと思うけどな 最短経路問題とかその類のロジックを問う問題でしょ 文法が分からないのであればそれ以前のレベルってことだね
746 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 19:20:51 ] どうやらプログラミングではなく、アルゴリズムを競うコンテストっぽいね。
747 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 21:20:54 ] >>744 俺も去年の春からプログラミングを勉強し始めたばかりで参加してるけど アルゴリズムを考えるだけだから文法がわかってれば何も難しくもなくね? 難易度はどうですかって質問の答えにはなってないとは思うけど
748 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 01:18:43 ] >>745 >>746 >>747 なるほど。じゃ用意されている関数を使えるレベルすらないので もう少し勉強してからトライします。もう終わりそうですけど。 レスありがとうございました。
749 名前:デフォルトの名無しさん [2010/01/07(木) 06:18:50 ] openmpはマルチプロセスにする方法はありますか?
750 名前:デフォルトの名無しさん [2010/01/07(木) 14:17:20 ] const Hoge* const Hoge& Hoge const* Hoge const& の違いを実例を挙げて詳しく教えてください。
751 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 16:17:41 ] 実例だったら自分で組んでみれば分かるだろ。
752 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 17:02:22 ] 俺も const& の2つがよくわからん。
753 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 17:18:14 ] const Hoge& と Hoge const& は一緒だから気にするな & を超えて Hoge& const になると変わる
754 名前:753 mailto:sage [2010/01/07(木) 17:19:46 ] ごめん 何かわけのわからんことを言った 参照はもともと変更不可だから Hoge& const のようなものは無かった Hoge* const はある
755 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 17:30:50 ] >>754 もちつけ。参照も変更可能。 #include <iostream> int main() { int a = 10, b = 20; int &r = a; std::cout << r << std::endl; r = b; std::cout << r << std::endl; /* int &const cr = a; // `const' qualifiers cannot be applied to `int&' std::cout << cr << std::endl; cr = b; std::cout << cr << std::endl; */ int *const cp = &a; std::cout << *cp << std::endl; //cp = &b; // error: assignment of read-only variable `cp' std::cout << *cp << std::endl; return 0; }
756 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 21:52:05 ] delete this; って適切に現在?のオブジェクトを破棄してくれるのですか?
757 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 22:21:38 ] 適切に使えば
758 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 23:39:12 ] >>755 >>753 が言ってるのは「別のオブジェクトを指すように変更することはできない」ってことだよ。 Hoge&は最初からHoge*const相当で、参照にHoge*に対応するものはないんだから。
759 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 09:32:09 ] >>758 別のオブジェクトを指すように変更することはできない? いつからそうなってんの?w int a = 10, b = 20; int &r = a; std::cout << r << std::endl; r = b; std::cout << r << std::endl; これを実行して確認しる。
760 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 09:33:45 ] >>758 あーごめんw 俺が狂ってた。 r = b; これはひょっとして、代入されてるのか。 ( つд∩)うえーん ( つд・∩)チラ
761 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 09:42:09 ] int a = 10, b = 20; int &r = a; std::cout << &a << ' ' << &b << std::endl; std::cout << r << ' ' << &r << std::endl; r = b; std::cout << r << ' ' << &r << std::endl; 実行結果: 0x22cce4 0x22cce0 10 0x22cce4 20 0x22cce4 ___ ←樹海| オワタ  ̄|| ̄ ┗(^o^ )┓三 >>753 >>758 両氏ごめん || ┏┗ 三  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
762 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 09:50:12 ] 学校の課題で配列に10個の実数を入力して最大値と最小値を求める問題なんですが、最大値は正常に出力されますが、最小値がうまく出力されません。 #include<stdio.h> int main (void) { float x[11]; float max,min; int i; printf("実数を10個入力してください\n"); for ( i = 1; i <= 10; i++){ scanf("%f",& x[i]); } max = x[0]; for ( i = 1; i <= 10; i++){ if (x[i] > max){ max = x[i]; } } min = x[0]; for ( i = 1; i <= 10; i++){ if (x[i] < min){ min = x[i]; } } printf("最大値は%fです\n",max); printf("最小値は%fです\n",min); return 0; } どこが原因なんでしょうか?
763 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 09:56:55 ] x[0]が未初期化
764 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 12:59:46 ] すみません。複数のクラスを辿りループ処理をするプログラムで クラス毎に1度だけ変数の初期化をさせたい場合、 1.コンストラクタを使う (再初期化が必要になった場合、結局の後者いずれかが必要に・・?) 2.各クラスのグローバルスコープに初期化用のstatic boolを置いて処理 3.初期化用メソッドを別に作って纏めて管理 この3つが思い付くのですが、 どういう初期化が定番、もしくは設計的に無難だと思われますでしょうか?
765 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 13:29:43 ] staticイニシャライザじゃダメなの?
766 名前:765 mailto:sage [2010/01/08(金) 13:30:28 ] ごめんJavaと勘違いしてました
767 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 09:17:09 ] >764 辿るのはクラスなのオブジェクトなの? 初期化するのはクラス毎なのオブジェクト毎なの? どんな処理しようとしてるのかが良く分からない。 擬似コードでいいから書いてみてくれた方が答えやすい。 「クラス毎に1度だけ」の条件を抜いた上で感覚で答えれば、 それが本当に「初期化」ならコンストラクタにすると思う。 状態の再設定が必要なら reset() みたいなメソッドも作るだろうね。 >各クラスのグローバルスコープ 言いたいのはクラススコープじゃね?
768 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 12:33:35 ] >>767 初期化じゃなくて再設定って言わないとですね; >各クラスのグローバルスコープ すみませんでした、そんなの無いですよね; つい完成するまでは1行で済むクラスの置いてるソースファイルのグローバルスコープにstatic boolを置く癖から。。 表現に注意します; そして、変数の再設定メソッドが良さそうですね・・ありがとうございました。
769 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 17:08:21 ] すみません。 「配列にはしたくない変数名の末尾」に数字を付けるのは、滅多に見ない気がするのですが、何か危険なのでしょうか? 以前はhennsuuA ..B ..C としていたのですが、最近はhennsuu1 ..2 ..3 とやっているのですが・・
770 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 17:10:45 ] そういう命名がふさわしい場合が滅多に無いから
771 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 17:16:39 ] a, b, c, 1, 2, 3 なんて機械的な命名ではなく、それぞれの変数の役目に合った意味のある名前を付けるべき いい名前が思い浮かばないのなら変数名スレに相談してみては
772 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 17:22:51 ] 単純に通し番号を振るのがふさわしいような場合は、普通は似たような処理をそれぞれ の変数に適用するだろうから、素直に配列にすることが多いだろ。 配列はふさわしくないが通し番号がふさわしい、という場面が滅多に無いから、そういう 命名も滅多に見ないだけ。 で、その言い方だと頻繁に通し番号を振ってるようだから、やはり命名がおかしいか、 よほど特殊なジャンルで活動しているか。まぁ、後者ならこんな質問は出ないだろうと 思うので、多分前者だろう。
773 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 17:24:18 ] たまに通し番号が多発しやすいジャンルもあるから、何を作っててそういうコードに なるのか知りたい気もする
774 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 18:12:39 ] >>770-773 ありがとうございます。危険性そのものは多分、無いのですね。 私のプログラミング能力の低さから来てる問題なのが大半だとは思います。 あとは、 変数1の値に応じて処理をわけ、変数2の値に応じて処理を分け と どっちも1桁の数値だから配列にして置いてても良いのですが、 一応種類が全く違う2つなので、名前を別にしたいのですが 違い過ぎると使い間違えそうになるので・・とりあえずa, b, c, 1, 2, 3 と やっちゃってました。 変数名スレッドなるものが有るんですね。 探して見てこようかと思います。 ありがとうございました。
775 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 19:05:36 ] まーゲームなんかだと変数名にシリアル振りたくなることはある でも今時そこまでガチに汚く組まないと困ることはコンシューマでも珍しい
776 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 22:33:15 ] 意味は異なるが関連のある変数? なら構造体にするとか
777 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:07:00 ] ポインタを配列形式でアクセスするとき、添字に負の数を指定するのは文法上許されるのでしょうか。 int a[10]; int *p = a+5; p[-4] = 0;
778 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:10:40 ] >>777 値の正負は文法上の問題ではないので、非負の値が許されるなら当然、文法上は、有効。
779 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:43:20 ] けどすごい紛らわしい書き方だな…
780 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:01:30 ] まぁ素直に*(p-4)=0と書いた方がいいわな。1[p]とかと似たような空気を感じる。 どうでもいいけど、-4[p]=0は試してないけど有効じゃなさそうだな、優先順位的に。
781 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 18:13:26 ] 一連の流れでmalloc/freeを連想した
782 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 20:05:01 ] >>780 (-4)[p] なら大丈夫
783 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 20:17:49 ] そんな書き方、文法が許しても俺が許さん
784 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 20:38:04 ] コーディング規約とかで人のプログラミングスタイルを制限するのは ナンセンスだと思っている俺ですら>>782 はぶち殺したくなる
785 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 09:30:44 ] べつにいいやんw 一箇所だけとか、少ないときは。 きっと清涼剤のようにさわやかになれるぞ。
786 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 09:40:05 ] なれねーよw
787 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 21:22:34 ] マジックナンバーならまだ一目でわかるが int a[10]; int *p = a+5; int n = -4; /* 数十行のコード */ n[p] = 0; とかなってたら明確な悪意を感じる
788 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 20:40:13 ] すみません。 共通の変数50個を扱うデータクラスA(インスタンスは500個)に関連して 10種x1〜20の配列(ムラの激しい追加情報)が必要なのですが、 全部データクラスAに入れてしまうと、約190個x400インスタンス=76000個分ほどの変数は無駄になる計算で・・。 STLを使うなりクラスをバラにするなり考えているのですが こういう場合、どうデータを管理するのが定番、妥当なのでしょうか?
789 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 21:05:01 ] たかが76000個くらい気にしない、というのも一つの解決方法
790 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 21:24:38 ] 76000個のインスタンス一つは組み込み型程度なの? とりあえず気にしないで作ってだめそうだったら工夫するとか? 76000個をヒープに取ったらまずい?
791 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 21:44:52 ] 使うときに使う分だけ配列を確保すればいいんじゃね?
792 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 23:57:49 ] それは本当に配列でなければいけないの?
793 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 01:55:58 ] >788 >共通の変数50個 この段階でクラスの切り分け方ミスってるような気もするが。 追加情報については STL のコンテナ使うなり(コンテナの選択は追加、削除、検索の発生の仕方次第)、 適当なクラスにラップするなり、ケース次第だと思う。 追加情報に対して単なるコンテナ以上の操作が必要ならばクラスにラップするかもね。
794 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 19:56:01 ] >>789-793 ありがとうございます。巻き添えらしいアクセス制限で返事が遅れてすみません。 今は、言われてみれば数十KB位のようですし、そのままデータクラスAに入れて使う事にします。 問題になってきたらご助言を参考に改良したく思います。 ありがとうございました。
795 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 13:10:49 ] すいません。 DIRECT法(DIviding RECTngle)のプログラムを組むことになったのですが、 どうにもとっかかりが無くて困っています。 おおよその理論は分かっているのですが、形にすることが全くできません。 ググって見たりはしたものの、それらしきプログラムソースは落ちていませんでした。 助けていただくことはできますでしょうか?
796 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 13:36:39 ] >>795 ググると普通にあるけど…? ソースが欲しいって訳?
797 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 18:44:46 ] >>796 ソースがあれば、いただけると幸いです。
798 名前:デフォルトの名無しさん [2010/01/29(金) 17:20:14 ] 795 どなたかお願いします。 書き忘れましたが、C++です。 本当に困ってます
799 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 17:43:15 ] 留年したまえ
800 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 17:53:41 ] >落ちていませんでした こういうこと書かれると手伝う気うせる
801 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:13:46 ] >>800 なんでだよw
802 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:25:14 ] >>801 なんでだよじゃねえだろ。失礼甚だしい
803 名前:801 mailto:sage [2010/01/29(金) 22:04:27 ] >>802 まあ・・・確かに落ちているという表現はあまり良くなかったかもしれんな。 ま、その辺は本人がきっと弁明するということで。
804 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:32:16 ] >>803 お前がその本人だろ・・・ 何しれっと他人の振りしてんだよ
805 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 00:01:15 ] >>804 いや別人だから失敬な。 まあ何だっていいけど。 証明方法がないもんなぁ。
806 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 16:20:48 ] 795です。 ご指摘の通り「落ちている」という表現は悪かったと反省してます。 ただ本当に困っています。どなたか助けてくれる方いましたら 本当にお願いします。
807 名前:805 mailto:sage [2010/01/30(土) 16:26:09 ] >>806 このスレには低能力者しかいないから 別のスレ(ttp://pc12.2ch.net/test/read.cgi/tech/1263556932/とか) に行ってみたらどうでしょうか? > 証明方法 fusianasanがあったか。 でもまあ晒したくないからやめとこう。
808 名前:805 mailto:sage [2010/01/30(土) 18:03:11 ] >>806 言い忘れたが、常識で考えてくれ。 このままだとマルチポストになるぞ。 どっちかでは別スレに行ってきますと断りをいれましょう。
809 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 18:25:36 ] すいませんでした。別スレ行きます
810 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:22:32 ] . ____ _ | (・∀・) | `)) | ̄ ̄ ̄ ̄ ´ ∧ <⌒> /⌒\ _________]皿皿[-∧-∧、 /三三三三三三∧_/\_|,,|「|,,,|「|ミ^!、 __| ̄田 ̄田 / ̄ ̄Π . ∩ |'|「|'''|「|||:ll;| /__,|==/\=ハ, ̄ ̄|「| ̄ ̄ ̄ ̄|「| ̄ ̄| /_| ロ ロ 「 ̄ ̄ ̄ | | 田 |「| 田 田 |「|[[[[| |ll.|ロ ロ,/| l⌒l.l⌒l.| | |「| |「|ミミミミミミ
811 名前:保守 [2010/02/06(土) 11:57:12 ] ttp://exlight.net/devel/cpp/string_initialize.html C++の初期化指定は複雑 C++の初期化は恐ろしく複雑になってて, struct S { int a; static int b; int c; } s = { 1, 3 }; と書いたらs.a = 1,s.c = 3と初期化されるなんてルールも決まっている.あんまり深入りしないでおこう….
812 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 13:12:32 ] 複雑というより落とし穴だらけ、という感じだな
813 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:04:51 ] >>811 まあねえ 静的メンバは外で定義しないといけないしね そうしないとコンパイラから叱られる
814 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:21:56 ] だが、スタティックメンバ変数程度で*恐ろしく*複雑ってのは、さすがにどうよ? そりゃCよりは複雑だけど、C++に限らず、いまどきの言語でクラス変数使ったら 同じような状況になるし、少なくともスタティックメンバ変数の初期化ルールは *恐ろしく*なんて形容されるほどじゃないと思うんだが。 ついでに聞きたいんだけど、C++に限らず、みんなが「こいつは複雑だ」と思った 言語仕様ってある? 例えば多重継承とかテンプレートとかは複雑?簡単?
815 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:49:22 ] テンプレートの部分特殊化のルールは複雑だと思う
816 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:50:05 ] あとADLは時々わけがわからなくなる STLが吐く長いエラーメッセージはさすがに慣れたけど
817 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:55:31 ] ヘッダに const 定義しても ODR にならない場合のルールは複雑だ。
818 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:35:00 ] そりゃわかにくく書こうと思えばわかりにくく書けるさ とにかく他人にも,そして自分にもわかりやすく書くだけ 忘れた頃に見ても
819 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 02:26:30 ] 座標入れようと思ってdouble[3]のvectorを作ったはいいが、push_backしたときにエラー出る。 仕方ないから struct XYZ{ double array[3]; XYZ(){} XYZ(const XYZ&xyz){memcpy(array, xyz.array, sizeof(double)*3);} ~XYZ(){} XYZ &operator[](unsigned int n){ return array[n]; } }; って作ったけど、もっと楽にできなかったのかなぁ?
820 名前:819 mailto:sage [2010/02/10(水) 02:32:51 ] あ、そんなの言うと、普通にvector<vector<double> >使えって言われそうだけど、 大量の要素を入れたかったんで、double配列いっこいっこに、mallocの管理領域使うのがもったいなかったんだ。 あと、vector<double>にしといて、[i][j]を[i*3+j]ってしたり、ループするときにイテレータ3個飛ばしにしてもよかったんだけど、 なんかそこらへんでコードが地味に複雑化するのが嫌だったんだ。
821 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 05:43:20 ] >>819 boost::array<double, 3>
822 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 07:02:33 ] 要素が3つくらいならboost::tupleとか。 配列っぽく扱える必要があるなら使えないが。
823 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 07:26:33 ] boost::arrayがせいかいじゃね?
824 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 10:25:35 ] >>819 POD型の配列にはコピーコンストラクタがないからエラーになるんだろ
825 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 11:09:45 ] >>821 そんなのがあったのですね。トンクス
826 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 07:34:09 ] すみません。Visual C++ 2008 Express Editionで ブレークポイント(行の左に赤丸)を付けてデバッグ開始をした時に ・ちゃんと矢印が出て止まる状況 ・透明な円になり、黄色い△に!が付いて止まらない状況 の2パターンが起きるのは何故なのでしょうか? 以前はちゃんとブレークポイントを入れれば矢印で止まってくれたのですが、 今は止まってくれず、無理に手前のブレークポイントからステップインすると ソースを表示できない とか 逆アセンブル画面へ とかと出てしまいます。 どうすればコードを辿れるようになるでしょうか・・。
827 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 10:17:30 ] 変更したのにビルドされてない、とか別の場所のソースだったりとか
828 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 15:12:40 ] デバッグビルドにするとか
829 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 15:25:45 ] あーリリースビルドで最適化で消されてると中抜きの丸になるな
830 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 20:31:00 ] >>827-829 情報ありがとうございます。デバッグモードのままでこうなるのですが・・ 頂いた情報から調べてみようと思います。 ありがとうございました。