1 名前:v(^・^)v mailto:sage [2010/02/13(土) 23:18:03 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part77 pc12.2ch.net/test/read.cgi/tech/1263556932/
403 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 23:29:57 ] >>400 なんだかどうしようもないところでボケていてすまんかった
404 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 23:45:55 ] >>402 「オーバーロードされてなければ」それで合ってる
405 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 15:54:25 ] ttp://codepad.org/AsWip2mX このコードで std::cout << hairetsunoyousosuu(arr) << std::endl; の部分は 期待通りになるのですが std::cout << foo(arr) << std::endl; の部分が期待通りになりません。 どうすれば 「引数として渡された配列の要素数を返す『関数』」 が書けるでしょうか? よろしくお願い申し上げます。
406 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 16:00:57 ] 関数の仮引数の[]はただのポインタに変わる コンパイル時にわかるものなら_countofを参考にする それをDLLとして公開するとか誰が渡すんだかわからないものを自動で取得する汎用的な方法はない
407 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 16:03:23 ] >>405 main::arrはint[5]型 foo::argはint[]型 sizeof(int[5])はsizeof(int*) * 5 sizeof(int[])はsizeof(int*) int*とintの大きさがたまたま同じだっただけ。
408 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 16:05:30 ] >>406 ポインタとは違ってmainで定義したarrの要素全部がコピーされるけどね。
409 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 16:34:50 ] 構造体と勘違いしてんじゃねえのお前
410 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 16:42:25 ] こまけぇことはいいんだ、vector使え!
411 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 18:23:11 ] >>405 なんか codepad は Error 500 で見れなかったんだけども、こういう話? d.hatena.ne.jp/matsutakegohan1/20071006/1191643652
412 名前:405 mailto:sage [2010/02/27(土) 19:19:17 ] >>406-411 みなさんありがとうございます。 template<class T, int N> int len(T (&)[N]){return N;} と #include <cstddef> template<typename T, std::size_t N> char (&lengthof_helper_char_array(T (&a)[N]))[N]; #define lengthof(a) (sizeof(lengthof_helper_char_array(a))) ですと、どちらが望ましいのでしょうか?
413 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 19:24:04 ] >>412 どちらが望ましいかは場合によるね。 前者はコンパイル時定数としては使えない。 後者はコンパイル時定数として使えるようにしてあるけど、そのために読みにくく なっているし、基本的に避けるべきであるマクロまで組み合わされている。
414 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 19:39:51 ] >>413 なるほど、そう言った違いがあるのですね。 ありがとうございました。
415 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 19:43:00 ] ttp://www.kijineko.co.jp/tech/superstitions/parameter-of-isalpha-is-char.html ここに書いてあることについてお伺いしたいのですが。 const char str[] = "abc123"; for (char* s = str; *s != '\0'; s++) { if (isalpha(static_cast<unsigned char>(s))) { ... } } こうすべきとのことですが、これは const char str[] = "abc123"; for (char* s = str; *s != '\0'; s++) { if (isalpha(s)) { ... } } の用にキャストを外すと動かないことがあるということでしょうか? "abc123"のように、内容全てがASCII文字であってもだめなのでしょうか? よろしくお願い申し上げます。
416 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 19:46:07 ] >通常は問題ないのですが、多バイト文字を含む文字列の各要素を順に is 系関数で調べる場合などは、
417 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 20:04:49 ] >>416 多バイト文字を含む文字列の各要素も isalphaでアルファベットかどうかを調べることが可能と言うことでしょうか? たとえば "あいうえおabcd" のような全角文字でもできるのでしょうか?
418 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 20:10:47 ] その記事も含めてそんなことをいってる奴は居ない
419 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 20:11:28 ] > is 系関数に実引数として渡すことができる値は、0 〜 UCHAR_MAX または EOF だけです
420 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 20:30:00 ] ASCIIだけなら問題ないんじゃない? 他の文字コード入ってたら知らんけど
421 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 20:58:27 ] "abc123"は多バイト文字を含む文字列ではありませんよね。 では多バイト文字を含む文字列の各要素を順に is 系関数で調べる場合など とは、具体的にはどんな文字列のことなのでしょうか?
422 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 21:17:37 ] sjisとかunicodeとか。 isalphaのかわりに_ismbcalphaやiswalphaで調べられる。
423 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 21:22:38 ] 3の倍数のときだけ多バイトな文字列の例. "123456789"
424 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 21:39:22 ] それスゲー迷惑だけどオッサンが漢字キーを駆使しながら頑張って作ったものだと想像するに少し許せる 正規表現置換とかだったら死刑
425 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 23:14:54 ] 文字コードって訳わかんない ひとつに絞って他のコードは国際法で規制しろよ
426 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 23:43:28 ] >>425 トロンコード最強ってことで。くっくっく。
427 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 00:29:23 ] >>415 isalpha()に「0〜UCHAR_MAX または EOF 以外の値」が渡された時の動作は未定義 ということはわかっているのかね。きじねこは不可解な動作やらクラッシュという表現をしてるが 例えばstrにSJIS全角文字「A」(コード0x8260)を含んでいたとして(str="Aabc123"とか) forループ内でisaplha()に、0x82、0x60と渡されていくことになるが、 例えばcharが符号付きでint型が32ビットの処理系だと0x82→0xffffff82と 符号拡張で変換されるから「0〜UCHAR_MAX または EOF 以外の値」となって未定義となる unsigned charにキャストしとけば「0〜UCHAR_MAX または EOF」には納まる このきじねこの記事雑だな constや*忘れてる
428 名前:415 mailto:sage [2010/02/28(日) 00:34:56 ] >>422 >>423 >>427 解説ありがとうございます。 そう言った意味なんですね。
429 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 18:15:24 ] hoge *p = new hoge; my::smp q(new hoge); // ok my::smp r(p); // no! 上の初期化法だけを許可したいんだけど、方法はある? つまりテンポラリなポインタだけを受け取れるような方法 C++0xだと右辺値参照というのがあるからできるらしいのだけど・・・ 今ではまだメタプログラミングを駆使しても不可能かな?
430 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 18:20:41 ] 無理。my::smpのコンストラクタ内でnew hogeを実行するようにすれば近いことはできるんじゃない? 引数付きのコンストラクタも考えると現実的でないが
431 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 19:01:30 ] >>430 thx コピーコストが気になるけどその方向で考えてみますわ
432 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 21:10:12 ] boostにそんなのがあった気が
433 名前:デフォルトの名無しさん [2010/02/28(日) 23:34:24 ] テンプレートクラスについてお聞きします。 テンプレートクラスは、ヘッダファイル内に関数の実装の定義も書きますよね? もしテンプレートの特殊化をした場合は、cppファイルに書いていいものなのでしょうか? たとえば、テンプレートパラメータにbool値をとるクラスを定義したとして、 関数の実装をヘッダファイルに書かず、 テンプレートパラメータがtrueのときの処理と、falseのときの処理を それぞれcppファイル側に書いてもいいものでしょうか? (そのようなクラス設計がいいかどうかは別として・・・)
434 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 23:36:04 ] >>433 まずいだろう 他のファイルからもそのヘッダファイルを参照していたらどうなる?
435 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 23:50:58 ] >>433 いいよ template<bool A> struct X { void f() {} }; template<> struct X<true> { void f(); }; とヘッダーに書いて void X<true>::f(){} を別のコンパイル単位に書くのはOK。 bool が typename でも同じ
436 名前:デフォルトの名無しさん [2010/02/28(日) 23:51:44 ] クラス設計に関して質問です。 Waveファイルの入出力に関するクラスと、再生に関するクラスの2つを作ったとします。 実際waveファイルを入力して、再生するというプログラムを書く場合オブジェクトを何にしたらいいでしょうか? オブジェクト指向がよくわかっていなくて・・・
437 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 23:59:35 ] // ヘッダファイル template<bool B> struct hoge { hoge(); }; // ソースファイル template<> hoge<true>::hoge() {} template<> hoge<false>::hoge() {} これで問題ないね
438 名前:433 [2010/03/01(月) 00:18:10 ] >>435 >>437 ありがとうございました!
439 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 00:45:56 ] >>436 WaveIO obj = new WaveIO(filePath); Player obj2 = new Player(); obj2.Play(obj); とかってなるんでないの
440 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 02:23:03 ] マルチスレッドキューありますか。 自作しようして無理だった。
441 名前:デフォルトの名無しさん mailto:sage [2010/03/01(月) 05:44:38 ] >>432 make_sharedだな。TR1にもC++0xにもある。 >>440 Intel TBBになんかあったはず。
442 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 00:34:04 ] クラスのメンバ関数とそのconst関数の共通化をしようとして失敗しています。 以下のコードでは [ ]演算子のオーバーロードがその例です。 どうしたら理想([ ]によるメンバ変数arrayの中身変更)的な動作になるでしょうか? codepad.org/9YXChfJT
443 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 00:56:27 ] 高校1年の春、2年生に進級する直前のできごとでした。 僕は難関、最初の壁と名高いポインタにぶつかりました。 ポインタ・・・彼は僕を苦しめました 存在が意味不明でした。 『本当に必要なのか? いつ、使うの?君はなんなんだい?』 僕は寝ることをやめて飲まず食わず 1週間、ずっとポインタを見つめた結果 理解できませんでした・・ そのときの挫折はまさに、絶望でした。 自分の理解力の無さと頭の悪さに怒りを覚え その怒りはそのうちに悲しみにかわり 僕は1ヶ月、眠れませんでした。
444 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 01:11:16 ] >>442 × return const_cast<double&>( static_cast<const Test>(*this)[pos] ); ○ return const_cast<double&>( static_cast<const Test&>(*this)[pos] );
445 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 01:14:32 ] そんな僕がまたプログラマ目指そうと思ったのですが どう思います?
446 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 01:17:12 ] >>445 好きにすればいい。分からない事があったらここに書き込めば俺は答える。
447 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 02:35:19 ] >>444 ありがとうございます。 <間違い> return const_cast<double&>( static_cast<const Test>(*this)[pos] ); は、static_cast<const Test>(*this) で *this の中身をコピーした const Test型 のオブジェクトを生成し、 その生成されたオブジェクトに [pos] でアクセスしている。 だから、実際には *this の中身にアクセスできていない。 という解釈で良いでしょうか?
448 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 02:38:14 ] >>442 こういうのも return const_cast<double&>( static_cast<const Test*>(this)->operator[](pos) );
449 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 02:41:27 ] >>447 そういうこと。
450 名前:442 mailto:sage [2010/03/03(水) 04:18:56 ] >>448 >>449 ありがとうございます!
451 名前:デフォルトの名無しさん [2010/03/03(水) 07:50:18 ] ツリーのクラス構造について質問です。 現在、以下のようなクラスを考えています。 class Base{} class ParentBase : public Base { }; class Parent : public ParentBase { }; class ChildBase : public Base { }; class Child : public ChildBase { }; class ChildA : public Child {} class ChildB : public Child {} class ParentA : public Parent { public: ChildA childa; ChildB childb; }; class ParentB : public Parent { public: ParentA parenta; }; Parentの派生クラスは、メンバ変数でChildだったり、Parentのオブジェクトの実体を保持します。(例:ParentA, B) ここで、各Parentが保持するオブジェクトから、親オブジェクトへアクセスする方法はないでしょうか? やりたいことは、ParentA::childaで、ParentAの関数を呼ぶ、ParentB::parentaで、ParentBの関数を呼ぶ、ということがしたいのです。 一番基底クラスのBaseクラスで、Baseクラスへのポインタ持たせてやろうと思ったのですが、そのポインタへの実体のセット方法がわからなくて、迷ってしまいました。 何かいい方法はないでしょうか?
452 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 11:04:37 ] ポインタを理解したのは、確かポインタ渡し、参照渡し、値渡しの違いを知ったときだった憶えがある
453 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 11:15:38 ] >>451 コンストラクタで渡すなりセットするメンバ関数を作るなり public にして設定するなり、 いろいろあるだろ。何が気に入らないんだ?
454 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 11:27:28 ] struct hoge: public unary_function<int,int> { int operator(int); }; 的な関数オブジェクトを g++ -Weffc++ hoge.cpp でコンパイルした場合、 warning: base class struct std::unary_function<int, int> has a non-virtual destructor というエラーがどうしても出るのですが、 ライブラリの責任であってユーザ側からは対応しようがない、 というので正しいでしょうか?
455 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 11:41:08 ] protected継承
456 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 11:43:09 ] >>454 ja.lmgtfy.com/?q=%22warning%3A+base+class%22+std%3A%3Aunary_function+%22has+a+non-virtual+destructor%22
457 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 12:35:06 ] >>456 要するにGCCがそうだと言ってるからそうだ、ということですね。 これに対するライブラリ実装者の答えが欲しいのですが・・・。
458 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 12:38:09 ] >>457 どうしてそうなったw
459 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 12:42:54 ] >>457 >456 のリンクをたどると、 >454 の警告に関する gcc の「バグ」報告に連れて行かれて、 その報告は今でも "NEW" として残っているんだが、何か違うものが見えるのかい?
460 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 12:46:39 ] そう読むのか。 コメントのほうを読んで誤解してしまいました・・・。 ありがとうございます。
461 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 16:09:59 ] >>454 が何を問題だと言っているのか判らない。 もしかして、Effective C++ 読まずに問題視してる?
462 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 22:27:54 ] 調子に乗って struct を class みたいに使うのが悪いんじゃね?
463 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 22:37:41 ] どうせポリモルに扱わないんだからほっとけよ
464 名前:デフォルトの名無しさん [2010/03/03(水) 22:37:41 ] >>454 どこに「エラー」って書いてあるんだよ もしかしてエラーと警告を混同してるか?
465 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 23:00:41 ] C++のキャストって長ったらしくてあまり使わないんですが, 実際C++のキャストで助かった&Cのキャストではまった 経験をお持ちの方っていますか?
466 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 23:08:51 ] C++スタイルはデバッグで見つけやすい
467 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 23:18:38 ] >>465 キャストは奨励できないからC++のキャストは長い。 キャストにも色々な目的があるので種類がある。目的に合わない変換不可能なものにはエラーが出る。 あらゆる変換ができるCスタイルのキャストはバグを見つけにくいので使わないほうがいい。
468 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 23:20:00 ] long longな値をstd::fstreamに<<すると三桁区切りにcommaが入ってPCが爆発するんだけど 書式設定だとか弄ってcomma入れないような設定できなかったっけ?
469 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 23:50:17 ] >>465 意図しない、または、意図した以上のキャストをコンパイル時に発見できる
470 名前:デフォルトの名無しさん mailto:sage [2010/03/03(水) 23:59:55 ] >>468 localeとfacet thousands_sep()が返す値を確認するとよい
471 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:28:37 ] C++スタイルのキャストでコンパイルエラーがでる度に助かっているわけだ
472 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:44:21 ] >465 検索が簡単。
473 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 05:25:49 ] 分かってても、警告がうざい&タイプが面倒だから、使ってしまう(int)キャスト
474 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 06:50:49 ] >>473 しね
475 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 07:30:55 ] dynamic_castの機能はCスタイルのキャストでは実現できない
476 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 08:12:19 ] キャストの多さは設計の不十分さを示す良い指標
477 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 10:50:11 ] dynamic_castはゆとり const_castはバグ
478 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 12:20:32 ] stdの特殊化が許されてるのはswapだけですか?
479 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 13:28:12 ] ていうかstatic_castも暗黙的な変換ができないポインタ変換に対して使えちゃうだろ。 static_castは甘え
480 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 13:33:06 ] dynamic_castを使う設計てどっかミスってるはず ダウンキャストするんだったら自前の仮想関数テーブル作れよって話しだ
481 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 13:35:39 ] いやdynamic_castでいいだろw
482 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 13:37:38 ] >>481 アップキャストした後にダウンキャストとかポリモーですらないじゃん
483 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 13:40:39 ] クロスキャストなんてboostにそれ専用のがあるだろ?
484 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 13:43:24 ] >>483 うるせーテーブル作らせろ いやまじでダウンキャストとか使う場面なくね? 面倒だからやっちゃえとかならわかるんだが
485 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 13:54:06 ] 同意 内部でdynamic_cast使ってるboostとか糞だよな
486 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 14:14:02 ] RTTI嫌ってるやつって厨二病みたいなもんだろ?
487 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 14:32:25 ] RTTIは遅くなるっていうけど、実際影響がどんなもんか分からん
488 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 14:39:26 ] RTTIで起きる速度低下の影響は自前で仮想関数テーブルを用意する場合と同じ。
489 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 14:41:41 ] 見栄の問題なのか?w
490 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 15:06:56 ] >>489 見栄だよ 型名保持してポインタを型変換するだけだし でも使ってない
491 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 16:48:51 ] C++ってゲームプログラミングに使える?
492 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 16:56:09 ] >>491 DirectX使えば、いろいろ綺麗に作れるぞ。
493 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 18:18:44 ] >>492 取り合えず勉強してみます ありがとう!
494 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 20:14:40 ] キャストは結局のところ「正しくないかもしれないけど見逃してくれ」とコンパイラに指示している。 キャストが正しいことをプログラマーが保証しなければならない。 dynamic_cast(RTTI)もNULLが返る可能性も考えてプログラムを作らなければならない。 どんなにデバッグしても、キャストは客先でプログラムがクラッシュするかもしれない時限爆弾を抱えるようなものである。 暗黙の型変換や仮想関数であれば必ず正しい動作をすることがコンパイラが保証するので堅牢になる。 わずかな設計の見直しでリスクを減らせるんだからキャストは控えるのを勧める。
495 名前:デフォルトの名無しさん [2010/03/04(木) 20:22:37 ] プログラムが正しいかどうかをコンパイラに丸投げする考えのほうがよっぽど危険だよ 第三者たるコンパイラが勘違いしそうな「本当は正しい」ところをマークするのがキャストだ できちゃいけないキャストが通る理不尽な仕様は確かにあるが、それは できることとしていいことの分別がつく人しか C++ を使うべきではないということだ
496 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 20:31:50 ] キャストは影響を局所化してさらに見えないように包めばいいじゃない
497 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 20:35:09 ] >>487 1万回ループさせて0.1秒差とかそんなもん >>494 NULLが返る可能性を考えないのにdynamic_castを使うとか意味がわからん そんなの参照と例外に狂ってるやつくらいだろ
498 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 20:37:50 ] 暗黙の型変換でプログラムが堅牢になると聞いて
499 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 20:37:59 ] たった10000回で100msも差がでるのか。 100000000回で10msくらいでもまだ遅いのに
500 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 20:42:30 ] >>499 そんな見栄を張るなよw
501 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 20:43:44 ] >>478 swap以外もすべて明示的特殊化してよい。
502 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 20:45:32 ] 暗黙の型変換で堅牢 ハハッ
503 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 20:45:45 ] >>500 ごめん・・・最近なにしても楽しくないし2chで見栄張る位しか生き甲斐がなくて・・・。 もう自衛隊に入るわ。最近政治がアレだし俺みたいなクズ人間は戦争で死んでも誰も悲しまないだろう。