1 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:26:08 ] エスケープシーケンスやWin32APIなどの環境依存な物でもOK。 ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.40【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1184717430/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
496 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 18:43:51 ] std::bad_allocを捕まえたりいろいろ例外処理を書いているのですが、 メモリ4GBもあるので、デバッグ中にbad_allocが投げられることは今まで一度もありません。 投げられた際の動作をデバッグしたいのですが、そういうときはどうすればいいでしょうか。 敢えてメモリを消費したりするんですか? ↑ではbad_allocのことですが、他にもWindowsのAPI関数が失敗したときとかも、 ちゃんと自分が書いた処理が動作するか確かめたいんですが。
497 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 19:07:29 ] throw std::bad_alloc();
498 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 19:37:17 ] >>496 適当にラップして失敗に相当する結果を返せばいいべ
499 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 20:47:05 ] 起動時に malloc(100000000) とか適当にやっとけば足りなくなるんじゃない?
500 名前:デフォルトの名無しさん [2007/08/20(月) 21:09:14 ] 例えば、"a"とか"あ"の文字コードを出力する方法ってありますか?
501 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 21:11:15 ] printf( "%d", 'a' );
502 名前:デフォルトの名無しさん [2007/08/20(月) 21:30:04 ] >>501 ありがとうございます。 このページ ash.jp/code/unitbl21.htm の、UTF-8の欄のような値を出力する方法ってありますか?
503 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:23:30 ] %Xでの表示をぐるぐるまわせばおわりだろうに。
504 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:26:44 ] >495 www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#456 によると、 > Including the header <cxxx> declares a C name in namespace std. > Including the header <xxx.h> declares a C name in namespace std (effectively by including > <cxxx>), then imports it into the global namespace with an individual using declaration. ということで、xxx.h だと std とグローバル両方で宣言されるというのが規格の意図らしい。 なので、BCB2006 の挙動は(それだけ見ると)規格に合致している。 が、現実的には > If you want to assuredly declare a C name in the global namespace, include <xxx.h>. > You may or may not also get the declaration in namespace std. > If you want to assuredly declare a C name in namespace std, include <cxxx>. > You may or may not also get the declaration in the global namespace. ということで、>495 が妥当な仮定。 規格もこの現状を追認する形での修正が提案されている。 >502 自分がやりたいと思っていることをもうちょい正確に表現して欲しい。 文字が表示されて欲しいのか、文字コードが表示されて欲しいのかどっち? 入力として考えているのはどんなデータ?外部から与えられる文字列か、文字列リテラルか。文字コードは?
505 名前:504 mailto:sage [2007/08/20(月) 22:28:32 ] 最初のアンカーは >489 につけるべきだった。
506 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 02:01:29 ] 別人ですが >>499 バグでそんな値(もっとでかい、0x40000000とか)を与えたことがあるけど、 無理に仮想記憶拡大して確保しようとして、システムが実質操作不能になるだけだった
507 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 02:33:09 ] Windowsって1プロセスが使用できるメモリ空間のサイズって指定出来ないの? Win2000の頃は2G制限とかあった記憶があるけど、今はどうなんだろ。
508 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 03:06:41 ] >>507 以下は単なる思いつき。 1. プログラムの改造が可能なら、自分用の一定量しか領域確保できないメモリマネージャを作る。 2. メモリ取得APIをフックして自力で制限する。 3. SetProcessWorkingSetSizeを指定して、同時にスワップを小さくする。
509 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 05:28:56 ] たった1000行のソースも完全に把握できねぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇ もうだめだぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ
510 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 05:38:16 ] やっと気付いたか。 さっさと人生やり直せ。
511 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:15:52 ] >>509 1関数1000行なら窓から投げ捨てろ
512 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:40:46 ] 10万行超えると見る気すら失せる
513 名前:デフォルトの名無しさん [2007/08/21(火) 09:28:25 ] float hoge = new float[100]; foo->CopyArray(hoge); Cfoo:Cfoo() { float m_array = new float[100]; } void Cfoo:CopyArray( float arg[]) { arg = m_array; } 配列のコピーをしたいとき、 上のように配列の名前(=先頭のポインタ?) だけコピーするだけではダメなようなのですが、なぜですか? for(int i=0;i<100;i++) arg[i]=m_array[i]; } のように中身を一つずつきちんとコピーしないとダメなんでしょうか?
514 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:37:17 ] arg = m_arrayだとコピーじゃなくて同じ配列に別名を付けてるだけになる
515 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:43:12 ] ::memcpy(arg, m_array, sizeof(float) * 100));
516 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:47:54 ] std::copy(&m_array[0], &m_array[100], &arg[0]);
517 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:12:35 ] >>513 >float hoge = new float[100]; コンパイルできるコードを提示しなさい。 >arg = m_array; それは、仮引き数にメンバ変数の値を代入しているだけなので、仮引き数の寿命とともに無に帰します。
518 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:13:18 ] >>515 そんなコードを書く香具師は野垂れ死に値すると思います。
519 名前:513 [2007/08/21(火) 11:55:54 ] 皆さんいろいろありがとうございます。 >>517 >コンパイルできるコードを提示しなさい。 float* hoge = new float[100]; でした。 >それは、仮引き数にメンバ変数の値を代入しているだけなので、仮引き数の寿命とともに無に帰します。 というわけで、分かっておられると思いますが渡してるのはポインタでして 寿命は関係あるんですかね? >>514 これもちょっと理屈が分かりません。 なぜ配列に別名をつけてることになるんですか? 配列の名前って先頭のポインタをさしてるんじゃなかったでしょうか? >>518 一行で済むのでforで要素を一つずつコピーするよりは>>515 >>516 はいいかなと思ったんですが、 どうして>>515 はダメなんですか?
520 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:04:44 ] >>519 >寿命は関係あるんですかね? その仮引き数の寿命は、その関数を抜けるまでです。 ポインタがポイントしている先のことは言及していませんね。 もう少し、ポインタ変数と言うものを理解しておいた方が良さそうです。 >なぜ配列に別名をつけてることになるんですか? ポインタ変数にポインタ変数の値を代入するだけでは、 ポイント先の複写は行なわれません。 もう少し、ポインタ変数(ry >どうして>>515 はダメなんですか? どうしてダメじゃないと思うんですか?
521 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:06:18 ] >>519 > どうして>>515 はダメなんですか? float配列ならば動くけど、一般のオブジェクトの配列なら破滅的。 たとえば、string配列をmemcpyしたらどうなると思う?
522 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:17:40 ] float で大丈夫ならダメとは言えないだろ。もっといい方法があるってだけで。
523 名前:デフォルトの名無しさん [2007/08/21(火) 12:24:46 ] >>520 >ポインタ変数にポインタ変数の値を代入するだけでは、 >ポイント先の複写は行なわれません。 いま気づきました。狂ってました。すいません。 要するに考え方として 「呼ぶ側で作った配列を渡してm_arrayの中身をコピーして貰ってくる」んじゃなくて 「ポインタを渡してm_arrayの先頭のアドレスだけ貰ってくる」っていうような 感じの書き方はできないんですかね? 呼ぶ側で、m_arrayの先頭のアドレスとサイズだけ分かれば 中身にアクセスできそうに思うのですが。 例えば、クラスメンバで持っているprivateな普通のオブジェクトインスタンスのポインタなんかの場合は わざわざ中身をコピーしないでアドレスだけGet〜とかで貰って使ったりするじゃないですか? >どうしてダメじゃないと思うんですか? 試したらとりあえずうまくいったんで・・・ >>521 わかりません。floatでは一応動きましたが、なんでダメなんでしょうか。 サイズ指定した範囲をコピーすればうまく動くと思うのですが。
524 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:29:27 ] >>523 > 「ポインタを渡してm_arrayの先頭のアドレスだけ貰ってくる」っていうような > 感じの書き方はできないんですかね? なんでできないと思うの?
525 名前:デフォルトの名無しさん [2007/08/21(火) 12:31:36 ] >>524 書き方が分からないんで そういう書き方が出来るなら教えてください、 ってことなんですが。
526 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:34:01 ] やっぱりポインタ変数とポイント先の関係がわかっていないような……
527 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:35:28 ] floatやint、char[]ならmemcpyしても問題ないが、下みたいなクラスだと問題が出てくる class hoge { char *str; int length; }; main() { hoge* v1, v2; v1 = new hoge; v1->str = new char[100]; memcpy(v2, v1, sizeof(hoge)); strcpy(v1->str, "v1"); strcpy(v2->str, "v2"); printf("v1.str is %s.\nv2.str is %s", v1->str, v2->str); }
528 名前:デフォルトの名無しさん [2007/08/21(火) 12:41:40 ] >呼ぶ側で、m_arrayの先頭のアドレスとサイズだけ分かれば >中身にアクセスできそうに思うのですが。 思いついて下のようにやったらうまくいったようなのですが、 これってなんか危険だったりしますか? float* hoge = new float[100]; hoge = foo->GetArray(); Cfoo:Cfoo() { float m_array = new float[100]; } float* Cfoo:GetArray(){return m_array;}
529 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:47:45 ] >>528 最初のnew float[100]で確保したメモリはどうやって解放するんだい?
530 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:52:23 ] >>528 配列のコピーをしたいんじゃなかったのか?
531 名前:デフォルトの名無しさん [2007/08/21(火) 12:58:48 ] >>527 理解にしばらく時間を要します。 脳のクロックが著しく劣っているのですいません。 >>529 これでもうまくいったっぽいですが、これならOKですか? float* hoge; hoge = foo->GetArray(); Cfoo:Cfoo() { m_array = new float[100]; } float* Cfoo:GetArray(){return m_array;} >>530 すいません、コピーというか、m_arrayの中身を どうにかして呼ぶ側で使えれば何でも良かったのですが。
532 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:00:55 ] floatの計算速度ってdoubleよりも遅いんですか?
533 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:02:09 ] >>528 巧くいってない巧くいってない。 >>531 だから、なんでコードの断片載せるんだって。 で、なんでまたfooはポインタなんだ?
534 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:03:27 ] >>532 足し算などは同じ。超越関数などは速い可能性が高い。 しかし、他の方への変換が入ったりすると遅くなることもある。 結論:一概には言えない。
535 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:06:07 ] もうスマートポインタコンテナとかRange conceptとか使う方がいいよ
536 名前:513 [2007/08/21(火) 13:14:09 ] つまりはどうしたらいいのでしょうか?もうわけ分かりません。 やりたいことはCfooのメンバとしてもってるfloatの配列m_arrayの中身を コピーするなりポインタを貰うなり、どういう方法があるのか分かりませんが 正しい方法で使いたいってことなんですが。 元の中身を書き換える必要はありません。知れればいいです。 で、とりあえず531で動いてますが、これは危険でしょうか。 要素数は別個貰うなりすれば分かるので その範囲内だけアクセスするなら大丈夫そうなんですが、ダメですか。
537 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:16:58 ] >>536 特に問題はないんじゃないの
538 名前:デフォルトの名無しさん [2007/08/21(火) 13:28:14 ] >>537 そうですか。ではひとまずこれでやっときます。 どうもお騒がせしました。
539 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:36:29 ] 書き換えないなら戻り値はfloat *ではなくconst float *にするべきだな。 それ以前に、Cfooを何故ポインタにしているかを知りたいんだが。
540 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:52:24 ] floatならSSEで高速化しやすい
541 名前:513 [2007/08/21(火) 13:53:03 ] >>539 >書き換えないなら戻り値はfloat *ではなくconst float *にするべきだな。 なるほど。 >Cfooを何故ポインタにしているかを知りたいんだが。 特に理由はないですが、 newしたCfooのポインタをメンバとして持ってるだけです。 ポインタで持ってるほうがいろいろ別のクラスに連れまわしたりするとき便利かなと。 むしろなぜそこが気になるのか知りたいんですが。
542 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:03:17 ] >>541 >むしろなぜそこが気になるのか知りたいんですが。 半ば個人的な興味だ。無条件にnewしたがるJava出身者が身近にいるもんでね。 # しかも、悪いことにdeleteする癖はついてないと来たもんだw
543 名前:513 [2007/08/21(火) 14:06:22 ] >>542 はい、まさに私のことです。
544 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:10:56 ] W
545 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:16:01 ] >>542 BCB使いもnewする癖が‥‥
546 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 15:40:21 ] OOっぽく書こうとするとそうなるんじゃないかな C++的にはスマートポインタを使え、ということになるんだが いずれにせよ常にownershipを意識している必要はあるね
547 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 16:02:26 ] ローカルなオブジェクトまでnewを使い始めたらもう、末期症状だ。 # オブジェクトは全てグローバルに管理されているとしたら、それはそれで難だけど。
548 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 16:03:31 ] >>545 VCL使ってると確かにnew癖つくなw
549 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 18:22:21 ] カウンタ付けて自動でdeleteするclassくらい自作しろ
550 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 21:25:00 ] 何で既にあるもん作りなおさにゃならんのん・・・
551 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 22:27:07 ] boostの名前あげるとboost厨ウゼェとか言われるから
552 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 00:16:08 ] std::tr1::shared_ptrならいいのか?
553 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 04:50:10 ] 俺はboost::intrusive_ptrが好きだが、めんどい人にはめんどいだろうな。
554 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 10:37:52 ] もうIUnknown/comdef.hでいいよw
555 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:21:10 ] int main (int argc, const char * argv[]) { char string[] ="Hello,World"; char copystring[13]; stringcopy (string,copystring); printf("%s¥n",copystring); return 0; } void stringcopy (char *buff,char *copy){ int i = 0; while(buff[i]){ copy[i] = buff[i]; i++; } copy[i] = '¥0'; } でwhile(buff[i]){…}を for(i=0;buff[i] == 0;i++) copy[i] = buff[i]; とすると動かないんですけれど、何故ですか?
556 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:25:25 ] >>555 条件逆にして動くとでも思ってんの?
557 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:29:42 ] for(i=0;buff[i] == 0;i++){ printf("loop %d\n",i); copy[i] = buff[i]; } ってやってみたら、なにか気づくかも
558 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:36:13 ] わかった! for(i=0;buff[i] != 0;i++) ってすると動くぞ!
559 名前:デフォルトの名無しさん [2007/08/22(水) 12:49:13 ] Containerというクラス名をAAというクラス名にしたら、 Container.h:9: an anonymous union cannot have function members Container.h:26: abstract declarator `<無名 class>' used as declaration Container.h:26: anonumous 名前空間の集合体は static でなければなりません
560 名前:デフォルトの名無しさん [2007/08/22(水) 12:50:45 ] >>559 すいません、間違えて「書き込む」ボタン押してしまいました。 Containerというクラス名をAAというクラス名にしたら、 AA.h:9: an anonymous union cannot have function members AA.h:26: abstract declarator `<無名 class>' used as declaration AA.h:26: anonumous 名前空間の集合体は static でなければなりません というエラーが出てきたのですが、このエラーの意味が理解できません。 教えてください。
561 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:12:06 ] エスパー募集するんでもなければコード貼れよ。
562 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:16:23 ] >>560 最初のエラーだけとってみれば 無名共用体には関数メンバを持つことができない というエラー。 だから名前だけじゃなくて何か意味または構造が変わるような修正をしてると 思うけど、情報が不足してるのでこれ以上のことは分からない。
563 名前:デフォルトの名無しさん [2007/08/22(水) 13:42:53 ] >>559 です。 自己解決しました。 ContainerからAAに名前を変えたときに、 #ifndef CONTAINER #define CONTAINER #include "Container.h" #endif も #ifndef AA #define AA #include "AA.h" #endif としていたためにエラーが出ていました。 情報の足りない質問で申し訳ありませんでした。m(_ _)m
564 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:51:53 ] >>563 まあ、解決したのはよかったけど、 そもそものソースの構造がおかしいんじゃないのか? 普通は Container.h の中で全体を Container.h ----------------- #ifndef CONTAINER #define CONTAINER 〜 #endif ----------------- としてくくるんであって、includeする側では、二重取り込み防止マクロなんて書かないだろ。
565 名前:でいびす [2007/08/22(水) 16:08:55 ] VC++5.0でファイルリードをやってます。 その時、読込んだ値を文字として認識できるか 調べたいのですが、やり方を教えてもらえませんか? ループしながら、1文字づつ調べたいです。 ちなみに、文字列には半角の日本語と全角の日本語が混在しています。 お願いします。
566 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:23:15 ] 文字として認識ってのがあいまいだけど _ismbbprint あたり使えるか調べて見れ
567 名前:でいびす [2007/08/22(水) 16:51:43 ] >>566 _ismbbprintは使えませんでした。 ビルドが通らなかったです。
568 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:55:13 ] ttp://msdn2.microsoft.com/ja-jp/library/6d27cy2z(VS.80).aspx
569 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:59:27 ] なんだってVC++5.0なんてもんを使ってるんだ
570 名前:でいびす [2007/08/22(水) 17:04:29 ] >>569 古いプログラムをカスタマイズする事になったので使ってます。
571 名前:でいびす mailto:sage [2007/08/22(水) 17:11:52 ] >>570 古いプログラムをカスタマイズする事になっても使う必要ありません。
572 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 17:23:18 ] いやー、そうとも限らんぞー
573 名前:でいびす mailto:sage [2007/08/22(水) 17:24:06 ] >>570 いやー、そうとも限らんぞー
574 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 17:25:49 ] VC++5.0ってSTLがはじめてバンドルされた版だよな 無理やり使ったが、今にして思えばひでえ出来だった
575 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:20:05 ] new が失敗した時に NULL を返すことを前提にプログラムしてたりするんだろうなあ。
576 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:22:18 ] new が失敗した時に NULL を返すことを前提にプログラムしてたりしてます。
577 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:42:58 ] new(nothrow)使えば問題なし
578 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:45:10 ] newハンドラ使えば問題なし
579 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 20:49:37 ] set_new_handler じゃなくて _set_new_handler で、 new ヘッダじゃなくて eh.h で宣言されてたんだっけ。 bad_alloc は VC5 で宣言されてたっけ?
580 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:01:23 ] >>565 VCだと昔から日本語対応の関数はあって、どこかのバージョンで _ismbXXXX のようなマルチバイト系関数であることを明示するような 関数名になったはず。 それがVC++5.0かどうか知らないが、でもだから対応する関数はあるはず。 で、ぐぐると以下のサイトに適度に古そうな関数名がならんでいるので 試してはどうだろうか。 ttp://www.geocities.co.jp/SiliconValley-Bay/7437/c/is.htm
581 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:08:46 ] UTF-8だったりEUC-JPだったりISO-2022-JPだったりする可能性は? というのは余計なお世話か。
582 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:12:02 ] 文字コードについては>>565 が勝手に判断するでしょ。 だいたいVC++5.0の時代のアプリにShift_JIS以外使ってるとも思えないけど。
583 名前:でいびす mailto:sage [2007/08/22(水) 21:14:17 ] VC9使うことにしますた
584 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:09:24 ] VC++はソースのエンコードすら指定できない糞コンパイラ
585 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:13:51 ] >>584 はVC++はソースのエンコードすら指定できないコンパイラと思っている糞
586 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:20:15 ] できるの? clにそれらしいオプションが見当たらないからできんのかと思ってた
587 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:24:34 ] >>585 どうやって指定するの?
588 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:31:21 ] >>585 おれもきになる
589 名前:デフォルトの名無しさん [2007/08/22(水) 22:40:08 ] std::vector<foo> hoge という変数があるとして、 これを関数の引数に渡すときはhogeのポインタを渡した方が hoge自体を値渡しするより動作は速いですか?
590 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:41:32 ] その通りだが、せっかくC++なのだからリファレンス渡しするか iteratorを渡せ
591 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:43:22 ] 何すかそれ
592 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:45:33 ] void hogehoge(std::vector<foo>& rhoge);
593 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:48:03 ] >>591 void swap_ptr(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } void swap_ref(int &a, int &b) { int tmp = a; a = b; b = tmp; } main() { int m = 1, n = 2; swap_ptr(&m, &n); swap_ref(m, n); } swap_ref()がリファレンス渡し。 この場合は入出力引数だが、入力だけでいいんならconstつけろ。
594 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:50:19 ] >>590 サンクスコ
595 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:55:22 ] >>593 サンクスコ
596 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:12:21 ] ドトネトのMicrosoft.VisualC.CppCodeProviderってもしかしてclのかわりに C++コンパイルできんのか マネージドじゃないと無理かな