トップページ⇒tech
1001コメント310KB

【初心者歓迎】C/C++室 Ver.48【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/02/05(火) 01:18:41
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.47【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1200464091/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0516デフォルトの名無しさん2008/02/12(火) 18:32:17
>>511
namespaceの終わりにセミコロンは不要。
仮想関数には定義が必要。定義が無いと仮想関数テーブル
(そのメッセージでいうvtable)のエントリーを作れない。
仮想でなければ呼ばれなければ必ずしも定義は必要ない。
0517デフォルトの名無しさん2008/02/12(火) 18:40:03
>>514
セミコロンは付け忘れました、
まだ継承は知らないのでなんとも。。
>>515
値渡しでうまく動いてたので特に意味なく使ってました、
ためしにfunc(string *str) に変えてみたら見事に動きました。。。
なぜこういう結果になるのかよくわかりません。。。
すばやい解答ありがとうございました。
0518デフォルトの名無しさん2008/02/12(火) 18:42:07
>>517
どうでもいいが、>514は>512宛てだ。
ついでに言えば、ポインタ渡しじゃなくて参照渡しにするだろ。常考
0519デフォルトの名無しさん2008/02/12(火) 18:49:20
>>518
勘違いしました、、
なぜデバッグだと動いていたのか、と
値渡しだとだめなのかを知りたいのですが。。
0520デフォルトの名無しさん2008/02/12(火) 18:54:58
>>519
>515
0521デフォルトの名無しさん2008/02/12(火) 19:06:43
>>520
というか良く見たらDebugモードになってまして、
Releaseだとやっぱりオーバーランしてましたorz
だめだめだ。。。
class A{
string m_str;
public:
func(string str){
m_str=str; ←
};
};

class X{
public:
func(string str){
A hoge;
hoge.func(str)
};
};

DWORD WINAPI doloop(LPVOID lpParam){
x.func("test"); ←xはグローバル変数になってます
};

最初はこんな感じです。。
0522デフォルトの名無しさん2008/02/12(火) 19:11:48
>>513
mainもないのが、問題なく動くのか……最近のC++は凄いな
05235132008/02/12(火) 19:13:15
>>520
Releaseでビルドプロパティの最適化を無効にしたらReleaseでも大丈夫でした。
0524デフォルトの名無しさん2008/02/12(火) 19:14:50
>>521
問題が再現する最小のテストコードを作って
検証してから質問してくれ
05255132008/02/12(火) 19:15:45
>>522
mainからdoloopをスレッドで動かしてます。。
簡略化しすぎました。。
DWORD WINAPI doloop(LPVOID lpParam){
while(!bMainLoopExit)
{
EnterCriticalSection(&cs);
x.func("test");
LeaveCriticalSection(&cs);
}
ExitThread(NULL);
}
0526デフォルトの名無しさん2008/02/12(火) 19:16:01
class A{
std::string m_name;
public:
void func(std::string str){
m_name = str;
}
}

int main(int, char**)
{
A test;
std::string str = "abc";
test.func(str);
}


//
これでも落ちるか?
0527デフォルトの名無しさん2008/02/12(火) 19:16:44
>>525
まて、複数のスレッドからグローバル変数にアクセスしてるのか?
0528デフォルトの名無しさん2008/02/12(火) 19:18:51
このあと、衝撃の新事実が!
0529デフォルトの名無しさん2008/02/12(火) 19:21:42
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));


D3DPRESENT_PARAMETERS d3dpp = {0};

結果に違いはありますか?
0530デフォルトの名無しさん2008/02/12(火) 19:23:24
STL使っておいてExitThreadってのも相当ヤバイ匂いがするけどな
0531デフォルトの名無しさん2008/02/12(火) 19:27:49
そもそも〜Thread系の関数って使いどころあるのかね?
0532デフォルトの名無しさん2008/02/12(火) 19:27:50
うむ、少なくともA::funcが問題って訳じゃなさそうだよね。
ってか、なんで値渡し……?
0533デフォルトの名無しさん2008/02/12(火) 19:36:24
構造体のメンバに、名前と番号両方からアクセスしたいとおもっています。
typedef struct particle{
double data[3][3];
typedef data[][0] position[];
typedef data[][1] verosity[];
typedef data[][2] angle[];
/* ようするに、data[][]に、position[]……という名前でもアクセスしたい */
/* data[][]のままで、loopを回して全部に値を流し込む、ということもしたいので、二重配列も残したい*/
}PARTICLE;

