スレを勃てるまでもな ..
316:デフォルトの名無しさん
09/08/10 02:06:10
>>314
「cuda rgba」でググったらぴったりのものが出てきた。
URLリンク(wiki.livedoor.jp)
317:デフォルトの名無しさん
09/08/10 04:48:35
生成と同時にコンストラクタに値を与えたいオブジェクトがあるので、
CTest* ctest[10];
for(int i=0;i<10;i++){
ctest[i] = new Ctest();
}
と統一してるんですが、最初に要素数を決めなきゃいけないのと、
newとdeleteを使う分、かったるいので
vector<CTest*> ctest;
for(int i=0;i<10;i++){
ctest.push_back( ? );
}
って風にしようとしてるんですが、ここで「?」になにも入れないと
「0個の引数は指定できない」と怒られます
この場合「?」の部分はCTestコンストラクタに渡す引数になると思ってたんですが、
引数がない場合はどうすればいいでしょう?
やはりnewとdeleteを使わなきゃいかんのでしょうか
318:デフォルトの名無しさん
09/08/10 05:46:18
vector<CTest*> ctest(10);
でいけたような。
319:デフォルトの名無しさん
09/08/10 06:17:46
>>317
CTest*のvectorでしょ
push_backするのはCTest*じゃないの?
ctest.push_back(new CTest());
とか
ctest.push_back(NULL);
とか・・・
320:デフォルトの名無しさん
09/08/10 07:05:40
ctest.push_back(new CTest());
とか
ctest.push_back(NULL);
とか
ctest.resize(i+1);
ctest[i] = new ctest();
とか試してみたけど、
error LNK2001: 外部シンボル "__CrtDbgReportW" は未解決です
error LNK2019: 未解決の外部シンボル __CrtDbgReportW が
関数 "public: class Ctest * & __thiscall std::vector<class Ctest *,class std::allocator<class Ctest *> >::operator[](unsigned int)"
(??A?$vector@PAVCtest@@V?$allocator@PAVCtest@@@std@@@std@@QAEAAPAVCtest@@I@Z) で参照されました。 Main.obj
なにこれ(゜д゜)
321:デフォルトの名無しさん
09/08/10 07:59:13
失礼、ランタイムライブラリをマルチスレッド(/MT)から
マルチスレッドデバッグ(/MTd)に変えたら解決しました。
理屈はわかりませんが・・・
CTest.push_back( new CTest(引数) );
でいけそうですが、この場合、指定のオブジェクトを破棄するとき
deleteで指定のアドレスを破棄してから、vectorのポインタを破棄する、
というクドいコードになりますね・・・
かといって、vector<CTest>と、ポインタで持たずにnewを使わなければ
引数付きコンストラクタでの初期化がややこしくなりますし・・・
しかたないですかね
322:デフォルトの名無しさん
09/08/10 11:36:10
>>321
それは仕方がない。というかnewした以上、deleteするのは当たり前。
vectorにオブジェクトのポインタをプールするなんてまぁよく聞く話だし。
デストラクタに全要素deleteするコード書いとけ。
323:デフォルトの名無しさん
09/08/10 11:38:19
>>321
>引数付きコンストラクタでの初期化がややこしくなりますし・・・
そもそも、ここが判らん。
324:デフォルトの名無しさん
09/08/10 12:46:32
>>321
boost::ptr_vectorで解決
325:293
09/08/10 14:50:51
>>315
確かにキャプチャ部分がこうなっている以上コピーするしかないですよね
Grabを自前で実装できればよいのですが、キャプチャ自体がどのように行われているかさえ
まだ理解していないので当分コピーで済ませていこうと思います
ありがとうございました
>>316
このようなページを知らなかったとはまだまだ勉強不足のようですorz
もうちょっと自分で調べてみようと思います
ありがとうございました
326:デフォルトの名無しさん
09/08/10 15:59:01
>>321
それなら
std::vector<boost::shared_ptr<CTest> > ctest;
ctest.push_back(boost::shared_ptr<CTest>(new CTest()));
コンパイルして書いてるわけじゃないから何か変だったら適当になおして
327:デフォルトの名無しさん
09/08/10 18:40:28
const char * const p= "有効な文字列p";
const char * const q= "有効な文字列q";
このようなpとqに格納されている文字列が等しいかどうかを調べる場合、
strcmp
を使う方法と
std::string(p)==q
や
std::string(p)==std::string(q)
とする方法と、どちらが望ましいでしょうか?
328:デフォルトの名無しさん
09/08/10 19:14:12
そら、態々メモリ割り当てずに strcmp が速いでしょ。
329:327
09/08/10 19:17:27
>>328
ありがとうございます。
330:デフォルトの名無しさん
09/08/10 20:26:59
男キャラを担当する女声優はわんさかいるけど、
女キャラを担当する男声優なんて聞いたことない
331:デフォルトの名無しさん
09/08/10 20:27:39
超誤爆
332:デフォルトの名無しさん
09/08/10 20:36:20
どのスレだよw
333:デフォルトの名無しさん
09/08/10 21:40:42
class Aからclass Bへの暗黙の型変換が許されている状況で、
A hoge;
として
B piyo = hoge;
B piyo(hoge);
B piyo = (A)hoge;
B piyo = static_cast<A>(hoge);
これら4つは全く等価だと考えてよろしいですか?
334:デフォルトの名無しさん
09/08/10 23:27:55
少なくとも一番目と二番目は全く違うような。
335:デフォルトの名無しさん
09/08/10 23:36:36
>>334
違いますか?
どのあたりが違いますか?
336:デフォルトの名無しさん
09/08/11 02:15:35
同じだよ。どれもコピーコンストラクタが呼ばれる。
ときおり初心者が1番目の式を代入と勘違いするけど
普通の教科書にはそれは代入じゃねぇンだよって説明が書いてあるので
それを知らないのは教科書をよく読んでいない証拠。
もし書いてないなら、その教科書は資源ごみにでも出したほうがいい。
337:デフォルトの名無しさん
09/08/11 05:33:53
すんごい初歩的な質問だと思うんですけど、
deleteで解放をし忘れしているプログラムを何度も動かした場合、
不要なデータはPC上に残り続けるんでしょうか?
溜まったそれらのデータをなんとか解放、削除したい場合は
どうすればいいんでしょ?
338:デフォルトの名無しさん
09/08/11 06:04:39
一度プログラムを終了させれば
まともなOSなら
deleteしていなくても問題ない。
少なくとも、普通の方法で確保したメモリを
プロセスが終了しても解放しないものはまず無い。
メモリ以外のリソースはそうでもない場合もある。
339:337
09/08/11 06:10:01
多謝
340:333
09/08/11 10:32:22
>>336
やっぱり全く等価ですよね。
どうもありがとうございます。
341:デフォルトの名無しさん
09/08/11 10:37:12
explicitを付けて(1)を使えなくしてやるー
342:デフォルトの名無しさん
09/08/11 10:53:55
>>334
こいつ恥ずかしいなwww
>>338
メモリ管理問題
URLリンク(kmaebashi.com)
熟読せよ
343:デフォルトの名無しさん
09/08/11 11:17:26
>>342
言いたいことがあるなら自分の言葉でどうぞ。
344:デフォルトの名無しさん
09/08/11 11:24:16
共用体について質問です
union AB{
A a;
B b;
};
void init(union AB ab){
union AB ans;
ans = ab;
}
void main(){
init( (A)10 ); // 10をA型にキャストして引数に与える
init( (B)10 ); // 10をB型にキャストして引数に与える
}
・・・このソースでなにがしたいかと言うと、
引数に与えた型を判別して、A型ならans.aに、B型ならans.bに
自動的に代入してほしいのです。
考え方が間違えてるのか「AからABに変換できません」とエラーが出ます
この場合、どうしたらいいのでしょうか?
345:デフォルトの名無しさん
09/08/11 11:27:14
共用体にA用とB用のコンストラクタを設ける
346:デフォルトの名無しさん
09/08/11 11:28:05
>>344
>引数に与えた型を判別して
C++ でも使いましょう。
347:デフォルトの名無しさん
09/08/11 11:29:05
>>344
まて、その前にクラスはまともに使えるのか?
例えば
>>333
この様なclass Aとclass Bを記述することは出来るだけの技量はある?
348:デフォルトの名無しさん
09/08/11 11:36:51
クラスは普通に使ってます。
というかこの質問が、同じクラスのメンバ変数が2タイプに分かれる場合があって、
2つ変数を設けて片方を空っぽにするのが気持ち悪いので、共用体を使おうとしてるのです
(初期化関数を統一したいのもあります)
ただ「共用体にコンストラクタを設ける」といわれるとなんのことやら・・・
共用体がクラスのように扱える、ということでしょうか
349:342
09/08/11 11:39:39
>>343
こいつ(は無知なのに「全く違う」という強い否定を使い
それが全くの初歩の話題であったことを知り)
恥ずかしい(とさぞかし思っているだろう)なwww
で満足?
350:343
09/08/11 11:41:05
>>349
あ、いや、後段の方。
351:デフォルトの名無しさん
09/08/11 11:41:40
>>348
クラスと同じように共用体もコンストラクタやデストラクタを持てる
union AB{
....
AB(A a){ this->a = a; }
AB(B b){ this->b = b; }
};
352:347
09/08/11 11:41:42
>>348
>クラスは普通に使ってます。
じゃあとりあえず、
自分のコードのunionになっている場所をclassに単純に書き換えて
実現してみてよ。
それがすぐ答えにつながる。
353:デフォルトの名無しさん
09/08/11 12:06:41
>>342
理屈上はそうかも知れんが、
free()しないとメモリを管理できてないような気がする。
特にdeleteしないとデストラクタがどう動くかよく分からん。
354:デフォルトの名無しさん
09/08/11 12:11:00
つーか、共用体にする意味があるのか?
気持ち悪いと言う理由だけでは意味がなさ過ぎる。
どちらかだけ有効だと言うのであれば、boost::optionalでも使って有効性をチェックすればいいだけの気もするが。
355:342
09/08/11 12:12:23
いや俺はfree()しないことに反対な人だから。
ただこういう意見な人も居るよっていいたかっただけだ。
356:デフォルトの名無しさん
09/08/11 12:12:23
>>353
deleteしなければデストラクタが動くわけないじゃん。
OSは、クラスの管理までしてくれるわけじゃないよ。
357:デフォルトの名無しさん
09/08/11 12:13:11
>>354
boost::optional
の使いどころおかしくねぇか?
valiantじゃなくて?
358:デフォルトの名無しさん
09/08/11 12:23:55
>>357
元質の趣旨が判らんから勝手に推測した。valiantを使うべきならそうしてくれ。
359:デフォルトの名無しさん
09/08/11 20:28:12
class hoge {
public: static fuga();
};
これって普通の関数と比べてなんかいいことあんの?
360:デフォルトの名無しさん
09/08/11 20:35:16
>>359
静的メンバ関数でググれ
361:デフォルトの名無しさん
09/08/11 20:38:17
>>359
1・それがいいか悪いかは別として、似たようなstatic関数が100個くらいあったとき
まとめて他のクラスのfriendにできる
2・hogeのstaticじゃないprivateなメンバに触れる
362:デフォルトの名無しさん
09/08/11 20:55:02
あぁプライベートメンバに触れるのかそれは便利そうだ
二項演算しとかに使えそう
363:デフォルトの名無しさん
09/08/11 20:59:09
とおもったらオペレーターは静的にできなかった・・・
ぬかよろこびだったでござる
364:デフォルトの名無しさん
09/08/11 21:33:44
てか、コンストラクタをprivateにしてstaticなファクトリ作るくらいじゃない?
365:デフォルトの名無しさん
09/08/11 21:44:24
>>359
コールバック関数に使える。
366:デフォルトの名無しさん
09/08/11 22:04:07
URLリンク(codepad.org)
の
std::numeric_limits< double >::quiet_NaN()==std::numeric_limits< double >::quiet_NaN()
の部分はfalseとなるようですが、
これは言語仕様そうなるものですか?
それとも実装依存でしょうか?
367:366
09/08/11 22:05:34
なお、
g++, VC++2008に食わせた後実行したらURLリンク(codepad.org)と同じ結果でしたが、
bccに食わせた後実行したらその実行ファイルは不正終了しました。
> これは言語仕様そうなるものですか?
368:デフォルトの名無しさん
09/08/11 22:22:22
URLリンク(codepad.org)
VC++だと実行結果が100になる
この記述でコピコンが呼ばれるかどうかは仕様で決まってないのかな
369:367
09/08/11 22:26:58
>>368
私の環境のg++ 4.4.0では100になりましたよ。
bcc 5.5.1でも100になりましたよ。
codepadが100にならないのは不思議ですね。
370:デフォルトの名無しさん
09/08/11 22:33:58
>>342の知ったかバカ
>>337の質問が
>deleteで解放をし忘れしているプログラムを何度も動かした場合、
>不要なデータはPC上に残り続けるんでしょうか?
という内容で、
>>338の回答が
>一度プログラムを終了させれば
という、限定された条件なんだけど、わかってるのかね?
371:デフォルトの名無しさん
09/08/11 22:36:28
>>366
TがNaNである値nを持つとき、
型Tの値nがNaNである ⇔ すべてのTの値xに対してx ≠ nである
ゆえにNaN ≠ NaNである
quet_NaNは型がNaN値を持つとき、
LIA-1(ISO/IEC 10967-1)の要求を満たすとあるので(ISO/IEC 14882:1998 18.2.1.2.45)
恐らく規格準拠だと思うよ
詳しくはC++98とLIA-1をあたってくれ
多分NaNに関してはLIA-1に1段落目で書いたことのようなものが載ってる筈
372:366
09/08/11 22:39:12
>>371
ありがとうございます。
助かりました。
373:デフォルトの名無しさん
09/08/12 00:12:29
URLリンク(codepad.org)
URLリンク(www1.axfc.net)
二回目のバイナリ書き込みがなぜかテキスト書き込みになってしまいます
なぜでしょう?
374:デフォルトの名無しさん
09/08/12 01:52:18
>>373
おおざっぱに言うと、式の中にcharが出てくるとint型に拡張される。「汎整数昇格」で検索すると解説が出てくるかも。
だから2回めの書き込みは、cout << (int)(ch * 2) と同じこと。
375:デフォルトの名無しさん
09/08/12 02:03:11
>>370
どうした?
>>337 >>338 >>342の流れはfreeしなくていいよ派の滞りない流れではないか?
376:デフォルトの名無しさん
09/08/12 03:10:30
もしかして、単に優越感に浸りたいだけの基地外さん?
もしかして、単に優越感に浸りたいためだけに、自分に都合の良い解釈しかしない人?
377:デフォルトの名無しさん
09/08/12 03:19:45
バカは相手にすんな
378:デフォルトの名無しさん
09/08/12 03:41:01
>>375
342はfreeしろ派じゃねーの?
379:デフォルトの名無しさん
09/08/12 04:04:11
freeしろ派があのリンク先を持ってくるかなあ?
リンク先を見た上で、しかしこういう考えのもと、やはりfreeすべきだという内容がレスにあるわけでもないし
380:デフォルトの名無しさん
09/08/12 04:41:00
いい加減freeの話題で荒れるのは勘弁してくれないかな。
381:デフォルトの名無しさん
09/08/12 05:16:11
今までの話を纏めると
結論:必ずfreeすべし
382:デフォルトの名無しさん
09/08/12 05:47:53
この話は明示的なメモリの解放を行うことができる言語がある限り繰り返されると思うよ
片手間で作ったちょっとしたツールでせっせと例外捕捉して必死でメモリ解放するとかやってられんしょ
383:デフォルトの名無しさん
09/08/12 09:44:43
>>374
その解釈はおかしい。
何故ならば、ch * 2が既にintだと言っているのだから(int)(ch * 2)は(int)(int)....(ch * 2)と言う位意味がない。
敢えてその顰に倣って書くのなら、(int)ch * 2と言った処だろう。
384:デフォルトの名無しさん
09/08/12 12:38:32
ていうかバイナリモードで開いてるのになんで文字としての数字が保存されてんの?
って聞きたかったんすけど・・・
385:デフォルトの名無しさん
09/08/12 12:40:27
>>384
std::cout << '0'としても、std::cout << 0としても出力が同じなのと同じ理由。
バイナリモードかどうかは全く関係ない。ついでに言えば、大抵のOSではテキストモードとバイナリモードの違いさえない。
386:デフォルトの名無しさん
09/08/12 12:45:57
テキストモードでオープンすると '\032' から先を読まない処理系が昔あったなあ。
387:デフォルトの名無しさん
09/08/12 16:59:09
class Hoge
{
operator double(){return 1.0;}
};
というクラスがあるとき
Hoge e;
printf("%f\n", e );
と言うコードはコンパイルが通りますが、表示されるのは1.0ではありませんでした
eは何型にキャストされてからprintfに渡されているんですか?
388:デフォルトの名無しさん
09/08/12 17:07:20
>>387
キャストされないで、Hogeのままスタックに詰まれる。
それみたいにメンバ変数のないクラスのでやるとどうなるかしらないけど。
389:デフォルトの名無しさん
09/08/12 17:10:58
正確には、もうひとつのインスタンスが
(コピーコンストラクタを使って)スタック上に作られる、ってことだね。
390:デフォルトの名無しさん
09/08/12 17:27:39
>>388-389
ということは、やりたいようなことはたぶん出来ないんですね
面倒でも(double)eとするしかないと
ありがとうございました
391:デフォルトの名無しさん
09/08/12 18:02:12
>>386
\032って何ですか?
392:デフォルトの名無しさん
09/08/12 18:14:04
>>391
Control-Z。MS-DOSやCP/MのEOF文字
CP/MというOSではファイルサイズを128の倍数でしか管理できなかったので、
データの最後にEOFをつける必要があった
393:デフォルトの名無しさん
09/08/12 18:29:35
>>384
じゃあ何が保存されればいいの?
394:デフォルトの名無しさん
09/08/12 19:00:57
>>392
ありがとうございます。
395:デフォルトの名無しさん
09/08/12 21:04:36
安西先生、引き数と返り値の型も隠蔽したいです
396:デフォルトの名無しさん
09/08/12 22:00:45
c++で2重起動を防止する方法を教えてください。
環境linux+gccです
397:デフォルトの名無しさん
09/08/12 22:18:02
セマフォを使う
398:デフォルトの名無しさん
09/08/13 01:43:06
mutex
399:デフォルトの名無しさん
09/08/13 22:13:12
class hoge {
public:
class foo {...};
foo fuga();
};
こんな場合って普通fooの定義は外にだすもん?
400:デフォルトの名無しさん
09/08/13 22:21:56
>>399
クラスのネストくらいふつーだと思う。
401:デフォルトの名無しさん
09/08/13 22:28:08
クラス内クラス定義はpimplイディオムなんかの時に普通につかうよ
402:デフォルトの名無しさん
09/08/13 22:30:13
>>401
403:デフォルトの名無しさん
09/08/13 22:45:43
>>399
そういうことをやり始めたあたりから楽しくなってくるんだぜ(笑)
404:デフォルトの名無しさん
09/08/13 23:10:16
前スレで登場したテンプレートを
適当に貼り付けてみる。
template<typename T, std::size_t N>
inline std::size_t numberof(T (&)[N]) {return N;}
まだまだ納得できない俺がいる。
405:デフォルトの名無しさん
09/08/13 23:15:13
URLリンク(ray.sakura.ne.jp)
これのバブルソートのテンプレート化も面白いな
406:デフォルトの名無しさん
09/08/13 23:35:31
>汎用性の為に速度が犠牲になつてしまふことは、なんとしても避けなければならない。
執念が感じられるな(笑)
407:デフォルトの名無しさん
09/08/13 23:37:24
メンテ性悪すぎワラタ
408:デフォルトの名無しさん
09/08/13 23:47:03
何かあったんだろうなw
409:デフォルトの名無しさん
09/08/14 00:10:52
C/C++で書くのは実行速度気にするからで間違った方向じゃないと思うがね
アセンブラやFORTRANでブイブイ云わせてるオッチャンは失笑するかもしれんけど
410:デフォルトの名無しさん
09/08/14 04:13:44
同じ関数にわたす引数が場面によって違う場合、どうするのが一般的ですか?
パターン1:
if( case == 1 )
test( a, c, d, e, f);
else
test( b, c, d, e, f );
パターン2:
if( case == 1 )
temp = a;
else
temp = b;
test( temp, c, d, e, f );
このどちらかでいいじゃん、と思われたかもしれませんが
パターン1の場合、引数リストが10行近くに渡る場合、
引数1つの違いのために10行余計に食うハメになります・・・
パターン2の場合は、1つの引数のためにわざわざ
tempを用いてるのが醜いです
引数リストの中でif文を使えるようなら、
それが一番いいイメージなのですが・・・
411:デフォルトの名無しさん
09/08/14 04:40:19
3項演算子でググれ
412:412
09/08/14 06:01:09
できました。ありがとうございます
413:デフォルトの名無しさん
09/08/14 09:17:37
>>412
自己完結乙。
414:デフォルトの名無しさん
09/08/14 17:24:44
privateなstaticメンバ変数と
無名名前空間内の変数ってどうちがうんでさ?
415:デフォルトの名無しさん
09/08/14 17:36:16
>>414
どういうソースのこと?
416:デフォルトの名無しさん
09/08/14 17:42:44
Cの勉強を始めたばかりなんだけど、メモ帳に、参考書にある通りのソースプログラムを書いてリターンキーを押しても実行結果が表示されません。
原因を教えてください。
417:デフォルトの名無しさん
09/08/14 17:45:13
>>416
釣り?マジ?
418:デフォルトの名無しさん
09/08/14 17:48:21
>>417
マジです。
419:デフォルトの名無しさん
09/08/14 17:53:50
俺は、ちゃんと実行されるけど、
不正コピーのWindows使ってるから、動かないのじゃね?
420:デフォルトの名無しさん
09/08/14 18:04:20
普通のXPを使ってます。
リターンキーを押しても改行されるだけなんですが(T_T)
421:デフォルトの名無しさん
09/08/14 18:08:58
その糞参考書を晒せ
422:デフォルトの名無しさん
09/08/14 18:14:42
これはたしかに参考書が気になる
423:デフォルトの名無しさん
09/08/14 18:20:25
以前もさらっと「コンパイルが必要です」ってある参考書ではまってた奴がいたような。
424:デフォルトの名無しさん
09/08/14 18:42:14
>>415
class pool {
private: static map m;
(ry
};
みたいなコード
これだと無名グローバル変数でもいいように思えるんだけど・・・
425:417
09/08/14 18:44:07
codepad
URLリンク(codepad.org)
ここで実行しろ。
426:415
09/08/14 18:44:58
>>424
poolの外からmにアクセス出来なくね?
427:デフォルトの名無しさん
09/08/14 18:57:08
『明解C言語 入門編』
です。
これって名著と聞いてますが。
428:デフォルトの名無しさん
09/08/14 19:06:43
良く売れてますよ。
でも、C言語の入門書でK&R第2版を超えるものはひとつもありません。
特にUNIXシステムインタフェースの章は重要で、
システム依存のコード(システムコールを用いるコード)とどのように折り合いをつけるか、
平易に説明してくれる入門書はこれくらいのものでしょう。
結局、C言語はアセンブラに近しいところで利用されるので
このような低水準の話題は避けて通れないのです。
でも日本人が書いた入門書はそのへん全部無視しやがってアホか。
429:デフォルトの名無しさん
09/08/14 19:17:12
>>428
ありがとうです。
K&Rの正式な書名をよかったら。書店で探してみます。
430:デフォルトの名無しさん
09/08/14 19:19:56
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン (著), D.M. リッチー (著), 石田 晴久 (翻訳)
431:デフォルトの名無しさん
09/08/14 19:34:26
>>430
ありがとうです。
明日さっそく書店へ行きます。
432:デフォルトの名無しさん
09/08/14 19:54:38
>>416
入力した c ソースをコンパイルして、実行ファイルを指定して実行していますか?
意味がわからなければ、さわりでコンパイルの方法が書いてある書籍をさがすか、人にきいてみてください。
433:デフォルトの名無しさん
09/08/14 19:55:53
>>431
最初の最初に読む書籍ではないことに注意してください。ある程度の経験が必要です。
434:デフォルトの名無しさん
09/08/14 20:13:44
最初の最初に読むのにいい本があったら教えて、誰かエロい人!
435:デフォルトの名無しさん
09/08/14 20:18:29
書籍スレへどうぞ。
436:デフォルトの名無しさん
09/08/14 20:18:39
もともとC言語を他の言語の経験なしに最初に学ぼうという時点で無謀だ。w
せいぜいテキストファイルを読み込んで集計する程度のプログラムしか書かないなら
C言語を使う理由など皆無に等しく、そんなものはBASICで十分だろう。
C言語は(BASICに比べれば)難解で保守しにくく、
それでもなおC言語を使うのはC言語には低水準固有のパワーが備わっているからだ。
そういうプログラムを書きたいと望むものが
K&Rの内容も読めないなら、
実際にプログラムをしようとしたとき、
C言語よりも遥かに難解なハードやOSを前にして
ただただ途方にくれるだけだろう。
437:デフォルトの名無しさん
09/08/14 20:19:09
入門レベルならWebでいいんじゃねぇの
438:デフォルトの名無しさん
09/08/14 20:28:47
BASICってVisualBasic?
Cより難解で複雑で混沌としてんじゃねーか
439:デフォルトの名無しさん
09/08/14 20:30:36
最初にC習って特に問題なかった俺は天才ということだな
440:デフォルトの名無しさん
09/08/14 20:44:06
>>439
俺もだ、天才同志よ。
441:デフォルトの名無しさん
09/08/14 20:45:19
C言語だとファイルの削除はremove(fileName)でできましたが、
C++だとどうやってファイルを削除しますか?
442:デフォルトの名無しさん
09/08/14 20:50:55
std::remove(fileName)
443:デフォルトの名無しさん
09/08/14 20:52:40
>>442
ありがとうございます。
チュ♥
444:デフォルトの名無しさん
09/08/14 21:13:13
STDMETHODってなんでしょうか?
445:デフォルトの名無しさん
09/08/14 21:23:40
COMで使われるマクロです
446:デフォルトの名無しさん
09/08/14 21:27:03
そんな用語はないよ?
447:デフォルトの名無しさん
09/08/14 21:31:45
俺も秀才なんで、Cから始めます。
448:デフォルトの名無しさん
09/08/14 22:12:18
俺おくてだから、勇気を出してCから始めます。
449:デフォルトの名無しさん
09/08/14 22:20:34
vecterとかmapのデフォルトコンストラクタってメモリ確保しないよね?
450:デフォルトの名無しさん
09/08/14 22:58:41
実装依存だから確実ではないけど、普通は確保しないよ。
451:デフォルトの名無しさん
09/08/15 00:08:57
stlportって何ですか?
ググってみると良いことずくめに書いてあるんですが。
452:デフォルトの名無しさん
09/08/15 00:33:47
演算子のオーバーロードを勉強中です。
コンパイルエラー出ます。本のサンプルプログラムなんですが。
a.c:17: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
string.h:21: note: candidate 1: char& String::operator[](size_t)
a.c:17: note: candidate 2: operator[](char*, int) <built-in>
です。原因は何でしょうか?エラーメッセージがよくわかりません。
もし、ソースコードが必要なら乗せます。
453:デフォルトの名無しさん
09/08/15 00:34:37
>>438が釣りなのかどうか判断つかん
454:デフォルトの名無しさん
09/08/15 08:02:56
>>452
必要に決まってるじゃん。
codepad
URLリンク(codepad.org)
ここで。
455:デフォルトの名無しさん
09/08/15 14:37:26
C++のサンプルコードが載ってるデザインパターンの本で良書あります?
456:デフォルトの名無しさん
09/08/15 15:43:32
>>451
VC6のころは必須だった。 今は別になくてもいい。
457:デフォルトの名無しさん
09/08/15 17:39:41
ゲーム内に存在するユニット(プレイヤー、モンスター、障害物など)にユニークIDを付けたいんだけど
アドレスをintにして返すだけの基底クラスを継承させれば問題ないかな?
458:デフォルトの名無しさん
09/08/15 17:48:24
アドレスをハッシュにするのはよくある手段だな
ポインタ型のサイズが変わったときにちょっとハマるかもしれんから
ハッシュ同士を==,!=で比較する以外の使い方をするときには注意が必要になるだろう
できれば専用の型でラップして使うべきだろうな
459:デフォルトの名無しさん
09/08/15 17:56:05
intptr_tなりUINT_PTRなりをtypedefしてxxx_IDとして用いれば大丈夫だろうね。
460:デフォルトの名無しさん
09/08/15 18:26:48
>>455
独習C++デザインパターンかなぁ。この手の本は殆どがJavaで書かれてるからC++の本は少ないな。
461:デフォルトの名無しさん
09/08/15 19:14:22
「Java謎+落とし穴」という書籍の中でC++はリフレクションが弱い、との記述があったのですがこれは事実でしょうか?
かなり古い本なので最近のC++のリフレクション周りについて知りたいです。
できればJava、C++、C#辺りのリフレクションの違いについて教えて頂けると有り難いです。
よろしくお願いします。
462:デフォルトの名無しさん
09/08/15 20:03:39
>>461
弱いどころか無いに等しいよ。
リフレクションが必要ならインタプリタ言語にまかせよう。
463:デフォルトの名無しさん
09/08/15 20:06:02
C/C++で、
aa(), bb(), cc()
とした場合、この式の評価順序は
aa()が最初で次がbb()で次がcc()
ということは仕様で保証されていますか?
関数の引数の評価順序は保証されていないということだそうで。
464:デフォルトの名無しさん
09/08/15 20:15:32
>>463
この場合はコンマ演算子だから、左から右へ評価されることは保障されており、かつ値は最後に評価したものですね。
465:463
09/08/15 20:53:28
>>464
ありがとうございます。
ではそれに依存してコーディングしていきたいと思います。
466:461
09/08/15 21:07:09
>>462
ありがとうございます。
クラスやメソッドを実行時に決定したい場合などは諦めるしかないのでしょうか?
あるいはそういう需要があること自体、設計がおかしいという判断になるのかな
467:デフォルトの名無しさん
09/08/15 21:11:00
>>466
> クラスやメソッドを実行時に決定したい場合などは諦めるしかないのでしょうか?
C++には継承と仮想関数がありますからそれをうまく使ってください。
> あるいはそういう需要があること自体、設計がおかしいという判断になるのかな
if(flag)
{hoge.foo();}
else
{hoge.bar();}
こんなことは良くやりますけど。
あとはC++には関数ポインタもありますねぇ。
468:デフォルトの名無しさん
09/08/15 21:21:59
場合分けはさすがに無いだろw
まぁJavaでもClassクラスなんて使うのは最終手段だし設計を見直すのが吉だろうな
469:デフォルトの名無しさん
09/08/15 21:36:03
>>466
ポリモーフィズムがあるんだから利用しない手はないだろ。
実行時に型を決定したいなんて結構あるんじゃないか?
それがあってるのかどうかは知らんが。
470:デフォルトの名無しさん
09/08/15 22:20:55
C++プログラミングの筋と定石 (新紀元社情報工学シリーズ)
この本を読むのじゃ。
お前様のほしい情報が載っておるぞ。
あたら高度だけど。
471:デフォルトの名無しさん
09/08/15 22:33:03
滅茶苦茶古い本だぞそれ
472:デフォルトの名無しさん
09/08/15 22:57:12
古いけどナイスガイ
473:デフォルトの名無しさん
09/08/15 22:58:16
宣伝は他でやれ
474:デフォルトの名無しさん
09/08/15 23:01:16
宣伝だと思うなら無視すればいいじゃない。
宣伝しなくても名著だからみんな知ってるだろうし。
MoreEffective C++でも推薦されてたくらいの本だから
もちろん、君も知ってるよね?
475:デフォルトの名無しさん
09/08/15 23:23:04
あぁ原書は有名だけど翻訳が糞過ぎて読む気無くなったなそれ
476:デフォルトの名無しさん
09/08/15 23:25:28
どう見ても宣伝だわw
477:デフォルトの名無しさん
09/08/16 19:02:57
Baseクラスと、Baseをpublic継承したDerivedクラスがあります。
Derived hoge;
void foo(const Base&);//1
void foo(const Derived&);//2
となっている時、
foo()//1にhogeを渡したいのですが、どうすればよいでしょうか?
foo(static_cast<Base>(hoge));
だと無駄なテンポラリオブジェクトができてしまいますか?
478:デフォルトの名無しさん
09/08/16 19:41:38
// 値型のキャストだとコピーになるが、参照型でキャストすればコピーは発生しない
foo(static_cast<Base&>(hoge));
479:477
09/08/16 20:00:14
>>478
ありがとうございます。
ということは
Derived hoge;
が
const Derived& hoge = ...
であった場合は
foo(static_cast< const Base& >(hoge));
であっていますか?
480:デフォルトの名無しさん
09/08/16 20:01:39
C++でもassertって使うの?
481:デフォルトの名無しさん
09/08/16 20:15:06
#include <iostream>
using namespace std;
class Base{};
class Derived : public Base {};
void foo(const Base&){cout << "Base" << endl;}
template<class T>
void foo(const T&){cout << "T" << endl;}
int main()
{
Derived hoge;
foo(hoge);
return 0;
}
これでTが表示されるのは、
基底クラスへキャストするよりもテンプレートの方が優先される
ためだと思いますが、
この動作はC++の仕様でしょうか?
482:デフォルトの名無しさん
09/08/16 20:37:48
>>480
使うよ。用途はCと一緒でしょ。
483:デフォルトの名無しさん
09/08/16 21:28:27
C++です。
ヘッダファイルに書かれた関数テンプレートを
どんなときにinline宣言すべきか分かりません。
明らかに短い時はinline宣言しますが、
どのあたりの長さからしない方がよくなるのでしょうか?
484:デフォルトの名無しさん
09/08/16 21:35:07
ほっとけばinline
485:483
09/08/16 21:38:31
>>484
ええと、ヘッダファイルに書かれた関数テンプレートでも
明示的にinlineと書かない限り
(コンパイラによる最適化以外では)
inlineにはならないと思っているのですが。
486:デフォルトの名無しさん
09/08/16 21:50:02
異なるcppファイルに同じヘッダを読み込んで、各々のオブジェクトファイルで実体化されたら
リンク時にカチ合うじゃないか。
487:デフォルトの名無しさん
09/08/16 21:51:34
>>485
Efficient C++(Effectiveじゃないよ)の9章と10章に載ってなる。
具体的には130ページに、行数(命令数か)と呼び出し頻度で決めなさいと書いてある。
あと、見た目のコード自体は短くても実際はそうでもないことがあるから注意な。
まあ、コンパイラの判断でインライン展開されるからinlineと書いたところで
必ずインラインになるとは限らんしな。
488:デフォルトの名無しさん
09/08/16 21:52:23
すみませんが構造体配列の初期化で全てを同じ値にしたいのですが上手くいきません
どこが間違っているのでしょうか?
struct Piece_t {
int Kind;
int State;
};
struct Piece_t Piece[(MAX_MASS + 2) * (MAX_MASS + 2)]={3,0};
489:デフォルトの名無しさん
09/08/16 22:01:08
初期値は必要な数だけ与えてやらんとだめ
struct Piece_t Piece[5] = { {3,0}, {3,0}, {3,0}, {3,0}, {3,0}, };
490:デフォルトの名無しさん
09/08/16 22:09:04
では要素数が可変の場合にはそれを上回る数を
あらかじめ用意するしかないのでしょうか?
491:デフォルトの名無しさん
09/08/16 22:14:24
forで回すなり、memsetするなりあるだろう。配列なら要素数も分かるだろ?
492:デフォルトの名無しさん
09/08/16 22:17:25
ああ…forで回せば良いのか…
疲れてたみたいです
アドバイス有難うございました
493:483
09/08/16 22:50:53
>>486
普通の関数ではそうですが、
関数テンプレートの場合はその限りではないと
記憶しています。
>>487
ありがとうございます。
Efficient C++は読んだこと無いので、
今度探ってみます。
494:デフォルトの名無しさん
09/08/17 00:31:52
いつもデバックなしで実行しているのですが、
リリースモードで実行するにはどうしたらいいですか?
495:デフォルトの名無しさん
09/08/17 00:35:43
まず、使っているコンパイラーを(ry
496:デフォルトの名無しさん
09/08/17 01:33:32
Intel C++コンパイラです。
497:デフォルトの名無しさん
09/08/17 10:20:38
>>496
使っているIDEのマニュアルでも読んでください。
498:デフォルトの名無しさん
09/08/17 11:07:11
if(flag_1)
return val_1;
else if(flag_2)
return val_2;
else if(flag_3)
return val_3;
これと
if(flag_1)
return val_1;
if(flag_2)
return val_2;
if(flag_3)
return val_3;
これはどちらが速いのでしょうか?
499:デフォルトの名無しさん
09/08/17 12:04:51
>>498
return文を使って関数から抜け出しているので、前者も後者も比較回数は同じになる。
また、return文を使って関数から抜け出しているので、前の条件が偽であるときしか後の条件を判断されないことになる。
よってelseを使う必要はない。
よって後者でおk。
ただ、速さが変わるかどうかは俺にはわかんね。
500:デフォルトの名無しさん
09/08/17 12:15:09
繰り返し文でその都度printfで結果を表示させたいのですが
古いほうから消えていきます。結果を全部残すにはどうすればいいですか
501:デフォルトの名無しさん
09/08/17 12:16:12
>>500
リダイレクトする。
502:デフォルトの名無しさん
09/08/17 12:28:15
>>498
少なくとも私は後者の方が速くタイプできました。
503:デフォルトの名無しさん
09/08/17 12:36:21
>>501
なるほど。それでググったら出来ました。ありがとうございます
504:498
09/08/17 12:45:18
>>499
ありがとうございます。
速さは・・・elseがない方がむしろ速いとか、
あった方が処理が分かりやすくて最適化しやすいとか
同一のasmに落ち着くから関係ないとか色々と考えられそうです。
ま、あまり気にしないのが正解なのでしょうか。
BoostやGCCの実装とかで同じような物があるかどうか探してみたいです。
505:デフォルトの名無しさん
09/08/17 13:32:44
>>504
こっちに似たような話があるから気になるなら参加したら?
【初心者歓迎】C/C++室 Ver.67【環境依存OK】
スレリンク(tech板)
506:504
09/08/17 14:21:07
>>505
みんな同じようなこと考えるんですね。
行ってみるかもしれません。
ありがとうございます。
507:デフォルトの名無しさん
09/08/17 14:43:09
えっ?
508:デフォルトの名無しさん
09/08/17 15:13:20
タイピングを楽にする為だけの#defineもtypedefにしたほうがいいのかな
テンプレートっぽいことができるのと#undefがある分有利な気がするんだけど
509:デフォルトの名無しさん
09/08/17 15:56:43
>>508
typedefに代えていけるならお薦め。
> テンプレートっぽいことができるのと
そりゃtypedefに代えていけないってことじゃん。
> #undefがある分有利な気がするんだけど
どうして?むしろ不利だろ?
typedefなら同名の物とかち合ったらコンパイルエラーになれる。
510:デフォルトの名無しさん
09/08/17 21:16:01
非同期ファイル読み書きには
Win32APIのCreateFileしか方法ないの?
511:デフォルトの名無しさん
09/08/17 21:20:56
スレッドを使ってみるとか
512:デフォルトの名無しさん
09/08/17 22:33:25
>>498
gccでコンパイルすると同じになったからどっちも同じ
513:デフォルトの名無しさん
09/08/19 09:21:13
C++でCGIをはじめました。POSTで日本語を受け取った場合URIエンコードされますがデコードのやり方が分からず困っています。
例えば あ であれば
%82%A0になりますが
どのようにすれば元の文字に戻せるのか
わかる方いましたらよろしくお願いします。
ソースを頂けたらなおありがたいです。
514:デフォルトの名無しさん
09/08/19 09:37:31
スレチな気もするが…
URLリンク(www.kinet.or.jp)
515:デフォルトの名無しさん
09/08/19 10:20:59
.lib+.hで提供されているライブラリをまとめて適当な名前空間に入れたいんですが
なにかいい方法はないでしょうか
516:デフォルトの名無しさん
09/08/19 11:26:18
>>515
.libだと真っ当な方法では無理。
せいぜいがDLLに隔離して新しいインターフェースを丸ごと書き直すぐらいかと。
517:デフォルトの名無しさん
09/08/19 12:10:07
514さん
大変参考になりました。
私もスレチかと思いましたがそれでも 教えて頂けて本当に感謝しております。ありがとうございました。
518:デフォルトの名無しさん
09/08/19 14:18:30
インターフェースに宣言されているメンバ関数をコンストラクタのように連鎖的に呼び出したい場合
スコープ解決して普通に呼び出しを繰り返すすほかになにかやり方はありますか?
519:デフォルトの名無しさん
09/08/19 16:37:47
>>518
具体的にどういうコードで問題になってるのかわからん。
インタフェースって抽象クラスのことか?
520:デフォルトの名無しさん
09/08/19 17:19:45
pthreadについて。
pthread_createで作成したスレッドを、スレッド外から終了させたいのだが。
名前的にはpthread_t指定してpthread_killぽいと思ったんだが、うまくいってないぽ...
どうすればいいの\(^o^)/
521:デフォルトの名無しさん
09/08/19 17:25:29
signal(pthread_killの第二引数)は何を指定した?
まさか0じゃないだろうな?
int pthread_cancel(pthread_t)じゃ駄目?
522:デフォルトの名無しさん
09/08/19 18:31:55
0さーせんwwwwww
cancelで終了した!
さんくす
523:デフォルトの名無しさん
09/08/19 20:17:23
ofsream.flush()でファイル出力時に
ディスクの容量オーバーの場合エラーにする事てできます?
例外がスローされずにフリーズしてしまいます…
524:デフォルトの名無しさん
09/08/19 20:22:21
>>523
OSなどの環境は?
525:デフォルトの名無しさん
09/08/19 21:40:41
>>524
すいません、linux + c++ + gcc です。
プログラムからシェルコマンドでディスク容量の結果とって調べる
とかは可能です?
526:デフォルトの名無しさん
09/08/19 22:27:51
>>523
ofstreamの bad()/fail()/good()あたりのメンバ関数で判断できるんじゃないかな。
527:デフォルトの名無しさん
09/08/19 22:43:20
APIを探してくるしかなさそうだな。
528:デフォルトの名無しさん
09/08/19 23:56:33
>>523
C++のストリームクラスで例外が投げられるようにするには、
予めメンバ関数exceptionsで例外を投げるよう指定する必要があるよ。
529:523
09/08/20 14:19:06
レスおそくなりすみません。
一応解決しました、ブロックが全て埋まりますが、
>>526のfail()で判定できました。
ありがとうございました。
530:デフォルトの名無しさん
09/08/20 18:46:59
メンバ関数の名前ってインスタンスが主語になるように名付けたほうがいいですか?
531:デフォルトの名無しさん
09/08/20 20:10:13
大抵そうじゃない?
532:デフォルトの名無しさん
09/08/20 20:18:46
>>530
is_invalid()
とかね。
むしろそうじゃないのってなに?
533:デフォルトの名無しさん
09/08/20 20:36:17
getter/setterとしてのgetName()は、
インスタンスを主語にするんなら、returnName()じゃね?
534:デフォルトの名無しさん
09/08/20 21:01:57
>>533
あーなるほど。
535:デフォルトの名無しさん
09/08/20 21:50:52
itsName()
536:デフォルトの名無しさん
09/08/20 23:50:26
>>533
インスタンスに対する命令語だから、Set / Get でいいのでは?
そうなるとこの場合、主語は無しだけど。
protected / private メンバ関数だと自動詞、
public メンバ関数だと他動詞になりやすくない?
537:デフォルトの名無しさん
09/08/20 23:58:53
>>536
命令だとしてもインスタンスに対してGetってのは
やっぱおかしくない?
ちなみに英語では命令文の主語は通例省略されるだけでありyouだ。
とりあえず標準C++で考えて見ると
C++文字列(std::string)
URLリンク(www.cppll.jp)
C++ ベクタ(std::vector)
URLリンク(www.cppll.jp)
例が悪い気がしてきた(笑)
538:デフォルトの名無しさん
09/08/21 00:17:06
イテレータが分からなかった時の
begin()とかend()とかの怖さといったら。
539:デフォルトの名無しさん
09/08/21 02:53:16
C++の設計について質問です。
たとえば、ゲームの当たり判定を計算する関数郡を内包した「当たり判定計算クラス」を作り、
その計算クラスを扱う「当たり判定制御クラス」を作ったとして、
当たり判定制御クラスに計算クラスのオブジェクトアドレスを渡す際に、
生成もすべて任せるべきでしょうか? それとも、生成はまた別のクラスで行い、その後に渡すべきですか?
どうも調べていると、「生成は別にすべき」とよく目にするのですが、
この場合、「計算クラス」を使うのは「制御クラス」以外にありえず、
いちいち別で生成するメリットが見出せません。
オブジェクトを生成するファクトリクラスなる概念が出てくるのですが、
これというのは自機や敵機という具体的なオブジェクト以外にも、
こういった計算クラスのオブジェクトの生成も担うべきなのでしょうか
540:デフォルトの名無しさん
09/08/21 03:17:07
>計算クラスのオブジェクトアドレスを渡す際に、生成
何を生成?
541:539
09/08/21 05:09:32
説明不足でした、すみません
CAtari* a; ←アドレスなので宣言の時点では生成されていない
a = new CAtari( 引数 ); // コンストラクタを呼び出してオブジェクト生成
↑これを、制御クラスで行うか、生成クラスを作って行うか?
制御クラスで行う場合、
CControlAtari* b;
b = new CControlAtari( a, 他引数 ); // コンストラクタに計算クラスオブジェクトを渡す
↑このようにして、bのコンストラクタでaの生成を行います
aの解放もbのデストラクタで行います
542:デフォルトの名無しさん
09/08/21 08:58:05
特別な理由でもない限りオブジェクトファクトリー使う必要はないよ
ただ、newしてないポインタを渡すぐらいなら
呼び元でnewしたほうがいいのでは
543:デフォルトの名無しさん
09/08/21 09:03:57
どうしたらここで言ってることが理解できるようになりますか?
544:デフォルトの名無しさん
09/08/21 09:21:39
コードを沢山書いて、人のコードも沢山読んで、
んで頑張る。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5029日前に更新/231 KB
担当:undef