1 名前:デフォルトの名無しさん [2009/01/11(日) 11:21:38 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part65 pc11.2ch.net/test/read.cgi/tech/1230341243/
440 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:04:47 ] 仮想関数として指定するキーワードvirtualは、どれだけ付けるのが正しい? 例えば class Base { public: virtual void m_func(){std::cout << "Base m_func!" << std::endl;}; Base(){std::cout << "Base Constructor!" << std::endl;}; virtual ~Base(){std::cout << "Base Destructor!" << std::endl;}; }; class Derived : public Base { public: void m_func(){std::cout << "Derived m_func!" << std::endl;}; Derived(){std::cout << "Derived Constructor!" << std::endl;}; virtual ~Derived(){std::cout << "Derived Destructor!" << std::endl;}; }; class Derived_Derived : public Derived { public: void m_func(){std::cout << "Derived_Derived m_func!" << std::endl;}; Derived_Derived(){std::cout << "Derived_Derived Constructor!" << std::endl;}; virtual ~Derived_Derived(){std::cout << "Derived_Derived Destructor!" << std::endl;}; };
441 名前:440 mailto:sage [2009/04/05(日) 21:06:11 ] んで呼び出す時は void foo() { Base* p=new Derived; Base* q=new Derived_Derived; Derived* r=new Derived_Derived; p->m_func(); q->m_func(); r->m_func(); delete p; delete q; delete r; } このように、俺はBaseのm_func()にしかキーワードvirtualを付けていないんだが、これであってる? pc12.2ch.net/test/read.cgi/win/1237525619/127
442 名前:440 mailto:sage [2009/04/05(日) 21:09:30 ] ごめん 別スレで無礼者がいたから そいつへレスしようとしてたら 間違ってこっちにリンク張っちまった。>>441 マジごめん。
443 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:17:07 ] virtualつけたメンバ関数は、派生クラスではvirtualをつけてようがつけてまいが関係なく 仮想関数になる DerivedもDerived_Derivedもvirtualはつけてもつけなくても一緒
444 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:50:28 ] >>443 ありがとう。 ちなみにどちらでも同じということだが、その場合 virtualは付ける方が良いとか付けない方が良いとかそういう慣習があったりする?
445 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:54:58 ] >>440 のコードを Baseでvirtualを付けておき、DerivedとDerived_Derivedではvirtual付けない版と、 Baseでvirtualを付けておき、DerivedとDerived_Derivedでもvirtual付ける版と 両方を作ってビルドしてみた。 g++ -O2 〜〜.cpp としたのだが、挙動は一緒みたいだが、バイナリは違うものになった。 何故?
446 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:09:48 ] -Sで試して確かめるならまだしも…
447 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:24:44 ] >>446 -Sだったら同じバイナリになったわ。 なんで??
448 名前:447 mailto:sage [2009/04/05(日) 22:25:58 ] >同じバイナリ →アセンブラコード
449 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:14:09 ] >>444 C++ Coding Standards では派生クラスでもつけたほうがよいと書いてある。 (38項.安全なオーバーライドを身につけよう) 単に利用者に意図を明確にするためだけどね。
450 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:15:07 ] 速度限界まで最適化するときに virtualってどう扱うべきなのですかね?
451 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:26:22 ] @Override みたいなのが欲しいよね
452 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:41:43 ] そこで属性でしょきっと。
453 名前:デフォルトの名無しさん [2009/04/06(月) 00:43:53 ] #define override virtualってうちの会社の元Delphi使いな先輩がやってた。
454 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:53:48 ] >423 遅レスだけど、削除を別のfriend classに委譲する時なんかで使う。 こんなの class A { private: ^A() {}; class deleter { void operator()(A* target) { delete target; }; } friend deleter; public: boost::shared_ptr<A> creator() { return boost::shared_ptr<A>(new A, deleter()); }; }
455 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 17:32:53 ] class Singleton { Singleton() {} ~Singleton() {} public: static Singleton& Instance() { static Singleton instance; return instance; } }; みたいなやり方がどっかに載って無かったかな。
456 名前:423 mailto:sage [2009/04/06(月) 21:40:38 ] >>454-455 あるのね。 うーん、やっぱ奥が深い。
457 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 11:04:11 ] 関係ないけど singletonをtempleteにするとctorはpublicにせざるをえないのかな? よくそういう実装をみかけるけど、新しいインスタンスを作れるのがイヤなのですが
458 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 11:20:52 ] ctorをprivateにしてsingletonをfriendにすればええがな
459 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 11:22:59 ] そもそもシングルトンをテンプレートにしてまで量産しようという考え自体が間違いだな。
460 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 19:15:55 ] CamelCaseにするかcamelCaseにするかcamel_case(underscore_style)にするか、 その基準とか主張とかメリットとかデメリットを知りたいんだが、 みんなどうしてる? 確かBoostは俺の知る限りunderscore_styleだったと思うのだが。
461 名前:デフォルトの名無しさん [2009/04/07(火) 19:27:32 ] >>459 量産するなんて誰か言ったの?
462 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 20:02:19 ] >>461 テンプレートにしているから量産しようとしているとespしたんじゃない?
463 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 20:05:20 ] マヌケなespだな
464 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 20:12:33 ] どうでもいいがespがスタックポインタに見えてしょうがない
465 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 20:50:25 ] ttp://d.hatena.ne.jp/portown/20090318/1237389062 ここで、 >「デストラクタがヘッダ中に記述されてしまっている」ことにある。 >更に言うと、「deleteがヘッダ中に行われてしまっている」ことが問題であり、 >よりつっこんで言うなら「deleteがCHoge::implの定義と別の場所で行われている」ことが問題なのだ。 >つまり、pimplにスマートポインタを使おうとするなら、デストラクタを必ず明示しなければならないのである。 >それも、implの定義(この場合はhoge.cpp)と同じ場所に、だ。 ってあるんだけど、その意味が分からない。 何でダメなの? つーかコンパイルは一応通ったんだけど。
466 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 20:52:21 ] 間抜けな設計に合わせてespのレベルも落としたんだろ
467 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 21:05:05 ] >>465 まず、「不完全型(名前だけ分かってるけど完全な定義がまだ見えていない型)のポインタのdeleteは危険」 であることを知ってほしい。これはコンパイルは通るけどきちんと動かないことがある。 (その型に自分で定義したデストラクタやoperator deleteがある場合、ちゃんと呼ばれない。) class CHogeのデストラクタを記述しない場合、コンパイラが勝手に ~CHoge() を作る。 その中でスマートポインタである pimpl のデストラクタが呼ばれ、不完全型であるimplのポインタをdeleteしようとする。
468 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 21:13:26 ] 未定義動作だからまともなコンパイラなら警告くらい出すはずだけどな たまたまデストラクタもdeleteも定義してなかったからスルーしちゃったのかな
469 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 21:53:18 ] >>467-468 ありがとう。 「pimplがスマートポインタであるために特殊なdeleteが必要である。 だがコンパイル時にはpimplが不完全型であるためにその特殊なdeleteを呼び出すコードが作られない。」 ってことか。 となると、今回のケースでは CHoge::~CHoge(){} を自分で明示的に記述したとしても、それをhoge.hに書いている限りは解消されないんだよね。 hoge.cppのCHoge::implクラスの定義の後に自分で明示的に記述するならOKってことですかい?
470 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 22:00:43 ] >>469 前半は違う。スマートポインタであることは本質的な問題ではない。 pimplが単なるポインタであっても、 hoge.h でCHogeの定義の中に CHoge::~CHoge() { delete pimpl; } と書いたら、全く同じ問題が生じる。 後半はあってる。とにかく、明示的にであれ暗黙的にであれdeleteが出てくるところでは、 そのdeleteされるものの完全な定義が分かっていなければまずい場合があるということ。
471 名前:469 mailto:sage [2009/04/07(火) 22:25:09 ] >>470 なるほど。 根本的な問題は「デストラクタが云々」じゃなくて、 「不完全型のポインタのdelete」にあった訳か。 んで、その辺を全部気にせず丸投げしてもいけるのがshared_ptrなのか。 ありがとう。 ・・・しかし >>>468 >未定義動作だからまともなコンパイラなら警告くらい出すはずだけどな VC++2008で試して見たのだが >auto_ptrを用いた例ではVC++2008では警告しか吐かれない。 なぜか警告すら出てこなかったなぁ。
472 名前:471 mailto:sage [2009/04/07(火) 22:29:09 ] >>468 警告でた。 お騒がせしました。 warning C4150: 'CHoge::impl' 型を削除するため delete 演算子が呼び出されましたが、定義がありません。 : 'CHoge::impl' の宣言を確認してください。
473 名前:471 mailto:sage [2009/04/07(火) 22:33:37 ] 追記: g++でも警告出た。 note: neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined. bcc5.5.1では警告でなかった。
474 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 23:21:08 ] explicitをデフォルトコンストラクタに付ける意味はありますか? また、explicitを引数を2つ以上取るコンストラクタに付ける意味はありますか?
475 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 00:39:21 ] 1.デフォルト引数が付いてて、結果的に引数1個で呼べるなら意味がある 2.付けても害はないのでとりあえずコンストラクタには全部付けるポリシーにして付け忘れを防ぐ
476 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 01:14:57 ] explicitを付けさせる仕様でなく、 implicitを付けさせる仕様にすべき
477 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 03:43:39 ] >>476 いまさら仕様変更されても困るから、そうなってたらいいな、って話にしかならん。
478 名前:474 mailto:sage [2009/04/08(水) 07:09:56 ] >>475 なるほど。ありがとう。
479 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:07:19 ] copy-and-swapイディオムってすげーのな。 これって自作クラスのoperator=のオーバーロードの定義以外に使い道ある?
480 名前:デフォルトの名無しさん [2009/04/08(水) 19:11:38 ] 何がすごいの?
481 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:24:53 ] >>480 例外安全なところ。
482 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 19:39:37 ] >>479 コピーしないでスワップするだけなら、 参照型の引数で値を戻す場合にも。 void foo(hoge_t& result) { hoge_t x; //xにあれこれ手を加える swap(x, result); } まあ、何も考えなくていいときには、resultを直接いじることもあるけど。
483 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 20:12:23 ] 全部正常に終わるまで変更を反映させたくない処理全般に使えるよね。
484 名前:479 mailto:sage [2009/04/08(水) 20:21:49 ] >>482-483 ほほー ありがとう。
485 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:10:57 ] オーバーロードしたoperator=を コピーコンストラクタの定義で使っても大丈夫?
486 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:34:30 ] よゆー operatorほにゃららは普通の関数と全く同じように呼び出して可。
487 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:38:45 ] >>482 ドラゴン・スゴイコビッチ!(とてもすごいの意) 用件としては、自作クラスに swap 関数を装備することと、 その swap が例外を投げないようにすること?
488 名前:485 mailto:sage [2009/04/08(水) 21:49:40 ] >>486 ありがとう。 コピーコンストラクタ(に限らずコンストラクタ一般)から メンバ関数を呼び出す時、 construct中なのにメンバ関数を呼び出しても 大丈夫なのだろうかと思ったのだ。。。
489 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:51:32 ] >>488 virtualなら気をつけないといかんかもしれんが そうじゃないなら大概大丈夫
490 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:54:37 ] 大丈夫
491 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 21:56:15 ] >>489 >virtualなら気をつけないといかんかもしれんが ああ、 基底クラスのconstruct中にvirtualなメンバ関数呼ぶと その基底クラスでの対応するメンバ関数が呼ばれるってやつね。 ありがとう。 >>490 ありがとう。
492 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:03:58 ] C++0xは本当に後 数ヶ月で策定されるんだろうか。 されたとして、ちゃんと動作するコンパイラが出て来るのはいつだろうか。 ・・・うむ、心配だ。
493 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:35:04 ] 別に心配することじゃない。 まともなコンパイラが出てから考えればいいこと。 早く出てくれないと困る事情でもあるのか?
494 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 22:50:26 ] すまぽとかは早く表順になってほしいなぁ。 もうすまぽを書くために何リットルのインクを消費したことやら。 (インク?)
495 名前:492 mailto:sage [2009/04/08(水) 22:52:55 ] >>493 >早く出てくれないと困る事情 いや、全然ないw g++が速いかVCが速いか。
496 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:00:35 ] >>493 IntelC++は既にlambda関数がサポートされてるんだけど、IntelC++はコンパイル遅いんでdebugはVCでreleaseはIntelでやってるとlambda関数は使えなくて残念。 boost::lambda使えば済む話ではあるんだけど。
497 名前:492 mailto:sage [2009/04/08(水) 23:12:20 ] 現在のTR1のライブラリ達は、正直なところ十分動作することが 確認されるまでは使わない方がいいんではないかと思うんだが。 それまではboostのが安心かなぁ。 でも標準に入ってる方が使うのは(気分的に)もっと楽になる事は確か。
498 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:56:20 ] class A{ public: virtual ~A() = 0; }; class B :public A {}; class C :public B { public: ~C(){}; }; gccでundefined reference to B::~B()って怒られるんだけど、Bでd-tor書かないとダメ?
499 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 00:13:43 ] ごめん。純粋仮想d-torに定義書くの忘れてた
500 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 00:17:10 ] 俺としては以下のやり方でMyClassクラスによるstd::swap関数テンプレートの特殊化を行い、 using std::swap; swap(x,y); で特殊化したstd::swap<MyClass>が呼び出せるかと思ったのだが、 以下のやり方だとなにか定義がかぶっているようなことを言われてエラーになってしまう。 再現するソースは次のようなもの。 //以下はMyClass.h class MyClass { char *p; public: void swap(MyClass &hoge); MyClass(); ~MyClass(); }; //以下はMyClass.cpp #include <algorithm> #include "MyClass.h" MyClass::MyClass():p("pointer"){} MyClass::~MyClass(){} void MyClass::swap(MyClass &hoge) {std::swap(this->p, hoge.p);} namespace std { template<> void swap(MyClass &lhs,MyClass &rhs) {lhs.swap(rhs);} }
501 名前:500 mailto:sage [2009/04/09(木) 00:18:28 ] //以下はmain.cpp #include <algorithm> #include "MyClass.h" int main() { MyClass x,y; using std::swap; swap(x,y); return 0; } としたら、g++にて MyClass.cpp:(.text+0x42): multiple definition of `void std::swap<MyClass>(MyClass&, MyClass&)' main.cpp:(.text$_ZSt4swapI7MyClassEvRT_S2_[void std::swap<MyClass>(MyClass&, MyClass&)]+0x0): first defined here collect2: ld returned 1 exit status というエラーが出る。 どうしたらいい??
502 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 00:31:28 ] 理由は覚えてないけどstd名前空間の中でswapの特殊化しちゃだめだった気がする。 ちょっと俺も確認してくるか。
503 名前:502 mailto:sage [2009/04/09(木) 00:33:03 ] 別に駄目じゃないか。ごめんスルーしてくれ。
504 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 00:37:36 ] >>485 大丈夫だけど、普通operator =ってcopy (construct) and swapで書かない? ja.wikibooks.org/wiki/More_C%2B%2B_Idioms/%E3%82%B3%E3%83%94%E3%83%BC%E3%81%97%E3%81%A6_swap (Copy-and-swap)
505 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 00:58:49 ] >>500 std::swapの特殊化はヘッダに書かないと駄目だろう。 main.cppでは特殊化したstd::swapが見えないから標準のstd::swapが実体化され MyClass.cppで特殊化した物と衝突してるんだろう。
506 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 06:57:11 ] >>504 そうか。 コピーコンストラクタの定義に代入演算子を使うと定義が循環しちゃうのか。
507 名前:500 mailto:sage [2009/04/09(木) 06:58:19 ] >>505 なるほど。 std::swapの特殊化をヘッダに書く場合はinline指定しないと、 そのヘッダをインクルードするたびにまたmultiple definitionってなっちゃうかな?
508 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 08:13:54 ] >>507 いや、そういう話じゃない。
509 名前:500 mailto:sage [2009/04/09(木) 08:22:57 ] >>508 (1)main.cppでは特殊化した定義がその前になされていないから通常通り実体化。 (2)MyClass.cppでも特殊化した。 この(1)と(2)でmultiple definitionってことか。 つーことで MyClass.hにstd::swapの特殊化を書く(1) main.cppでMyClass.hをインクルード ってこと?
510 名前:508 mailto:sage [2009/04/09(木) 08:24:06 ] >>507 あ、ヘッダに書かないといけないのは理解してるのか。ごめん テンプレートの定義は inline じゃなくてもいいよ。 >500 の場合は inline が 適切だと思うけど。
511 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 08:25:44 ] これが inline じゃないといけないんなら全部の関数テンプレートが inline にならないといけなくなるな。
512 名前:インドリ [2009/04/09(木) 10:05:14 ] blogs.wankuma.com/episteme/archive/2009/04/08/171040.aspx d.hatena.ne.jp/faith_and_brave/20090408
513 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 10:18:24 ] >>512 広告ウゼェ info.2ch.net/kiyaku.html > ・投稿者は、話題と無関係な広告の投稿に関して、相応の費用を支払うことを承諾します
514 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 10:19:49 ] しかもマルチかよ。何のつもりだ?
515 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 10:20:30 ] インドリしゃんに粘着する物好きもいるんですね
516 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 12:23:10 ] >>515 粘着の意味わかってんの?
517 名前:デフォルトの名無しさん [2009/04/09(木) 14:28:38 ] C++でGUIのプログラムを作ろうと思うんだが、お勧め開発環境はなにかないか?
518 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 14:48:04 ] また環境も書かんと適当に訊くなあ。
519 名前:デフォルトの名無しさん [2009/04/09(木) 14:51:01 ] >>518 OS;XP
520 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 15:00:29 ] C++Builder(8万円くらいする) Turbo C++(C++ Builderの無料版 機能が削られていて少し古い) Qt Creater(マルチプラットフォームのソフトが作れる コンパイルが遅い)
521 名前:デフォルトの名無しさん [2009/04/09(木) 15:08:24 ] >>520 turbo c++でGUIって開発できるの??
522 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 15:52:24 ] できるよ
523 名前:500 mailto:sage [2009/04/09(木) 22:50:09 ] >>510-511 そういえば関数テンプレートの定義は ヘッダに書くけど、それは普通の関数の類推で inlineじゃなきゃいけないなんて考えちゃだめなんだったな。 Effective C++に書いてあったような気がしてきた。。。 ありがとうお二方。
524 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 22:53:28 ] 「exit(0)で終了するとデストラクタが呼び出されたり呼び出されなかったりする」 っていうC++の仕様について学べるサイトを教えてください。 巻頭言 2000〜 park1.wakwak.com/~y-nagano/200001.html 一応ググったらこんなのがヒットしましたが、これ以外にも何かオススメをご存じであればお願いします。
525 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 23:10:23 ] std::powとかhypotとかをスレッドセーフに実行したいんだけど、おみゃーらどうしてる? 軽いに越したことはないずら
526 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 23:12:13 ] 常識的に考えればスレッドセーフでないわけがない。 って書こうとしたが、errnoとか気にしている?
527 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 00:16:23 ] あれ?そうだったの?errnoは気にしてない。 うーん、じゃあ他のところで変な風になってたのかにゃ・・・? ありがとうござんした
528 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 02:35:26 ] >>524 >>333-
529 名前:デフォルトの名無しさん [2009/04/10(金) 08:30:05 ] errnoを気にするとどうなの?
530 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 11:55:32 ] >>529 errnoはグローバル変数なので、 errno = 0; std::pow(x, y); if (errno != 0) { /* 失敗 */ } みたいなコードを書いたときに、powとifの間で他のスレッドによってerrnoが変更されてしまう可能性がある だから、errnoを気にするとpowとかはスレッドセーフじゃなくなる たいていのコンパイラにはerrnoをTLSに置いてスレッドセーフにするオプションとかがあるけどね
531 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 15:48:35 ] タクティカルレーザーシステム?
532 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 17:30:34 ] >>531 いやTrue Love Storyです。 じゃなくてThread Local Storageです。
533 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 18:05:46 ] 元気でね 頑張ってね 手紙書くね たまに会えるよね なんでかな 寂しいのに 寂しいよと 言えなかった
534 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 19:06:46 ] wwwwwwwwwwww
535 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 21:10:40 ] イイハナシダナー
536 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 22:17:52 ] >>530 よく分からんがerrornoへの代入って規格的に許されてたっけ?
537 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 22:27:30 ] 18歳以上ならeroero挿入おkだよ
538 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 22:32:32 ] はいはいエロスエロス
539 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 23:13:49 ] 18歳以上なのに、いつになってもeroeroの値がインクリメントされず初期値のままです。
540 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 00:09:13 ] >>539 君の中ではその変数は1つだけ存在すれば十分だよね。 俺達他人に迷惑書けて欲しくないから、君の実装から外には出さないで欲しいなぁ。 ってことでeroeroは自動的に0に初期化されてます。