当然のようにエラーなのですが、こういうばあいどのように記述すればいいのでしょうか。
05345132008/02/12(火) 19:38:00
>>526
mainの中身を >>521のX::funcにあたる場所に入れて実行してみましたがだめみたいです。
>>527
そうです。。
>>530
書かなくてもいいけど明示的に書いても良いって書いてあったので書いてあります。

クリティカルセクションで排他処理した気分になって
親が実体持ってるクラスを使ってます。。
0535デフォルトの名無しさん2008/02/12(火) 19:44:25
http://2chcity.myminicity.com/env

環境優先的に修復を。たぶんこの項目が一番減る。
NEJITUのように少し公園を先行させてもいいかもしれん。

ランク   国名     .... 街名           人口   (増減)   前日
--- 1   US1       .LUELand          314897 (. +528)  314369
--- 2   US2       .GoonTown       ......187254 (. +490)  186764
--- 3   US3       .CreateMyCity Forum  105044 (. +804)  104240
--- 4   Slovenia1    Staregate          100076 (+1393)   .98683
--- 5   Poland1     #debian.pl        .... .90733 (. +618)   .90115
--- 6   Germany1   isnichwahr.de        .89782 (. +224)   .89558
--- 7   Japan1    ...2ch_city         .... .69147 (+1870)   .67277
--- 8   Germany2   deluxebits          .59250 (. +279)   .58971
--- 9   France1    .FanaZ            . .56613 (+1377)   .55236
--- 10 . Germany3   upOTia           . .54802 (. +130)   .54672


20位までのランクは下記URLご参照ください
http://mmc.from.tv/world.html
0536デフォルトの名無しさん2008/02/12(火) 19:49:09
宣伝するのはいいけど、糞重いページだと注意書きしろよ。
0537デフォルトの名無しさん2008/02/12(火) 19:53:41
>>533
typedef union particle{
double data[3][3];
struct {
double position[3];
double verosity[3];
double angle[3];
} named;
}PARTICLE;
0538デフォルトの名無しさん2008/02/12(火) 19:59:41
例外を投げるときどういう型で投げるのが一般的なんでしょうか?

エラーメッセージ?
エラーコード?
それともクラスで投げて型判別?
どういう形がスマートでしょうか
0539デフォルトの名無しさん2008/02/12(火) 20:03:05
CAtlException
0540デフォルトの名無しさん2008/02/12(火) 20:20:13
>537
ありがとうございます
// strtest.c
#include <stdio.h>

typedef union particle{
double data[3][3];
struct {
double position[3];
double verosity[3];
double angle[3];
} named;
}PARTICLE;

int main(void){
PARTICLE pt;
pt.data[0][0] = 10;
printf("%lf\n",pt.named.position[0]);
return 0;
}

>gcc strtest.c
>./a.out
10.00000

所望の動作が得られました。
05415132008/02/12(火) 20:42:48
答えてくださった方々ありがとうございました。
05424602008/02/12(火) 21:10:50
>>471
!
なるほど。そこの部分と、>>460では省略した速度のvをintからfloatにしたらなんとなくうまくいきそうな感じになってきました。
ありがとうございます。
0543デフォルトの名無しさん2008/02/12(火) 21:18:08
Cの基本的なこと(繰り返しや条件分岐、演算子、ポインタ、構造体)をやってからC++(visual C++)をやろうと思ってるんですが他にCで勉強してた方がいいことってありますか?
0544デフォルトの名無しさん2008/02/12(火) 21:35:53
STLとATLで、
std::stack<CAutoPtr<Hoge>> hoges;
hoges.push(CAutoPtr(new Hoge()));
hoges.top()->func();
とすると、Hogeの実体がすでに破棄されているみたいでエラーが出ます。
std::stack<CAutoPtr<Hoge>> hoges;
hoges.push(CAutoPtr(new Hoge()));
hoge.top().Attach(new Hoge());
hoges.top()->func();
とすれば動きます。

