- 1 名前:デフォルトの名無しさん [2007/06/25(月) 12:01:46 ]
- エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.38【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1180877635/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 253 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 20:32:10 ]
- //void* のポインタキャスト行ったりきたり実験
std::vector<std::string> vec2; vec2.push_back("hoge" ); void *vo=(void *)&vec2; //void*型、準備OK //ここから、スレッドの関数で受け取ってから、std::vector<std::string>に戻す。 std::vector<std::string> *vec=(std::vector<std::string> *)vo;//キャストしました。 std::vector<std::string> vec3=*vec; cout << vec3[0].c_str()<< endl; cout << (*vec)[0].c_str()<< endl;//おまけ。std::vector<std::string>にしなくても、これでもいい。 これは、正常に動きました。キャストの仕方とか大丈夫みたいなので、 参照しようと思ったデータが無いみたいです。 >>251 >多分スタック上に確保したvectorのアドレスそのまま >渡してるだろ。それじゃクラッシュするのは当たり前だ。 スタック?検索すると、 ”処理中のデータや戻りアドレスなどを一時的に退避する場合に使うことが多い” ってありました。 vectorは使用しなくなると自動的に、 開放しちゃうっていう、あれのことでよかったでしょうか?
- 254 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 20:38:10 ]
- なぜ新訂版More Effcitive C++の訳本は糞なのでしょうか?
- 255 名前:247 mailto:sage [2007/06/30(土) 20:39:16 ]
- vector、map、pairなど、いろいろあると思いますが、
こういうの使いたいときは、どうすればよいでしょうか? 自動で開放してくれなくても、いいので 構造体使うのが、わかりやすいですか。
- 256 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 20:42:28 ]
- >>253
> vectorは使用しなくなると自動的に、 > 開放しちゃうっていう、あれのことでよかったでしょうか? ほんとに意味を分かって言ってる? Javaなどのガベージコレクションと勘違いしないか? ここで問題にしてるのは、C/C++で関数(またはブロック)内で宣言した変数は その関数(またはブロック)を抜けると破棄されるということ。 いつの間にか勝手に消えるわけじゃない。
- 257 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 20:51:30 ]
- 使用しなくなったら開放、って理解でいいと思うよ。
考えるな感じるんだ。
- 258 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 20:57:05 ]
- >>255
vector, map, pairなどはそれぞれ特徴が異なる。 データ同士の意味的なつながりとか、検索/更新の方法や性能など。 複雑なデータの管理をするときに、その使用方法にあったデータ構造を選択すればいい。 単にいくつかの型が異なるデータをひとまとめにして扱いたいだけなら 構造体でいい。
- 259 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 20:57:17 ]
- あぁ〜ん!感じちゃう♪
- 260 名前:247 mailto:sage [2007/06/30(土) 21:12:13 ]
- >>256
詳しい解説ありがとうございます。 >>257 どもです。^^ >>259
- 261 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 03:24:35 ]
- 何を突っ込もうとしてたんだ、>290にw
- 262 名前:247 mailto:sage [2007/07/01(日) 06:54:52 ]
- >>258
255って、自分でした。 構造体でよかったですか。ありがとうございます。
- 263 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:16:49 ]
- template<class T> inline void ZeroMem(T& dest) {
memset(&dest, 0x00, sizeof(T)); }; っていうのを作ったんですがこれって危険でしょうか?
- 264 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:18:02 ]
- めっちゃ危険
- 265 名前:263 mailto:sage [2007/07/01(日) 10:19:58 ]
- 用途はwinapiで使う構造体の初期化です
一応実際のものは、POD以外渡すとコンパイルエラーになるようにboost::type_traitsとか作って 細工してあります
- 266 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:30:09 ]
- >>265
クラスの中に、newなどで確保済みポインタがあったらどうするんだい?
- 267 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:36:33 ]
- それはそういうのを渡さないように気をつけるとしか。。。
でもそんな事いったらmemsetも使えませんし MSG msg; msg.hwnd = 0; msg.wParam = 0; とか打っていくのが面倒なんで考えたので 初期化済みかどうかを判別する方法があればいいのですが
- 268 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:39:35 ]
- >>267
MSG msg = {0}; // 全部 0 で初期化 msg = MSG(); // 全部 0 を代入
- 269 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:42:44 ]
- そういう手があったんですね、トンクスです
- 270 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:44:03 ]
- 何がトンクスど、トランクスか
- 271 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:44:04 ]
- こんなことも知らない奴がboost::type_traitsとか使ってんの蚊
釣りかと思った
- 272 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:56:34 ]
- 一年ほど前に使った記憶はありますが
boostやpstadeと格闘している間、 構造体の初期化なんて殆ど使わなかったので忘れていました ま、実質知らないのと同じですね^^^;
- 273 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:58:34 ]
- ^^^何だこれは3つ目小僧か
- 274 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 12:48:20 ]
- どうしてC++にはコンストラクタとデストラクタがあって
デコンストラクタはないのなぜ?
- 275 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 12:53:36 ]
- >>274
デコンストラクタって何ですか?デストラクタと同じものではないですか?
- 276 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 12:53:41 ]
- Con structor
De structor
- 277 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 12:53:49 ]
- con-struct-erとde-struct-erだから
説明になっていないけど
- 278 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 12:53:51 ]
- デコンストラクタ = デストラクタ って考えちゃダメなの?
名前が違うだけやん
- 279 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 12:55:19 ]
- 15秒で4レスついてるw
- 280 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 13:00:42 ]
- すみません
int a[] = new int[10]; int *b = new int[10]; みたいに確保したときって delete a; delete a[]; delete b; delete b[]; それぞれ解放の仕方で動作おかしくなりますか?
- 281 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 13:06:03 ]
- delete a; アウト
delete a[]; アウト delete b; アウト delete b[]; アウト
- 282 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 13:08:16 ]
- これもアウトだ。
int a[] = new int[10];
- 283 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 13:08:56 ]
- >>275
デコンストラクタは脱構築です ただの破壊ではありません ポストモダンなのです たぶん
- 284 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 13:09:01 ]
- >>274
「デコンストラクタ」はただの誤用だろ。 と思ったらこんなところにも。 msdn2.microsoft.com/ja-jp/library/sxbac7x8(vs.80).aspx 原文はちゃんと destructor なのにね。 msdn2.microsoft.com/en-us/library/sxbac7x8(vs.80).aspx いちおう deconstruct という言葉も存在するらしい。 ja.wikipedia.org/wiki/%E8%84%B1%E6%A7%8B%E7%AF%89
- 285 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 13:09:57 ]
- >>280 自分で試してから聞けよカス
- 286 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 13:38:11 ]
- >>285
それは禁句だよ。 new[]してdeleteのような正しくないのに環境によっては動くものを 正しい方法だと思ってしまう可能性がある。
- 287 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 13:40:29 ]
- 配列のnew deleteは
T* v = new T[n]; delete [] v; でおkなはず
- 288 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 13:46:31 ]
- いやここでstd::vectorとか言い出してやる。
- 289 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 13:48:11 ]
- valarrayの事も時々でいいから思い出してあげてください
- 290 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 13:49:43 ]
- >>286
今回はそれ以前の話。コンパイルできないのがダメ。
- 291 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 13:50:45 ]
- shared_arrayでいいんジャマイカ
- 292 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:00:49 ]
- いつものパターン:
書く → ビルド → エラーの数が100を超え(ry → (´・ω・`) → 少しずつ直していく → コンパイラ通過 → \(^o^)/ →実行時エラー → /(^o^)\ナンテコッタイ
- 293 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:03:35 ]
- delete b;
は正常に動作する。 今回に限ってはメモリリークを起こさない。 ただ、b[1]〜b[9]のデストラクタが呼び出されないので、 プリミティブ型以外では動作保証ができない。 いかなる場合においても、new[]で確保したら、かならずdelete[]で解放すること。 だったっけ?
- 294 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:10:41 ]
- >>291
たまにはscoped_arrayのことも思い出してあげてください……。
- 295 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:15:44 ]
- >>293
いや違う。 未定義動作でFA。
- 296 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:29:41 ]
- >>293
デストラクタがあったらメモリの開放に失敗して落ちる環境がほとんど。
- 297 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:33:54 ]
- delete bで開放するのいいけど
その後メモリ取ろうdeleteした近辺にnewなんかされると 悲惨なことになるぞw
- 298 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:35:24 ]
- >delete bで開放するのいいけど
良くない
- 299 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:39:20 ]
- 言語的にだめなのは分かるんだけど
PODの場合で new[]で確保したのをdeleteでシメた場合に 実際に不具合があるような実装って おおいの?
- 300 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:39:43 ]
- 結論としては色々とややこしいから最初は配列なんか使わずにコンテナつかっとけってこと?
- 301 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:41:50 ]
- >>300
でも const char *bad_words[] = { "fxxk", "pxxsy", "axxl", "cxxt", ... }; みたいなのは配列が便利じゃね?
- 302 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:42:36 ]
- >>299
すくないとか言ったら使いそうだから言わない。
- 303 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:43:38 ]
- >>302
いや、実は見たこと無いから聞いてみたんだけど(ボソッ)
- 304 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:45:28 ]
- 見たことないけど、
将来デバッグモードで変なことするコンパイラが 出てくる可能性もなくはないと思う。
- 305 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:46:14 ]
- >>299 それは実装に不具合があるわけじゃねーぞ。
- 306 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:47:44 ]
- >>305
落ちるとかバグるとかそういう環境は多かったりするのか? という話なわけで。
- 307 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:48:13 ]
- >>305
いや勿論そういう意味じゃなくて、 メモリが解放されなかったり ヒープが壊れたり 無限ループに陥ったり ハードディスクが初期化されたり といった問題が生じるかどうか、という意味
- 308 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:51:56 ]
- >>301
new[]で確保するのでなければ別に構わないと思う。
- 309 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:56:57 ]
- >>307
そんな問題が生じたこともないし生じるようにも思わないが生じる可能性はある。
- 310 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:10:03 ]
- int a[] = new int[10];
何が問題なの?
- 311 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:12:32 ]
- そもそもコンパイラ通らないだろ
- 312 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:12:34 ]
- >>310
コンパイルエラー
- 313 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:13:58 ]
- まずコンパイルしてからなんか家w
- 314 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:15:37 ]
- int a[] =(int[]) new int[10];
- 315 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:21:46 ]
- C、C++の基本的なことは勉強してきました。
それで簡単なGUIアプリから作ってみたいのですがVisual C++とDelphiで迷っています。 DelphiだとPascalを勉強しなければいけないそうですが大変でしょうか? C、C++が無駄になりそうで怖いですが。 C++を勉強してきた場合、Visual C++のほうがいいでしょうか?
- 316 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:21:52 ]
- コンパイルエラー
- 317 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:23:32 ]
- >>315
C/C++ 勉強したなら VC++ 使えば?
- 318 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:26:37 ]
- そしてうっかりCLRアプリケーションのプロジェクトを選択して
C++/CLIを勉強する羽目に。
- 319 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:27:10 ]
- >>315
どれくらいのレベルか知らないが、勉強のためVC++をススメておく DelphiでもCやC++で勉強してきた基礎は無駄にならないと思うけどね
- 320 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:27:41 ]
- Delphi には将来性が・・・
- 321 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:29:13 ]
- int *a[] = new int[10];
- 322 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:29:48 ]
- int *a[|] = new int[00];
- 323 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:32:27 ]
- int **a = new int*[10]
for( int i = 0; i < 10; ++i ) a[i] = new int; for( int i = 0; i < 10; ++i ) delete a[i]; delete [] a;
- 324 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:33:57 ]
- int (*a)[10] = new int[10][10];
delete[] a;
- 325 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:35:19 ]
- delete[] you;
- 326 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:40:56 ]
- Segmentation fault (core dumped)
- 327 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:52:25 ]
- std::vector<int> a(10);
- 328 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:53:19 ]
- std::vector<inpo> you(10);
- 329 名前:デフォルトの名無しさん [2007/07/01(日) 17:10:26 ]
- struct A { int x; };みたいなのをA a;と宣言してこれを
std::cout << a;のようにした時にメンバであるxの値を出力するように変換関数を定義したいんですが どうすれば良いんでしょう? operator std::string();とやってみましたが変換できないようです
- 330 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 17:16:12 ]
- >>329 operator << (std::ostream&, A const&)
- 331 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 17:16:22 ]
- std::ostream& operator<<(std::ostream& os, A& a) {
os << a.x; return a; } A内で上の関数をfriend宣言しておく
- 332 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 17:17:31 ]
- >>331 friend は要らんだろ
- 333 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 17:20:35 ]
- >>329
cout << static_cast<std::string>(a); とやるか、 std::ostream& operator<<(std::ostream& os, const A& a) { return os << a.x; } でも定義汁
- 334 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 17:28:57 ]
- 皆様の回答を参考にぐぐったら出てきました
ttp://www.higlab.k.dendai.ac.jp/~numata/index.php?C%2B%2B%A5%E1%A5%E2#w5403b76 なるほどオーバーロードとfriendの複合技ですか、さらにostreamを戻す事で連結も可能と… かなり使えそうな方法ですね、助言ありがとうございました!
- 335 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 17:40:54 ]
- >>334
ここまで必要になるか分からないけど、 class A { public: virtual void print(std::ostream &os); }; std::ostream& operator<<(std::ostream& os, const A& a) { a.print(os); return os; } とやった方が、もしかしたらいいかもしれない。 こうすると継承クラスでprintを再定義できる。
- 336 名前:334 mailto:sage [2007/07/01(日) 18:02:45 ]
- >>335
なるほど継承ですか、実行時の多態性については意識し取りませんでした 確かにこの振る舞いをもたせたいのがAだけに限るわけではないですしね とりあえず参考にしてNVI使ってこうやってみました // 構造体A周辺の定義 struct Base { public: void print(std::ostream& os) const { _print(os); } private: virtual void _print(std::ostream& os) const =0; }; struct A : public Base { private: void _print (std::ostream& os) const { os << x; } public: int x; }; std::ostream& operator<<(std::ostream& os, const Base & base) { base.print(os); return os; } // 使用例 #include <iostream> int main() { A a; a.x = 1; std::cout << a; } …しかし鶏を捌くのに牛刀をなんとやらですね 実際に使うとなればここまでする必要も出てきそうな気もせんでも無いですが
- 337 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 18:27:37 ]
- この場合のNVIって何の意味があるの・・・?
- 338 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 18:29:47 ]
- 最近おぼえて使いたくなったんだろ。気にするな。
- 339 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 18:35:35 ]
- NVI
ってなんですか?
- 340 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 18:40:11 ]
- >>339 ググレカス
- 341 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 18:49:35 ]
- NVI=non virtual interface のこと。つまり↓
struct Hoge { void hage(T1 arg1, T2 arg2) {_hage(arg1, arg2); } protected: virtual void _hage(T1 arg1, T2 arg2) = 0; }; 下位クラスには_hageを継承してもらう。 なぜこんなことをするのか) 公開仮想インターインターフェイスが果たす目的は以下の二つ(と言われてる^^) 1. 使う人に使い方(インターフェイス)を提供する 2. 派生クラスに「こういうふうにメソッドを継承して下さい」とカスタマイズの規約を提供している たとえば、NVIを使わず下位クラスがhageをそのまま継承してしまうと Hoge#_hageのインターフェイスを変更したときに下位クラスすべてのメソッドを書き直す必要があるんだけど、 もしNVIを採用していればそういうことにはならない。 逆にインターフェイスを変更せず、実装メソッドの方だけを変更することもできる。 >>336の場合、インターフェイスが変更される可能性は全く無くて、無駄に複雑にしてるだけだと思う。
- 342 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 18:52:31 ]
- そもそも値型のクラスの継承はあまり宜しくない
- 343 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 18:54:58 ]
- 値型のクラス???
- 344 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:11:16 ]
- Value classの事
・publicなデストラクタとコピーコンストラクタと代入演算子を持ち ・デストラクタを含め仮想関数を持たなくて ・具象クラスであり抽象クラスでない ・スタック上や他のクラスのメンバとしてインスタンス化される とまぁおおよそ組み込み型のように振舞えるものでこういうのは継承じゃなくて委譲を使うべきらしいけど、 実際のところはそれが妥当なのか場合によるからよくわかんねけど 俺は複雑な構造体を継承してえらい目にあったので「あまり宜しくない」と思うようになった ちなみに出展はmore effective C++あたりだったと思う
- 345 名前:341 mailto:sage [2007/07/01(日) 19:23:42 ]
- >>344
Value classなんて初めて知った。 全部が全部ってわけじゃないけど、ほとんどは>>344のいうとおりだろうね。 ただ、サンプルプログラムでそういうことを考えちゃうと バーチャルなデストラクタや、privateなoperator =を書く必要が出てきて 全体的に焦点がぼやけてしまいまふ。 >>341ではとりあえずそういうことは無視させてもらいますた^^
- 346 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:29:32 ]
- >>344
そんな区別意味無いだろ。 public なデストラクタが virtual じゃないクラスを継承したのが間違いだったんじゃないの? value class って用語も検索結果が日本語ページ多すぎで胡散臭いし。
- 347 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 21:00:20 ]
- 値のセマンティクスを持つクラスと言いたいのでは?
ググったらこんなページを見付けたが、こういう話だろう。 www.ogis-ri.co.jp/otc/hiroba/technical/CppDesignNote/
- 348 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 21:09:43 ]
- つうかそういうクラスはそもそも継承を前提に作ってないだろ
他言語ならsealedクラスになってるタイプのクラス
- 349 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 21:29:11 ]
- で>>342に戻ると
良いサンプルってやっぱ難しいんだね
- 350 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 21:33:35 ]
- 複雑なものを扱うためのテクニックを簡単なサンプルで見せても
無意味にしか見えんからのう
- 351 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:17:49 ]
- とりあえず、NVIならこの程度のサンプルでも十分通用するね
- 352 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:18:38 ]
- NVIってExceptional C++で勉強しましたか?
- 353 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:22:03 ]
- Exceptional C++―47のクイズ形式によるプログラム問題と解法
Exceptional C++ Style―40のクイズ形式によるプログラム問題と解法=スタイル編 Exceptional C++ Style―40のクイズ形式によるプログラム問題と解法=スタイル編 これって何が違うんでしたっけ?
|

|