どうして上のだと捨てられているですか?
0545デフォルトの名無しさん2008/02/12(火) 21:52:39
すまぽい
0546デフォルトの名無しさん2008/02/12(火) 21:54:00
CAutoPtrってSTLのコンテナに突っ込んで平気だったっけ。実装的に。
0547デフォルトの名無しさん2008/02/12(火) 22:03:06
auto_ptrと一緒じゃないか?

hoge.top().Attach(new Hoge());
で新たなアドレス突っ込んでるから動くだけで。
0548デフォルトの名無しさん2008/02/12(火) 22:13:30
>>529
D3DPRESENT_PARAMETERSがPOD型なら無い
0549デフォルトの名無しさん2008/02/12(火) 22:13:52
CAutoPtrが原因だね。
0550デフォルトの名無しさん2008/02/12(火) 22:14:39
CAutoPtr専用のコンテナがあったはず
0551デフォルトの名無しさん2008/02/12(火) 22:16:31
>>548
そいつたぶん釣りか荒らしかただのバカだよ…。
0552デフォルトの名無しさん2008/02/12(火) 22:16:54
それかCSharedPtr
0553デフォルトの名無しさん2008/02/12(火) 22:24:25
>>534
スレッド中でWindowsAPIのみ使うならCreateThread, ExitThreadでいいよ。
でもCランタイム使うなら_beginthread, _endthread使わないとダメだぜ。
あと、ExitThread等でスレッド終わらせると、スコープ抜けずにスレッドが終わる。
C++使うなら、ローカル変数のデストラクタ呼ばれなくなるからやめた方がいい。
05544602008/02/12(火) 22:48:42
すみません、やっぱり無理でした。

( after - before )の部分をtimeに置き換える。     ・・・・ 正常に動作。
(ただし、事前に float time = 0.1; を宣言しておく。)

( after - before )の部分を数字の0.1に置き換える。  ・・・・ 正常に動作。

( after - before )の部分をtimeに置き換える。      ・・・・ おかしい
(ただし、事前に DWORD time = 0.1; を宣言しておく。)


ここから考えるにDWORD型が悪さをしていると思うんですが、
( after - before )の部分を( float )( after - before )に置き換える。 ・・・・ おかしい

何か特殊な変換をしなければいけないんでしょうか?
0555デフォルトの名無しさん2008/02/12(火) 22:52:40
>DWORD time = 0.1;
DWORDが何のtypedefか分かってる?
0556デフォルトの名無しさん2008/02/12(火) 23:19:54
すみません質問です。
下記のようなコードでBar::fugaを初期化する方法が
よくわからないのですが、教えていただけませんでしょうか?
この場合はやはり引数空っぽのコンストラクタを作るほかに手はないのでしょうか?

class Foo{
 public:
 Foo( int hoge ){ ... }
};

class Bar{
 public:
 Foo fuga[ 3 ];
 Bar( void ) : ???? { ... }
};
0557デフォルトの名無しさん2008/02/12(火) 23:22:46
>>554
おかしいというときは、after - beforeやtimeの値が0になっているときじゃないか?
0558デフォルトの名無しさん2008/02/12(火) 23:34:52
timeGetTimeが何を返す関数なのか理解しないで使っているに1ガバス。
0559デフォルトの名無しさん2008/02/12(火) 23:42:03
戻り値で
return *(hoge + (sizeof(piyo) + 2);
みたいに書くのって非推奨なんでしょうか?*は無くてもいいんだけれども
0560デフォルトの名無しさん2008/02/12(火) 23:52:53
ケースバイケース。
つか、それだけじゃ分からん。
0561デフォルトの名無しさん2008/02/12(火) 23:55:35
>>559
まあ、非推奨だろうね。








コンパイルできないし。
0562デフォルトの名無しさん2008/02/12(火) 23:57:36
>>559
*があるとないじゃ内容が変わるが?括弧の数が合わないのはtypoでいいよね?
個人的には、あんま複雑になるようならローカルに落として欲しいけど、これくらいなら許容範囲。
ってか、ポインタを+2するだけならreturn hoge + 2;でもいいんでねぇの?
0563デフォルトの名無しさん2008/02/12(火) 23:58:57
>>559
何がいいたいのかさっぱり分からない。
05644602008/02/13(水) 00:45:52
うあああああああああ!できました!
>>555
整数型って分かってたつもりなのに小数いれてました!
あと、>>557で言われたとおりにtimeの値調べてたら、
ウィンドウ生成時に
before = timeGetTime();
そして計算時にも
before = timeGetTime();
ってやって、afterに何も入ってないような状態になってたような感じでした!
今度こそ解決しました!ありがとうございます!
0565デフォルトの名無しさん2008/02/13(水) 00:53:15
そもそもさ、めちゃめちゃな計算結果って具体的にどんなんよ
05664602008/02/13(水) 01:11:10
3Dのモデルを動かしてて、チェックするまでは数字の表示の仕方がよく分からなくて数字に出してなかったんですが、
とりあえず物体のy座標しかいじってないのにカメラの位置が変わってました。
0567デフォルトの名無しさん2008/02/13(水) 01:53:03
一時的でなくそこからずっと指定の型で宣言したみたいに扱う方法ってないですか?
例えばchar型で宣言したのを一々(int)とかしなくてもずっとint型として扱う
みたいな感じで
0568デフォルトの名無しさん2008/02/13(水) 02:02:10
>>567
言いたいことがわからない。キャストを毎回するのが面倒ってことか?
ずっとintならはじめからintにしとけばいいんでねぇの?
0569デフォルトの名無しさん2008/02/13(水) 02:08:09
>>567
union{
char a;
int b;
};
ちょっと違うかもしれんが
0570デフォルトの名無しさん2008/02/13(水) 02:08:59
>567
#define char int
なにが起きても責任とらないよ。
0571デフォルトの名無しさん2008/02/13(水) 02:26:22
>>568-470
ごめん_beginthreadが引数としてvoid*しか渡せないからそれをchar*として扱える
ようにしたかったんです
関数内でchar *xxx=(char *)xxxとすることで解決しました。ご迷惑おかけしました
0572デフォルトの名無しさん2008/02/13(水) 02:27:27
>>568-470
ごめん_beginthreadが引数としてvoid*しか渡せないからそれをchar*として扱える
ようにしたかったんです
関数内でchar *xxx=(char *)xxxとすることで解決しました。ご迷惑おかけしました
0573デフォルトの名無しさん2008/02/13(水) 02:28:44
「charとint」と「void*とchar*」はだいぶ事情が違うだろ・・・
0574デフォルトの名無しさん2008/02/13(水) 06:39:24
>>514
>>516
ありがとうございます。なるほど、仮想関数は定義が必須なのですね。
あと、純粋仮想関数は定義が必要ないけど、デストラクタの純粋仮想関数の場合は
やはり定義が必要になる、というのは正しいですか?
0575デフォルトの名無しさん2008/02/13(水) 08:56:43
質問です。
マルチスレッドプログラムを作った事がないためわからないです。
スレッドAで作ったデータをスレッドBに渡すには普通どうやって渡すのでしょうか?以前お遊びで作った時、グローバル変数を使って渡したのですがデータが化けちゃったんですね。。

【作りたいもの】
ダイアログベースのターミナルソフト。
・シリアルデータ受信スレッドでデータを受けて表示用(windowsのメッセージループ待ちをしてる)に送りたい

【開発環境】
VC。MFCはつかいません。猫でもわかるレベル
0576デフォルトの名無しさん2008/02/13(水) 09:45:29
AはBの作成者、じゃないのね?
グローバルデータが化けた理由がわかれば解決すると思うよ。
0577デフォルトの名無しさん2008/02/13(水) 09:49:28
同時に書き込んだんじゃね?
もしくは書き込んでない(初期化してない)のに取得したか
0578デフォルトの名無しさん2008/02/13(水) 09:58:22
どうせ排他してないだけなんだろうな
0579デフォルトの名無しさん2008/02/13(水) 10:00:48
>>575
多分GUIスレッドにはPostMessage()でブン投げてるんだろうが、
GUIスレッドがPostされたメッセージをメッセージキューから読み取るまでの間に
受信スレッド側からの再Postが発生し得るから、その場合グローバル変数では
当然上書きされてしまうだろ。

Post側は毎回malloc()等でメッセージ用の領域を確保して、受け側で
メッセージを処理したらfree()するように汁。
0580デフォルトの名無しさん2008/02/13(水) 10:57:14
C++の一時オブジェクトについて質問します。gcc 3.2.1です。
下記のようなコードで"taking address of temporary"のWARNINGが出ますが、
この場合は無視しちゃってもいいですか?いいですよね?

#include <stdio.h>

class CTmp
{
public:
int x,y;
CTmp(int a,int b):x(a),y(b){};
};

int Foo(CTmp* pTmp)
{
if(pTmp) return pTmp->x + pTmp->y;
return 0;
}

int main(int argc,char** argv)
{
int result=Foo(&CTmp(1,2));
printf("%d\n",result);
return 0;
}
05815802008/02/13(水) 11:16:23
こうするのがスマートかな。
スマートさ以外で>>580のまずい点あったら教えてください。

#include <stdio.h>

class CTmp
{
public:
int x,y;
CTmp(int a,int b):x(a),y(b){};
};

int Foo(const CTmp &Tmp)
{
return Tmp.x + Tmp.y;
}

int main(int argc,char** argv)
{
int result=Foo(CTmp(1,2));
printf("%d\n",result);
return 0;
}
0582デフォルトの名無しさん2008/02/13(水) 11:58:15
スマートというかそれが普通じゃね。
0583デフォルトの名無しさん2008/02/13(水) 12:01:25
>>580
標準 C++ ではエラーになるはず。 gcc のバグっぽいな。
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21386
(だいぶ古いけど CONFIRM されてない。)
0584デフォルトの名無しさん2008/02/13(水) 12:02:19
んじゃ、列挙。
・ポインタである必要が内のにポインタを使うな
・どうしても使いたいならconst修飾しろ
・そもそもデータメンバは公開するな
・クラスに依存する関数ならメンバにしろ
0585デフォルトの名無しさん2008/02/13(水) 12:15:31
下記のように、fstreamの参照に、ifstreamを渡したいのですが、できません。
そこで、fstream *fsというようにポインタにしてやってるのですが、参照で
やる方法はないでしょうか

void func(fstream &fs)
{
return;
}
int main()
{
ifstream ifs;
ifs.open("ttt");
func(ifs);
0586デフォルトの名無しさん2008/02/13(水) 12:19:49
return文で計算したりって避けてたけど結構普通にやるもんなんだな
0587デフォルトの名無しさん2008/02/13(水) 12:20:57
>>585
fstream は読み書き両用。読み取り専用の ifstream を渡せないのはあたりまえ。
なんで ifstream& にしないの?
05885802008/02/13(水) 12:26:17
>>582-583
レスありがとうございます。
まあ動くけど将来にわたって安全とは言い難い、
ってかやはり>>581推奨ってとこですかね。

>>584
あくまでサンプルなんで御容赦ください。
でもお気遣い感謝します。
0589デフォルトの名無しさん2008/02/13(水) 12:46:25
まずい点あったら教えてくれと書いてるのに
まずい点を指摘したら言い訳ってどーなんだ
0590デフォルトの名無しさん2008/02/13(水) 12:46:29
>>585
ファイルストリームのクラス階層を確認してみるべき。
fstreamとifstreamは継承階層の中で関係が全く無い。
0591デフォルトの名無しさん2008/02/13(水) 12:53:03
>>589
いや、質問の主眼が"taking address of temporary"のWARNINGでしたので。
その他は瑣末なことと手を抜いてしまいました。
とりあえずお詫びまで。
0592デフォルトの名無しさん2008/02/13(水) 12:56:48
まあありゃ誰がどう見てもただの揚げ足取りだな
0593デフォルトの名無しさん2008/02/13(水) 13:03:19
>>585
ちょっとややこしいけど、そのコードには、一般によくある勘違いにかすっている
君独自の勘違いがある。

まず、ifstreamはistreamを継承してる。fstreamは、iostreamを継承してる。
そのiostreamが、istreamとostreamを継承してるから、つまり両者に共通する近い祖先はistream。
iostreamはistreamの子だけど、fstreamはifstreamの子ではない。これが一般に良くある勘違い。

で、君はこれを踏まえて、fstreamにifstreamを渡すという、更なる勘違いをしてる。
読み書き両用クラス「が」読み取り専用クラス「の」子であるのは明白なわけで、つまり君は、
このセンスがまだ身についていないか、あるいは、普通に渡すだけでダウンキャストが可能になるという、
C++の仕様に対する勘違いをしていることになる。
0594デフォルトの名無しさん2008/02/13(水) 13:19:14
std::cinをstd::ifstreamに渡しても問題なかですか?
0595デフォルトの名無しさん2008/02/13(水) 13:36:47
std::istreamじゃイヤなのか? なぜ f が必要?
0596デフォルトの名無しさん2008/02/13(水) 13:47:04
>>593
そんなくどい説明必要ない。
クラス階層見れば一発で分かる。
他人の勘違いまでも決め付けるなんて教えたがりも甚だしい。
0597デフォルトの名無しさん2008/02/13(水) 14:10:16
>>596
現実に「クラス階層見てない」人なんだし、
他に可能性が無い状況は決めつけとは言わないよ。
変な理屈で変なスイッチ入っちゃった人に絡まれるのってやだなぁ。
0598デフォルトの名無しさん2008/02/13(水) 15:23:56
using namespace std;
は何かヘッダをincludeした後じゃないとだめなの?
0599デフォルトの名無しさん2008/02/13(水) 15:28:19
書くだけならお好きにどうぞ
0600デフォルトの名無しさん2008/02/13(水) 15:39:47
VCで先に書くとstdと認識してくれないのですが
0601デフォルトの名無しさん2008/02/13(水) 15:41:55
makeファイルがLinux、Windows、Macを識別する方法を教えてください
0602デフォルトの名無しさん2008/02/13(水) 15:46:10
>>600
これを機会にusing namespace std;をグローバルに置くのを
やめちまいなよ
0603デフォルトの名無しさん2008/02/13(水) 15:50:50
どこに置くのが正解なのでしょうか?
mainの中?
0604デフォルトの名無しさん2008/02/13(水) 15:58:42
グローバルに置くのが正解
06056022008/02/13(水) 16:00:48
>>603
いや、mainの中の先頭に置いても良いけど
スコープはmain内だけであってまぁ・・なんていうか・・・

using namespace std;の宣言自体を俺は勧めない
0606デフォルトの名無しさん2008/02/13(水) 16:11:52
>>603
原則 using を使わず全部書くのが推奨だな
0607デフォルトの名無しさん2008/02/13(水) 16:18:05
std::vector<int> hoge;

面倒でもこういう記法に慣れるが吉。
0608デフォルトの名無しさん2008/02/13(水) 16:25:19
cout cin endlくらいはusing宣言したいな
0609デフォルトの名無しさん2008/02/13(水) 16:39:53
(swap内で)
using std::swap;
using boost::swap;
using 俺ライブラリ::swap;
(definition内で)
using namespace boost::spirit;

これしか使ってないな
0610デフォルトの名無しさん2008/02/13(水) 16:44:03
>>608
おれもそう思う。stdにいろいろ詰め込み過ぎだ。
0611デフォルトの名無しさん2008/02/13(水) 16:55:48
::boost::mplを使うときに
専用の名前空間に放り込んでusing namespace ::boost::mpl;してから
共通名前空間にエイリアスとなるメタ関数を書くようにする
ぐらいは許してください
0612デフォルトの名無しさん2008/02/13(水) 18:52:47
専用名前空間って、それのためにしか使わないなら、
名前空間のエイリアスnamespace hoge = boost::mpl;で十分では?

それに限らず、cppファイル内ではよくやるんだが。
namespace bll = boost::lambda;
namespace algo = boost::algorithm;

namespace dr = System::Drawing;
0613デフォルトの名無しさん2008/02/13(水) 22:36:33
VC++のusing namespaceは壊れてるから
専用の名前空間でも使わない方がいいよ
0614デフォルトの名無しさん2008/02/13(水) 22:52:15
std::mapから登録していないKeyつかって[]で取り出そうとすると
出来立てのValueが返ってきますか?
0615デフォルトの名無しさん2008/02/13(水) 22:55:30
うん
■ このスレッドは過去ログ倉庫に格納されています