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
コードを沢山書いて、人のコードも沢山読んで、
んで頑張る。
545:デフォルトの名無しさん
09/08/21 09:43:44
当たり判定なんて座標渡して結果を受け取るだけでいいんじゃないのか?
546:デフォルトの名無しさん
09/08/21 12:32:25
private:int m_xがあるとして
get_x()よりpublic:const int& xのほうがクライアントコードも短いしいいんじゃないですか?
547:デフォルトの名無しさん
09/08/21 12:46:48
それするならpublic: int xでいいじゃない
548:デフォルトの名無しさん
09/08/21 12:57:07
>>546
const_castで値が変更できそうなのは見なかったことにしても
メモリの無駄じゃないかな
549:デフォルトの名無しさん
09/08/21 13:35:25
実行中に自身のクラス名(C++の)を取得する簡単な方法ってある?
550:デフォルトの名無しさん
09/08/21 13:39:28
typeid(*this).name()
551:デフォルトの名無しさん
09/08/21 13:41:00
template<int i> ~~
ここでi=1~8までならコンパイル可能
それ以外だとエラー(できればメッセージつきで)
という具合にできますか?
552:549
09/08/21 13:50:47
>>550
ありがとう。
553:デフォルトの名無しさん
09/08/21 13:58:23
>>551
boost::mplとかテンプレートメタプログラミングとかBOOST_STATIC_ASSERTで検索。
554:デフォルトの名無しさん
09/08/21 14:16:09
>>551
#include <boost/mpl/int.hpp>
#include <boost/mpl/and.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/comparison.hpp>
namespace mpl = boost::mpl;
template <int X>
struct S {
BOOST_MPL_ASSERT_MSG
((mpl::and_<
mpl::less_equal< mpl::int_<1>, mpl::int_<X> >,
mpl::greater_equal< mpl::int_<X>, mpl::int_<8> > >::value),
X_SHOULD_BE_GE_1_AND_LE_8, (mpl::int_<X>));
};
int main()
{
// S<9> s9;
// S<8> s8;
S<0> s0;
return 0;
}
ASSERT_MSGがそのものズバリですな
最後の引数に任意の型を放り込めるんで、
型タプル(?)と併用して複数の型を一括inspectとかお手のものです
555:デフォルトの名無しさん
09/08/21 15:18:43
テンプレートメタプログラミングって
本当に使える人って天才だと思うんだけど。
すごくね?
俺だったら気が狂いそう。
556:デフォルトの名無しさん
09/08/21 15:44:25
シングルトンって継承しない前提のものなの?
557:デフォルトの名無しさん
09/08/21 20:19:35
>>539
別にするべきって言うか、別にしないと当たり判定クラスが
何のクラスか分からなくなってくると思うよ。
当たり判定クラスしかオブジェクト持ってないと
たとえば、自キャラの入力受付とか、敵キャラの生成・死亡管理とかも
当たり判定クラスでやらざるを得なくなる。
558:デフォルトの名無しさん
09/08/21 20:31:02
>>557
え?
入力受付オブジェクトとか、敵キャラオブジェクトをどこかで持てばいいだけじゃないの?
当たり判定オブジェクトが入力受付オブジェクトとか、敵キャラオブジェクトを持つ意味ないでしょ?
559:557
09/08/21 20:49:28
あー、ごめん。完全に勘違いしてた。
自機、敵機のオブジェクトのことだと思ってた。
計算クラスと制御クラスの違いが良く分からん。
計算クラスは関数オブジェクトか何かか?
だとすれば計算クラスは別の生成で良いんじゃない?
計算クラスの関数そのモノを継承して処理方法かえれるし。
当たり判定による難易度調整もできるんでない?
560:デフォルトの名無しさん
09/08/21 21:17:01
メディエータにcreateHogeColleagueみたいなメソッドを作るべきかどうかってことなら
それよりファクトリクラスをほかに作って、そのインスタンスをメディエータにもたせればいいんじゃないかな
561:デフォルトの名無しさん
09/08/21 21:50:14
なるほど。生成を別にしとけば、処理のさし替えをする際に
生成クラスにだけ注目できるメリットがありますね
562:デフォルトの名無しさん
09/08/22 22:54:54
URLリンク(www1.axfc.net)
こういうことって安全なの?
563:デフォルトの名無しさん
09/08/22 23:05:55
大丈夫だよ。
#include っていうのは単にそこに文字列が展開されるだけだから
IntListクラスの宣言
IntListクラスの利用
IntListクラスの定義
っていう順番になってるだけ。
564:デフォルトの名無しさん
09/08/23 21:12:28
staticメンバ変数は静的メンバ変数と言いますが、
constメンバ変数は何メンバ変数と言えばよろしいでしょうか?
565:デフォルトの名無しさん
09/08/23 21:31:56
白米を指して麦の種類を聞いているみたいな
566:デフォルトの名無しさん
09/08/23 21:40:18
>>565
?
567:デフォルトの名無しさん
09/08/23 21:54:01
“変”数
568:デフォルトの名無しさん
09/08/23 22:41:21
変なの
569:デフォルトの名無しさん
09/08/24 00:25:11
仮に const を定数メンバ変数などと名前をつけたとして
では static const なメンバ変数はなんと呼べばいいのか。
それはつまり性的定子メンバであり
愛のコリーダである、と。
570:デフォルトの名無しさん
09/08/24 00:29:16
今作っているプログラムからffmpegを呼び出したいのですが
なんてググればいいですか?
571:デフォルトの名無しさん
09/08/24 00:32:29
system
572:デフォルトの名無しさん
09/08/24 01:10:51
どうもです
573:デフォルトの名無しさん
09/08/24 02:23:05
ShellExecuteEx()の方がいいだろ
574:デフォルトの名無しさん
09/08/24 02:37:30
なにその非標準関数。
575:デフォルトの名無しさん
09/08/24 06:52:17
>>573
すげー環境依存w
まあsystemも同じようなものか。
576:デフォルトの名無しさん
09/08/24 11:59:27
template<class T>
class C {
};
template<>
class C<int> {
void F() {
}
};
としたときC<int>::F()でint直記述ではなくTの値を使いたいのですが、方法はありますでしょうか?
よろしくお願いします
577:デフォルトの名無しさん
09/08/24 12:24:16
typedef int T;
578:デフォルトの名無しさん
09/08/24 14:23:34
特殊化しといてT使いたいとか意味がわからんですよ
579:デフォルトの名無しさん
09/08/24 14:37:37
興味のない方はすみません(スルーお願いします。)
新しくコンテストを来年開きたいと思っています
プログラマー(ゲーム・ツール・)の方は
スレリンク(tech板)l50
のスレに来てもらえるとうれしいです。
運営も募集しています。
↓のような感じでコンテストを開始する予定です。
URLリンク(219.113.110.143)
580:デフォルトの名無しさん
09/08/24 17:50:57
template<typename T>void F(){}
template<typename T>class C{template<>friend void F<T>();};
template<>class C<int>{template<typename T>friend void F();};
みたいな事したいって話?
581:デフォルトの名無しさん
09/08/24 19:31:36
クラスAのインスタンスの参照をもっているクラスBのインスタンスが複数あるとき
Aの寿命がすべてのBより長いことを保障したい
shared_ptr以外にいい方法はありますか
582:デフォルトの名無しさん
09/08/24 21:18:06
>>581
なぜshared_ptrじゃ不満なのだい?
583:デフォルトの名無しさん
09/08/24 22:06:32
>>578
複数箇所に同じ定数値を記述する手間を省きたかったので
>>580
目的としてはそれに近いですがfriendは使いたくないです
アクセスする方法はなさそうですね、ありがとうございました
584:デフォルトの名無しさん
09/08/25 18:00:06
32ビットマシンでコンパイルしたバイナリは16 64ビットマシンだと動かないんですか?
585:デフォルトの名無しさん
09/08/25 18:16:06
動くか動かないかは、コンパイルしたマシンで決まるわけではありません
586:デフォルトの名無しさん
09/08/25 21:53:02
>>581スタティックに保障したいということならば、構造化を考えればいい。
スコープの外側で宣言した変数の参照をスコープ内だけで使用するのであれば
寿命の関係はスコープの外側>スコープの内側になる。C++の参照はこれに則っている。
587:デフォルトの名無しさん
09/08/25 23:43:19
質問っす
double d;
~dを使った計算~
int i = (int)(d * 32767.0);
てな計算があったんですけどこれの意味わかる方いらっしゃらないでしょうか?
32767という数字からしてただのかけ算じゃない気がするのです。
588:デフォルトの名無しさん
09/08/25 23:50:06
URLリンク(www.google.co.jp)
でパッと眺めて使われているのはRAND_MAX関係での割り算と
あとは座標関係が多いようだが、さて。
589:デフォルトの名無しさん
09/08/25 23:52:49
>>587
その行だけ見たら「ただのかけ算」としか言いようがないぞ。
590:デフォルトの名無しさん
09/08/26 00:09:11
何かイデオムでもあるのかと思ったのですがそういう訳でもないみたいですね
もう少し自力で調べてみます
591:デフォルトの名無しさん
09/08/26 01:28:09
文字変数aに『b』という文字、文字変数bに『c』という文字を代入して、変数aとcを使って、『db』と出力するプログラムを作成せよ
#include<iostream>
using namespace std;
int main() {
char a = 'b';
char c = 'd';
cout << "db" << '\n';
return 0;
}
この問題これじゃダメなんですか?
592:デフォルトの名無しさん
09/08/26 01:45:18
g++先生に聞いてみたら、
> db.cpp: In function ‘int main()’:
> db.cpp:6: warning: unused variable ‘a’
> db.cpp:7: warning: unused variable ‘c’
unusedだって。
593:デフォルトの名無しさん
09/08/26 09:25:46
>>591
#include <iostream>
int main()
{
char a = 'b';
char c = 'd';
std::cout << char(a + 2) << char(c - 2) << std::endl;
return 0;
}
594:デフォルトの名無しさん
09/08/26 10:58:16
>>591
つ[変数aとcを使って]
595:デフォルトの名無しさん
09/08/26 11:08:55
> 文字変数bに『c』という文字を代入
これが
> 文字変数cに『d』という文字を代入
の誤記として
#include<iostream>
using namespace std;
int main() {
char a
char c;
a = 'b';
c = 'd';
cout << "db" << '\n';
return 0;
}
とすればどうだろうか
596:デフォルトの名無しさん
09/08/26 11:52:14
>文字変数aに『b』という文字、文字変数bに『c』という文字を代入して、
ふんふん。
>変数aとcを使って、
あれcどっから出てきてんねん。
>『db』と出力するプログラムを作成せよ
おいぃぃぃーーー!
という突っ込み待ち問題w
597:デフォルトの名無しさん
09/08/26 12:45:53
class foo{public:typedef shared_ptr<foo> sp;}
typedef shared_ptr<foo> spfoo;
どっちがいい?
598:デフォルトの名無しさん
09/08/26 18:39:31
namespace使おうぜ
599:デフォルトの名無しさん
09/08/26 19:37:45
namespaceとtypedefが関数内で使えるなんて
おじさん知らなかったよ
600:デフォルトの名無しさん
09/08/26 22:14:02
int main {
namespace A { enum U { a, b, c }; }
}
ってやったらエラーでたよ?
601:デフォルトの名無しさん
09/08/26 22:29:31
そりゃ出るだろ
602:デフォルトの名無しさん
09/08/26 22:33:50
>>599が「namespaceは関数内で使える」って言ってるのに
main関数内では使えないなんて!
603:デフォルトの名無しさん
09/08/26 23:48:29
>>595
ありがとうございます。つまり、>>594さんが言ってるのと合わせると、aとcっていうのを変数である、としてから、
作るって事なんでしょうか?
604:デフォルトの名無しさん
09/08/27 00:17:26
「何か質問してください」って泣いて頼むんだったら質問してやってもいいよ( ・ω・)y─┛~~
605:デフォルトの名無しさん
09/08/27 00:24:55
消えてください(´;ω;`)
606:デフォルトの名無しさん
09/08/27 00:58:12
関数の引数で要素数の分からない二次元配列を受け取るにはどうすればいいですか?
決まった要素数でなく、様々な要素数の二次元配列に対応させたいんですが
607:デフォルトの名無しさん
09/08/27 01:03:30
template<typename T,size_t T0,sizet T1>T func(T x[T0][T1]);
608:デフォルトの名無しさん
09/08/27 01:19:04
ごめんなさいCなんでテンプレートなしで
609:デフォルトの名無しさん
09/08/27 01:39:19
タスクシステムってようはコマンドパターンのリストみたいなもん?
610:デフォルトの名無しさん
09/08/27 02:27:50
配列とSTLリストについての質問です。
配列を配列のままアクセスする場合と、ポインタ型のリストに入れてアクセスする場合
かなりの差が出てしまうのでしょうか?
<具体例>
あるクラス Aがあるとします。
A a[1000]; //A型の配列a
list<A*> list; //Aのポインタ型リスト list
と配列とリストを作り、listには配列aを1000個すべて入れていきます。(順序は関係なく)
配列aとリストlistをそれぞれ始めから終わりまでアクセスする。
611:デフォルトの名無しさん
09/08/27 02:30:34
日本語が不十分でした。
かなりの差が出てしまうのでしょうか?
↓
かなり速度において差が出てしまうのでしょうか?
追記:低スペックにおいての場合です。
612:デフォルトの名無しさん
09/08/27 03:40:15
実際にやってみて比較すればいいだけじゃん。
613:デフォルトの名無しさん
09/08/27 06:46:01
>>610
その単純な使い方なら、配列のほうが早いだろう。
しかし、実際に使うときは、使い方と処理方法により変わる。
いわゆる、適材適所だ。
614:デフォルトの名無しさん
09/08/27 11:47:43
>>606
せめて C FAQ くらい読もうか。
URLリンク(www.kouno.jp)
615:デフォルトの名無しさん
09/08/27 12:08:51
先に書き込まれていたでござる
typedef unsigned long int size_t;
#if __STDC_VERSION__ == 199901L
int do_something_array(size_t row, size_t column, int array[][column]) {
for ( size_t i = 0; i < row; ++i )
for ( size_t j = 0; j < column; ++j )
(void)array[i][j];
return 0;
}
#else
int do_something_array(size_t row, size_t column, void *array) {
int *ary = array; size_t i, j;
for ( i = 0; i < row; ++i )
for ( j = 0; j < column; ++j )
(void)ary[i*column + j];
return 0;
}
#endif /* __STDC_VERSION__ == 199901L */
#define numberof(a) (sizeof(a)/sizeof(a[0]))
int main(void) {
int array[][3] = {
{1, 2, 3},
{4, 5, 6}
};
do_something_array(numberof(array), numberof(array[0]), array);
return 0;
}
行数詰めたのでめちゃくちゃ見にくい
616:610
09/08/27 12:25:36
>>612
比較してみたのですが、かなりの差が出てしまい…
(iが1000ほどで 配列が1ms、リストが9msほど)
どこか間違いでもあるのかと疑っていましたので…
>>613
具体的には a[i].Exec などのように同じ処理をさせるのです。
配列、リスト、共に順序に意味など持たず
できるだけ処理速度(始めから最後まで)を重視したいと思っています。
また、頻繁にアクセスさせます(ゲームなので16msに一度程度)
このような単純な場合では配列の方が適切なのでしょうか?
for(int i=0;i<1000;){ a[i].Exec; }
617:デフォルトの名無しさん
09/08/27 12:29:28
>>616
本当はlistじゃなくてvectorを使うべきなんじゃないの?
618:610
09/08/27 12:59:54
>>617
Vectorも一度考えたのですが、まだ検証してみてはいません。
listで実装してしようと思った理由は、サンプルでそのような処理を行っていたためです。
(要素数の少ない処理でしたので差は体感できなかったのです)
>>610などの例では要素数が一定なのですが、
配列ではflagでExec()を実行するか否かを管理、リストでは実行するか否かを
EnableListとDisableList間で追加削除のやり取りをして、管理しています。
list<A*> EnableList; //実行したい配列のポインタのリスト
list<A*> DisableList; //実行したくない配列のポインタのリスト
Vectorが静的配列と同じくらいの処理速度でアクセスできれば
この処理について(追加削除などもあるので)適切だと思うのですが…
試していませんので分からない状態です。
619:デフォルトの名無しさん
09/08/27 17:48:18
constつきのメンバー関数への関数ポインタってどう宣言するんでしょうか?
620:デフォルトの名無しさん
09/08/27 17:49:29
すいません自己解決しました
621:デフォルトの名無しさん
09/08/27 18:52:55
個数が分かってるならリザーブしとけば十分速いんでないの?
622:610
09/08/27 22:27:21
Vectorで試してみました。
アクセスするだけならば、かなり早かったのですが
削除のために、iteratorをインクリメントしたりすると負荷が大きいみたいです・・・
iterator絡みの処理は負荷が高いんですね・・・初めて知りました。
>>621
リザーブすれば、速かったです。
ただ、削除・追加を行うには負荷が大きいようで
この事を考えると静的配列の方がいいのかなと・・・
623:デフォルトの名無しさん
09/08/27 22:37:42
>>610
もうなでもいいから静的配列でやれ
624:デフォルトの名無しさん
09/08/27 23:13:23
VC++ならvectorのiteratorはポインタ実装じゃなかったっけ
debugでやってないか?
625:610
09/08/27 23:24:20
>>624
>VC++ならvectorのiteratorはポインタ実装じゃなかったっけ
VC++ですが、勉強不足で理解できませんorz
削除は、iteratorが指しているものしかできないようなのでインクリメントしてました。
debugでやってます。Releaseとの違いがよくわからず、ずっとdebugでやってきているのですが
処理速度などの違いがでるものなのですか?
626:デフォルトの名無しさん
09/08/27 23:30:20
debugモードの時のSTLはエラーチェックがかかりまくるので相当遅い
releaseにするとコンパイル結果がiterator使ったときとポインタ使ったときで同じになる
まあ、なんだ、やってみろ
そしてEffectiveSTLでも読んでろ
627:610
09/08/27 23:38:06
>>626
やってきました。吊ってきますorz
でも、こんな恥ずかしい事を早めに教えてもらって助かりました。リアルじゃなくてよかった・・・
EffectiveSTL買って読んでみます。
628:デフォルトの名無しさん
09/08/28 02:26:31
なにこの<int>とかいうやつ。
適当に自前でリスト作って動かしたら速かったので変えたよ!
と、いう事態を何度か目の当たりにしたわ
629:デフォルトの名無しさん
09/08/28 03:05:28
上底を入力してください(単位cm)
3
下底を入力してください(単位cm)
4
高さを入力してください(単位cm)
5.0
台形の面積は17.5平方センチです
こんな感じのプログラムを作りたいんですが、
#include <iostream>
using namespace std;
int main() {
int input1,input2,input3;
cout << "上底(cm)を入力してください\n";
cin >> input1;
cout << "下底(cm)を入力してください\n";
cin >> input2;
cout << "高さ(cm)を入力してください\n";
cin >> input3;
return 0;
}
cin >> input3;から下が分かりません。
630:デフォルトの名無しさん
09/08/28 03:19:06
1つはfloatにするの忘れました。すみません
631:デフォルトの名無しさん
09/08/28 03:43:27
ほー、台形の面積の求め方というのは、ゆとり教育と関係があったのか。
URLリンク(www.google.co.jp)
632:デフォルトの名無しさん
09/08/28 19:35:59
>>587
固定小数点にしたかったんじゃないの?
633:デフォルトの名無しさん
09/08/28 19:49:13
>>632
俺もそれは思ったけどやるなら32768じゃない?
32767だとどうなるんだろ・・・
634:デフォルトの名無しさん
09/08/28 20:49:40
>>633
ここのベクトル演算のヨタ話みたいなことじゃない?
URLリンク(www.flightinfo.jp)
635:デフォルトの名無しさん
09/08/28 23:58:08
#if PROTOTYPES
#define P(p) p
#else
#define P(p) ()
#endif
int func P((int x, int y));
こんな気持ち悪いプリプロセッサを見つけたんですが、
これは何事でしょうか?
636:デフォルトの名無しさん
09/08/29 00:01:06
プリプロセッサを見つけたのかよ
637:デフォルトの名無しさん
09/08/29 00:22:15
>>635
ヘッダファイル見たことないのか?
見れば、似たようなものがあちこちで使われだろう
ANSI-C形式のプロトタイプ宣言をサポートしてないCコンパイラのため
638:デフォルトの名無しさん
09/08/29 01:26:49
int x = 3;
int* x = new int(3);
ってさ後者がヒープ領域で、前者はどこに領域確保されてるの?
似たような質問で
クラスのオブジェクトの宣言で(仮にStudentというクラスにnameというメンバがあったとして)
Student sato("佐藤");
Student* sato = new Student("佐藤");
ってできるけど、これってどう使い分けるの?
メンバにアクセスするとき 前者は sato.name ってできるけど
後者は (*sato).name or sato ->name じゃなきゃできないらしい本読む限り。
視覚的に前者の「sato.name」の方がわかりやすいんだけど。使い分けを教えてください。
よろしくお願いします。
639:デフォルトの名無しさん
09/08/29 01:34:33
>>638
ヒープを知ってるならスタックを知ってても良さそうにおもうけど、スタック領域。
newはヒープ領域に確保、単なる宣言はスタック領域に確保
640:デフォルトの名無しさん
09/08/29 01:36:09
スタックには置きたくなく、どうしてもアロー演算子がいやな場合はtypedefまたはエイリアスを作ればよいかな
641:デフォルトの名無しさん
09/08/29 01:37:17
typedefうそでした!
642:デフォルトの名無しさん
09/08/29 01:59:30
>>638
Studentのインスタンスを不定個作りたいときは後者じゃないと。
643:デフォルトの名無しさん
09/08/29 10:56:55
みなさんありがとう。
>>642
どういうこと? Student型の配列として扱い
Student* satous[] = {new Student("佐藤一郎") , new Student("佐藤次郎") };
ってやるためということ?
644:デフォルトの名無しさん
09/08/29 11:07:59
>>638 インスタンスの寿命で考えると分かる。
{
Student sato("佐藤"); //ここでインスタンスが作られる。
} //ここでインスタンスが自動的に消滅する。
Student* sato;
{
sato = new Student("佐藤");//ここでインスタンスが作られる
}//ここではインスタンスは消滅されない。
delete sato; //ここでインスタンスを消滅させる。
645:デフォルトの名無しさん
09/08/29 11:15:33
>>643
インスタンスを不定個作るということは、インスタンスを作る時と削除する時を
コンパイル時ではなく実行時に決めるから。
646:デフォルトの名無しさん
09/08/29 11:31:41
すみません
演算子のオーバーロードをした場合(例えば、operator()(int a)みたいな感じで)
クラス内部でアクセスするときは、operator()(10)とするのが良いのでしょうか?
それとも、(*this)(10)とするのが良いのでしょうか?
非常にくだらない質問だとは思いますが、よろしくお願いします
647:デフォルトの名無しさん
09/08/29 14:37:45
(*this)は式のままの書式で書けるメリットがある。
でも()は関数の形式だからどっちで書いても大差がないね。
thisを使うと最適化にはどういう影響が出るのかな?知ってる人教えて!
648:デフォルトの名無しさん
09/08/29 15:20:47
どっちでも変わらんように思うけど、識者に任せる
649:名無しさん@そうだ選挙に行こう
09/08/30 06:26:10
>>634
そういうことならありえるね
参考になったわありがとう
650:名無しさん@そうだ選挙に行こう
09/08/30 08:42:11
C++でJavaみたいにfinalメソッドを作ることはできませんか?
651:名無しさん@そうだ選挙に行こう
09/08/30 11:51:27
>>650
virtualをつけなかったら、finalになるんじゃないの?
652:名無しさん@そうだ選挙に行こう
09/08/30 11:54:12
継承エラーなクラスを作ることはできますよ
653:名無しさん@そうだ選挙に行こう
09/08/30 12:38:26
>>651-652
親クラスのポインタに子クラスを代入してるときにvirtualつけてないメンバ関数を呼べば
確かにそうなるかも知れないけど。
そうじゃなくて継承はさせたいけど特定のメンバ関数は上書きして欲しくない。
こういうのはC++では無理っぽいですか?
654:名無しさん@そうだ選挙に行こう
09/08/30 12:39:31
Boostにそれっぽいのはあったような
655:名無しさん@そうだ選挙に行こう
09/08/30 14:15:46
>>651
お・・・おまw
知ったかぶりするなよ。
656:名無しさん@そうだ選挙に行こう
09/08/30 16:30:44
>>647-648
ありがとう
取りあえずは見た目優先でも問題なしと言うことでいいんすかね?
657:名無しさん@そうだ選挙に行こう
09/08/30 18:11:22
変数を使う直前で宣言した場合よりも、スコープの先頭で宣言したほうが処理速度が速くなって
びっくりしました。
これって一般的なことなんでしょうか?
条件によっては速くなったり遅くなったりするものですか?
コンパイラ次第なんでしょうか?
今、使っているコンパイラはVC++コンパイラです。
658:名無しさん@そうだ選挙に行こう
09/08/30 18:14:09
一概には言えないが、そんなはずはないはず。
releaseでコンパイルしてCtrl+F5で実行しても?
659:名無しさん@そうだ選挙に行こう
09/08/30 18:18:18
while(true){
ClassA a;
}
とかやってるんじゃない?
660:657
09/08/30 18:30:52
>>658
Releaseコンパイルでそうなるんです。(DLLですので、実行時に別のアプリでそれを動かしてます)
>>659
いえ、forループには入っていますが、static intやstatic boolです。
クラスや大きな構造体を毎回初期化というようなことではないです。
不思議です^^;
661:名無しさん@そうだ選挙に行こう
09/08/30 18:37:27
とりあえずコードを(ry
662:名無しさん@そうだ選挙に行こう
09/08/30 18:38:54
>>660 ちょっとまて、おぬしスタティックと申したか?
663:名無しさん@そうだ選挙に行こう
09/08/30 18:59:19
座標について質問です
5*5マスの座標の一行目の一番左を(x1,y1)、右へ行くほど数字を大きくして一番右が(x5,y1)
二行目の一番左が(x1,y2)、一番右が(x5,y2)・・とします
そして自分が(x3,y3)にいて、前方を向いていれば
前方に2、左へ1の座標は(x2,y1)になりますが、右を向くと(x5,y2)になり、
後方を向くと(x4,y5)になります
一箇所だけならifやselectで条件分岐させるのですが、量が大きいのです
こういう時、この座標はどう計算すればよいのでしょうか?
664:名無しさん@そうだ選挙に行こう
09/08/30 19:06:48
三角木馬関数を使いなさい。
665:名無しさん@そうだ選挙に行こう
09/08/30 19:16:30
>>664
ありがとうございまかす
666:657
09/08/30 19:18:44
>>661
すみません、ちょっと複雑ですw
>>662
あ、はい、staticです・・・(?)
667:名無しさん@そうだ選挙に行こう
09/08/30 19:31:56
>>663
class Hoge
{
int x;//位置X
int y;//位置Y
int x0://向きx
int y0;//向きy
public:
void Hoge()
:x(0),y(0)
,x0(1),y0(0) //初期値は右向き
{
}
void forward()//進む
{
x+=x0;y+=y0;
}
void right()//右に回転
{
int atmp=x0;
x0=y0;
y0=-atmp;
}
void left()//左回転
{
int atmp=x0;
x0=-y0;
y0=atmp;
}
};
668:デフォルトの名無しさん
09/08/30 21:07:05
Stateパターンの方がよくね?
669:デフォルトの名無しさん
09/08/30 21:35:57
C#のインデクサと同じことをC++でやるテクニックってありますかね?
670:デフォルトの名無しさん
09/08/30 21:39:01
operator[]
671:デフォルトの名無しさん
09/08/30 21:56:30
>>666
ソースを貼れないなら自分で調べるしかない。
該当箇所にブレークポイントを打ってF5。止まったところでALT+8して逆アセンブルを比較する。
処理速度が気になるときは逆アセンブルを見るのが近道
672:663
09/08/30 22:25:34
>>664
すいません、ダメでした
>>663の前方に2、左に1のy座標を求めるために計算してみました
(120*π/180)でラジアンをだし、それを半径の長さ(1^2+2^2=5 ピタゴラスの定理でsqrt(5))
のsqrt(5)で割ってsinを出してみたところうまくいきません。どこが問題なのでしょうか?
↓のコードの結果は0.805573になります
#include <iostream>
#include <math.h>
#define PI 3.14159
using namespace std;
int main()
{
double deg = 120;
double rad = (deg * PI / 180.0)/sqrt(5.0);
cout <<sin(rad) ;
return 0;
}
>>667
ありがとうございます
アクションRPGに導入するとものすごいコードが短縮できました!
が、マスメ状ではうまく動きませんでした・・
673:デフォルトの名無しさん
09/08/30 22:56:24
>>672
高校から数学をやり直せ
中学かもしれん
674:デフォルトの名無しさん
09/08/30 23:00:36
sin()じゃどうあがいても1を超える事はないだろww
675:663
09/08/30 23:12:24
すいません、三角関数は当時理解してたつもりでしたがいざ使うとなるとロクに使えませでした
おとなしくifで分岐させつつやります
ありがとうございました。
676:デフォルトの名無しさん
09/08/30 23:14:34
>>675
いやまてまて、
三角関数とか忘れるものじゃないだろ。
数学の基礎中の基礎だぞ?
15歳のガキでも(理解しているかどうかは別として)一応ならうんだぞ??
677:デフォルトの名無しさん
09/08/30 23:20:33
いや公式も覚えてるんですよむしろ忘れるはずも無い
半径が1で
筆記体のsin・cos・tanの頭文字を使って
始点が分母終点が分子
URLリンク(www1.axfc.net)
この覚え方で忘れるはずも無いでしょう
ただこれを応用する力がなくなった、のか最初から無かったのか
前者だったはずなんだけどなぁ
678:デフォルトの名無しさん
09/08/30 23:26:51
90度ずつしか回転しないうちはif文でいいけど
将来3DCGを使っていろんな方向に微妙に角度を変えるときは必須だよ^^
679:デフォルトの名無しさん
09/08/30 23:28:02
>>677
>>672の問題点は、120degがどこから来たかだ。
680:デフォルトの名無しさん
09/08/31 00:00:17
こんな感じじゃよ。たぶん。これで、いかなる角度への移動も可能。
URLリンク(codepad.org)
681:デフォルトの名無しさん
09/08/31 00:08:20
ああなんだ回転行列か
682:デフォルトの名無しさん
09/08/31 00:13:25
>>680
お前何でそんなに優しいんだ!
惚れるぜ
683:657
09/08/31 01:48:19
>>671
分かりました。
ありがとうございます!
684:デフォルトの名無しさん
09/08/31 01:51:57
回天行列です。
685:デフォルトの名無しさん
09/08/31 10:07:38
そんな行列いやだー
686:デフォルトの名無しさん
09/08/31 17:01:07
10年ぐらい前に売られていたバージョンのC言語って今のプログラム組むのに使える?
対応できてるものかい?
687:デフォルトの名無しさん
09/08/31 17:15:08
C言語は10年前と何も変わってないよ
688:デフォルトの名無しさん
09/08/31 17:29:43
>>687
分かりました。
では、10年前のVisual C++で色々プログラム組んでみます。
ありがとうございます。
689:デフォルトの名無しさん
09/08/31 17:39:22
C言語とVisual C++が同じものだと思ってるのか? めでたいやつ
690:デフォルトの名無しさん
09/08/31 17:49:23
>>689
なんだ?
10年前のVisual C++と今の環境は同じじゃないのか?
691:デフォルトの名無しさん
09/08/31 17:58:03
こりゃまた、ずれたレスがきたな。日本語でOK な文だが。
まともに翻訳すると。
10年前の 「Visual C++」 と 「今の環境」 は同じか?
対象が違いすぎて俺には答えられないぜw
692:デフォルトの名無しさん
09/08/31 18:06:31
>>691
答えられないなら書くなよ。
日本語で丁寧に書くと
10年前のVisual C++の環境や扱い方と今のVisual C++の環境や扱い方は、同じじゃないのか?
だ。
693:デフォルトの名無しさん
09/08/31 18:10:41
ちがう
694:デフォルトの名無しさん
09/08/31 18:12:04
>>692
お前な、自分が間違ってる上に開き直ってえらそうだな、おいw
695:デフォルトの名無しさん
09/08/31 18:17:13
やっぱりソフトの購入からか。
>>694、どこが間違ってたんだ?
696:デフォルトの名無しさん
09/08/31 18:18:03
Cというプログラミング言語自体はそんなに変っちゃいないが、
Visual C++というMS製のアプリケーションは大幅に変わっている
697:デフォルトの名無しさん
09/08/31 18:23:10
>>696
アプリケーションがかなり変わってるのか、じゃソフトの買い替えからしないとダメだな。
サンクス。
698:デフォルトの名無しさん
09/08/31 18:24:52
10年前のVC++で作っても今の環境で動くよ、問題ない
しかし最新のVC++は無料版もあるからそっちのがいいと思うんだ
699:デフォルトの名無しさん
09/08/31 18:28:51
>>698
無料版のVisual C++なんてあるのか。
相当変わってるんだな。
試してみる。
色々ありがとう。
700:デフォルトの名無しさん
09/08/31 18:34:46
何にも知らないで何も調べないでプログラムを組むとか早速高いソフトを買うとか
絶対釣りだろ
701:デフォルトの名無しさん
09/08/31 18:42:14
>>700
10年前にC言語でプログラム組んだことあるし、その当時のプログラムの本は今でもあるよ。
しばらくの間お蔵入りになっててC言語の内容少し忘れてはいるけど。
702:デフォルトの名無しさん
09/08/31 18:47:08
10年前のOSで開発するなら、10年前の処理系が最適かも。
703:デフォルトの名無しさん
09/08/31 18:53:20
>>702
当時のバージョンのソフトがあるから今のPCにインストールして使ってみる。
あと、無料版も試してみる。
704:デフォルトの名無しさん
09/08/31 18:54:53
DLLでnewする場合はDLLでdeleteしないといけないらしいんですが
DLLでfactoryをnewしてそのインスタンスからcreateする場合もやっぱりDLLでdeleteしないとだめですか?
705:デフォルトの名無しさん
09/08/31 19:15:39
DLLとアプリケーションで、メモリ源が2つあると考えろ。
そして、その2つは扱い方は同じだが、返すべきところが違う。
DLL内のoperator deleteとアプリケーションのoperator delete、
どちらを呼び出して返却すべきかは、自分で考えろ。
706:デフォルトの名無しさん
09/08/31 19:47:44
メモリはもらったところへ返す
DLL側のnewでもらったメモリはDLL側のdeleteへ返す
EXE側のnewでもらったメモリはEXE側のdeleteへ返す
DLLもEXEもみんな別々にメモリ管理してる (場合がある) から
ごっちゃにするとメモリ管理が混乱して落ちる (かもしれない)
それはウチで管理してるメモリじゃないぜ、とかそんな感じ
EXEもDLLもみんな、使うメモリはどっか一個所で一元管理してやれば済む話なんだが
みんな自分勝手だからな
707:デフォルトの名無しさん
09/08/31 20:26:35
boost::shared_ptrを使うとカスタムデリータが確保した側のdeleteで自動的に開放してくれるから便利。
708:デフォルトの名無しさん
09/08/31 21:01:23
shared_ptrの類を使うとインスタンス管理で負けた気がする。
全くの個人的な了見で、使う人を批判する気は全くないが。
709:デフォルトの名無しさん
09/08/31 21:13:01
>>708
そんなこと言っていると
本当にインスタンス管理に(つーか他人の技術に)負けるぞ。
何事も新しいことは受け入れづらいものなのは分かるが。
710:デフォルトの名無しさん
09/08/31 21:16:38
shared_ptrを普通のポインタみたいに記号ひとつで使えればいいのに。Foo@ foo;とか
typedef std::tr1::shared_ptr< foo > sp_foo_t;とかするのめんどくさい
711:デフォルトの名無しさん
09/08/31 21:27:12
>>708安心しろ。それは杞憂だ。
shared_ptrを使うには循環参照を避けるクラス設計が必要になる。
それこそがインスタンス管理の勝利ではないか。
一度使い始めると雪崩的に使うようになるから。
712:デフォルトの名無しさん
09/08/31 21:29:52
>>710
そういうことはC++0xの設計段階で提唱するべきだったな。
713:デフォルトの名無しさん
09/08/31 22:49:07
>>710
using std::tr1::shared_ptr とすれば楽になる。
C++0xにはtemplate typedefができるらしいから sp<T>にでもtypedefすればいいんじゃないか
714:デフォルトの名無しさん
09/08/31 22:59:08
using sp = std::tr1::shared_ptr;
sp<hoge> sp_hoge;
0xだと↑みたいにできるらしいね。typedefより見やすいし良いと思う
715:デフォルトの名無しさん
09/09/01 14:25:43
inline int func(int x){
return x * x;
}
みたいなinline関数があるとすると、
a = func((int)(b - c));
は
a = ((int)(b - c)) * ((int)(b - c));
みたいになるんですか?
それとも、
int x = (int)(b - c);
a = x * x;
みたいになるんですか?
716:デフォルトの名無しさん
09/09/01 14:40:29
後者
マクロ展開と違って引数は1度しか評価されない
717:デフォルトの名無しさん
09/09/01 15:07:27
>>716
ありがとうございます。
718:デフォルトの名無しさん
09/09/01 17:58:52
>>713
彼はそんな程度は知っているだろ、たぶん。
彼が言いたいのはもうもっと言語仕様に
組み込んじゃえよってことじゃねぇか?
719:デフォルトの名無しさん
09/09/01 18:01:01
>>717
>>716の言う通り、一度である。
よって、例えばmaxテンプレートとmaxマクロでは
max( ++a, b );
がどうなるかが変わってくる。
720:デフォルトの名無しさん
09/09/01 18:24:52
>>719
715です。
これは確かにどちらなのかによって全然違いますね。
721:デフォルトの名無しさん
09/09/01 18:37:59
>>720
というかマクロで作ったら未定義の動作だろ。
*未定義の動作=インターネットのニュースグループ、comp.std.cやcomp.lang.cでは、未定義のコードを実行した結果「鼻から悪魔が飛び出しても仕様に反しない」というjoke が流行したことがありました。今でもたまにこのような表現を見ることがあります。
初級C言語Q&A(7)
URLリンク(www.st.rim.or.jp)
722:デフォルトの名無しさん
09/09/02 00:36:29
数字を四捨五入するにはどうすればいいんでしょうか?
723:デフォルトの名無しさん
09/09/02 00:38:06
JIS, ISO式四捨五入なら専用の関数がいる
724:デフォルトの名無しさん
09/09/02 00:40:44
四捨五入の意味を辞書で調べて、その通りにすればいいと思います
725:デフォルトの名無しさん
09/09/02 00:51:54
CをまともにやらずにC++をやろうとするのは無謀?
それなりに努力はするつもりなんだが、どうなんですか?
726:デフォルトの名無しさん
09/09/02 01:13:18
別にいいと思うよ。
Cでポインタを理解しておけば、C++でポインタを勉強する必要がなくなるとかそんな程度だし。
727:デフォルトの名無しさん
09/09/02 01:14:01
先にC++に慣れ切ってしまうと、後からではCではプログラムを組めなくなるんじゃないかという危惧がある
ゆとり教育とかいうと聞こえが悪いけど、なんかそんな感じ
でもいまどきC++が使えない環境ってのもそうそうないだろうとも思うわけで、
まぁ別にいいんじゃないか
無謀というほどのことはない
むしろSTLとか便利なライブラリのおかげでポインタをやたら使わずに済む分つまづくポイントは減ってるかもしんない
728:デフォルトの名無しさん
09/09/02 01:30:28
>>726 >>727
返答ありがとうございます
729:デフォルトの名無しさん
09/09/02 02:15:29
>>725
いやいきなりC++をやる事をオススメする
禿もそう言っているし
730:デフォルトの名無しさん
09/09/02 06:50:19
>>725
> それなりに努力はするつもりなんだが
この覚悟があるならC++で良いと思うよ。
731:デフォルトの名無しさん
09/09/02 06:55:07
Accelerated C++やC++プライマーを使うと良いでしょう。
732:デフォルトの名無しさん
09/09/02 12:33:11
ビジュアルCとビジュアルCじゃないCはどの程度の違いがありますか?
733:デフォルトの名無しさん
09/09/02 13:04:47
「ビジュアルCじゃないC」 とかじゃなくて具体的な製品名をあげてくれ
734:デフォルトの名無しさん
09/09/02 13:35:26
try catchで配列[]の添え字範囲外の例外をキャッチ出来る?
メモリのアクセス違反のキャッチと言うべきかな
735:デフォルトの名無しさん
09/09/02 13:42:33
>>734
これ?
URLリンク(msdn.microsoft.com)(VS.80).aspx
736:デフォルトの名無しさん
09/09/02 13:50:10
>>735
それっぽいけど
エラーの種類の判別方法がわからんね
調べてみます
737:デフォルトの名無しさん
09/09/02 14:16:12
>>733
ずびばせん……
例えばボーランド?というやつではどういう違いがありますか?
738:デフォルトの名無しさん
09/09/02 15:14:59
Borland C++Builder と Borland C++Compiler の2種類があるけど・・・
Borland C++Builder と Visual C++ はまったく異なる。
Borland C++Builder は Visual Basic みたいに部品ポトペタで開発していくスタイル。
Visual C++ はエディタでごりごりコードを書く開発スタイル。
Borland C++Compiler と Visual C++ はごりごりコードを書く点では変わらないけれど、
Borland C++Compiler には開発環境が付いておらず、
普通のテキストエディタ(メモ帳とか)でコードを書き、コマンドラインからコンパイラを使うことになる。
(いちおうベクターあたりを探せばフリーの開発環境がいくつか見つかる)
Visual C++ には豪華な開発環境が付いていて、ボタン一発でコンパイルでき、デバッガも組み込まれている。
ちなみにボーランド(の開発製品群)はエンバカデロに買収されました。
なので、たぶん Embacadero C++Builder とか呼ぶべき。
739:デフォルトの名無しさん
09/09/02 15:18:25
>>738
で、そのコードはCなの?
740:デフォルトの名無しさん
09/09/02 15:22:47
そもそも Visual C というのは無いから
Visual C++ のことだろうと推測した (C#のことだったらすまんね)
説明したのは書いてるとおり Visual C++ とボーランドなんとかというやつの比較
741:デフォルトの名無しさん
09/09/02 17:07:20
ははあ……なるほど
Cプラが使えるのには違いはないんですね!?
ありがとうございました!
742:デフォルトの名無しさん
09/09/02 21:45:07
hoge f(int a, int b, int c)
{
return hoge(a, b, c);
}
hoge h(f(1, 2, 3));
これだとコピーコンストラクタが無視されて、あたかも
hoge h(1, 2, 3);
のような挙動になるのは仕様で決められてる?
それともたまたまコンパイラの中の人が親切だっただけで?
743:デフォルトの名無しさん
09/09/02 21:57:59
>>742 仕様で許可されている。返り血最適化RVOという。
許可されているだけなので最適化されるかどうかは中の人次第。
744:デフォルトの名無しさん
09/09/02 22:08:24
下記の書についてです。
(1).ANSI C/C++辞典(URLリンク(www.amazon.co.jp))
(2).新ANSI C言語辞典(URLリンク(www.amazon.co.jp))
CだけでなくC++についても調べたいので(1)は買う予定でいます。
(2)は色々と評判に上がることが多いようなので迷ってるのですが、
・ (2)は(1)と重複している部分が結構あったりするのでしょうか。
・ (2)ではC++についてはまったく触れられていないのでしょうか。
・ 両方とも割と昔の本ですが、仕様の変更などで現在と異なる点はあるのでしょうか。
ご存知の方がいましたら教えていただきたいです。
745:デフォルトの名無しさん
09/09/02 22:29:39
C++は1998と2003年に改正されてるけど1996年の本でいいの?
いいんだ。あ、そう。
746:デフォルトの名無しさん
09/09/02 22:54:35
新のつかないほうのANSI C言語辞典を持っているけど、これは今でも使える。
まあ古い本なので、ワイド文字関係と誰も使っていないC99に関する事柄が抜け落ちているけど。
だから、新のほうもおそらくおすすめできると自分は思っている。
ANSI C/C++辞典は分からない。初版は図書館で見たことあるけど、これ3版だからノーコメント。
個人的には、C++の内容を辞典的に網羅するにはページ数が少なすぎるだろうというのが気掛かり。
そのアマゾンによれば590ページらしいが、C言語辞典ですら500ページ近くある。
(初版でもC言語辞典より小さな字で詰めて配置してあったとはいえ)
747:744
09/09/03 00:22:24
情報ありがとうございます
最近の本も探してみたのですが、評価が芳しくないものやパッとしないものが多くて…
古い本なので逆に図書館にあるかも知れませんね
近所の図書館をあたってみて、もしあれば中身を確認してみようと思います
748:デフォルトの名無しさん
09/09/03 02:00:47
今まで文字列の取り扱いは char * を使ってたのですが、そろそろ汎用性を考えたコードも
意識して書かないといけないかなとか思い始めてます。
ところがなんか TCHAR だの wchar_t だの LPTCSTR だのと色々とあって、どういう時に
どれを使えばいいというのが判りません
どういう考えで、どういう型を使うのが一般的なのでしょうか
749:デフォルトの名無しさん
09/09/03 02:38:19
char*でおk。
750:デフォルトの名無しさん
09/09/03 02:47:38
蒸し返すようだけどGET_SET_ACCESSORって要するに
「今は何もしない素通し処理にしておくけど、将来的に別の処理が入った時に
クライアントコードの書き換えが必要になるとまずいからとりあえずアクセサ
になってますよ」って意味じゃね?
必要になったら普通に書き直せばいいし、何もしてないです、ってのが一目で
分かるし、悪くないマクロだと思うが。
まぁ俺はマクロ嫌いだから極力使わないんで、これも使わないけど。
751:デフォルトの名無しさん
09/09/03 04:09:28
・いつか処理が変わるかもしれないからアクセサは常に作るべき
・次のフェーズで変更されることが分かっているからアクセサを作るべき
・必要になってから作るべき
という感じで意見がいつも割れるんだよ
752:デフォルトの名無しさん
09/09/03 04:24:39
ハイ!先生
「メンバは原則 public しといてゲッタセッタ必要になったら private に異動で十分」派です。
753:デフォルトの名無しさん
09/09/03 05:40:12
それ呼び出し側のコードが変わるじゃん
754:デフォルトの名無しさん
09/09/03 05:51:34
で?
755:デフォルトの名無しさん
09/09/03 05:54:39
>>752
それだとメンバ変数名を変えたくなっても変えられないな。
Get/Setでポリモーフィズムが使えないな。
>>750
単純な代入とかだったらGET_SET_ACCESSORでいいと思うし、
頑なに拒否する人を見て何が悪いのかと思ってたけど、
デバッガで見れないって言うのがね、ちょっと嫌かな。
756:デフォルトの名無しさん
09/09/03 06:26:37
そうやってアクセサとメンバ名の乖離が起こるわけですね。
ポリモーフィズムが使えないという点は全く理解できないので追加説明をしていただけると助かります。
757:デフォルトの名無しさん
09/09/03 06:46:09
>>753
変わって何か問題ある?
758:デフォルトの名無しさん
09/09/03 07:12:09
別に問題ないよ
759:デフォルトの名無しさん
09/09/03 10:22:49
書き換えるのが面倒
プロジェクト内の全ファイルから問題の箇所を一発で全部置換できるエディタを持ってるのなら気にする必要はない
760:デフォルトの名無しさん
09/09/03 12:47:14
wrproperty使ったほうがクライアントがすっきりうんこ
761:デフォルトの名無しさん
09/09/03 15:06:03
汎用的なライブラリでそんな作業しようと思うとぞっとする。
変数書き換えのタイミングも追いづらいし。
762:デフォルトの名無しさん
09/09/03 15:10:09
a* [2]
a[0] = new b[2]
これって可能?アクセス方法ってどうやるの?
763:デフォルトの名無しさん
09/09/03 15:31:20
不可能
764:デフォルトの名無しさん
09/09/03 17:50:35
プラスとマイナスをひっくりかえす関数ってありますか?
例えば5なら-5に、-9なら9に変えてくれる関数です
765:デフォルトの名無しさん
09/09/03 17:55:16
関数にするまでもない
a = -b;
とかで十分
766:764
09/09/03 18:00:34
本当だ、できました
ご親切にありがとうございました
767:デフォルトの名無しさん
09/09/03 19:31:38
1.f←これってfloatとして扱うってことですよね?
いま呼んでいる本に
double r = srcR * srcA + ( 1.f - srcA ) * dstR;
というコードがあるんですが
「1.0」(double型)じゃなくて「1.f」(float型)をつかう意味ってありますか?
srcR、srcA、dstR、はどれもdouble型です。
768:デフォルトの名無しさん
09/09/03 19:46:22
>>767 ありません。
769:デフォルトの名無しさん
09/09/03 20:02:16
もともと全部floatで書いていたコードを何かの理由でdoubleに直したときに
そこだけ修正し忘れた、とか
770:デフォルトの名無しさん
09/09/03 20:06:08
>>768-769
わざわざfloatにしてるから
何かしらメリットがあると思ったんですが
何もないんですね。
ありがとうございます。
771:デフォルトの名無しさん
09/09/03 20:19:58
>>767
何か勘違いしてそうだから念のためにいっておくと、
double の 1.0 は 1. と書くこともできる
float の 1.0f は 1.f と書くこともできる
772:デフォルトの名無しさん
09/09/03 20:23:02
shared_ptrに確保されたインスタンスがあったとして
そいつのweak_ptrを返すメンバ関数とかってどうやって実装してるの?
773:デフォルトの名無しさん
09/09/03 20:26:22
>>756
変数がpublicだったらアクセサを経由した取得にならないからだろ。
774:デフォルトの名無しさん
09/09/03 20:58:14
>>771
0付けなくても良かったんですね
ありがとうございます
775:デフォルトの名無しさん
09/09/03 21:13:34
>>772
shared_ptrとweak_ptrはインスタンスを直接保持するのではなく、インスタンスを管理するオブジェクトを経由して保持している。
weak_ptrは管理オブジェクトを参照すればインスタンスが有効かどうかが分かる。
776:デフォルトの名無しさん
09/09/03 22:08:14
wktk_ptr
kwsk_ptr
sneg_ptr
777:デフォルトの名無しさん
09/09/03 22:08:39
いや、なんていうか
sp->getThisWeakPtr();
みたいなことしたいんですけど無理なんですかね?
778:777
09/09/03 22:46:10
あ、自己解決したわ
779:デフォルトの名無しさん
09/09/03 23:32:43
使いたくもない敬語を無理に使ってるってことがよく分かる
780:デフォルトの名無しさん
09/09/04 02:37:31
?
781:デフォルトの名無しさん
09/09/04 13:18:09
1: char a[20];
2: char a[20]={0};
3: char *a = new char[20];
これらのうちでは
動作が軽い順で言うとどうなりますでしょうか?
782:デフォルトの名無しさん
09/09/04 13:40:41
1が最も軽く、3が恐らく最も重い
783:デフォルトの名無しさん
09/09/04 14:00:22
3は
delete[]a;もセットで考えないといけない。
784:デフォルトの名無しさん
09/09/04 14:18:13
>>782
なるほど。
1と2では、
初期化する場合としない場合とでやはり速度差があるのですね。
>>783
ありがとうございます。そうすると3は重そうですね。
ありがとうございました。
785:デフォルトの名無しさん
09/09/04 14:20:44
1.のコストは0なのだ。
786:デフォルトの名無しさん
09/09/04 15:20:48
C++のisoが定めた規格が
無償で(英語でもいいので)見られる
サイトを教えていただけますでしょうか?
787:デフォルトの名無しさん
09/09/04 15:39:02
C++のqueueについてなんですが、
queueで作ったデータ列を配列みたいに見るってできないんでしょうか?
front()で頭を見る以外の方法が分かりません…
788:デフォルトの名無しさん
09/09/04 16:00:37
>>787配列のように扱えないのがstd::queueのメリット。
配列のように使えるキューが欲しいならstd::dequeを使う。
789:デフォルトの名無しさん
09/09/04 16:02:12
>>786
iso 14882 2003 pdf - Google Search
URLリンク(www.google.com)
790:デフォルトの名無しさん
09/09/04 16:04:58
>786
C++についてはC言語ほど詳しいわけではないけど
ドラフトなら無償で手に入れることができたはずだったんだけど、なんか本家死亡中?
規格書の正式名称をどうたらこうたらで手に入れることができる
791:786
09/09/04 16:08:13
>>789-790
丁寧にありがとうございました。
助かりました。
792:デフォルトの名無しさん
09/09/04 16:14:52
>>788
分かりました。どうもです
793:デフォルトの名無しさん
09/09/04 17:11:55
全然別人ですが、
C99の規格は英語でいいのでどこかで手に入りませんか?
ググろうにも何でググればいいのか悩みます。
794:デフォルトの名無しさん
09/09/04 17:17:06
JISの規格票じゃだめなのか?
795:デフォルトの名無しさん
09/09/04 17:34:38
JISの規格は閲覧するのにとても苦労するので。
(標準のpdfリーダがadobeじゃ無いためです。)
796:デフォルトの名無しさん
09/09/04 17:50:34
n1124.pdfとか
797:デフォルトの名無しさん
09/09/04 17:55:47
>796
それはC0x Draft, N1124, 6 May 2005だな
798:デフォルトの名無しさん
09/09/04 17:57:26
どの版がいいの
799:デフォルトの名無しさん
09/09/04 18:09:13
ええと、一番普遍的な版がいいのですが。
そんな最先端のプログラミング技法には深入りするつもりもないので。
800:デフォルトの名無しさん
09/09/04 18:27:02
テンプラメタプログラミングなんてやってなんか得したことあった?
801:デフォルトの名無しさん
09/09/04 18:41:44
知的好奇心が満たされるw
802:デフォルトの名無しさん
09/09/04 18:49:15
>>800 似たような重複コードを書かなくてすむ用になる。
803:デフォルトの名無しさん
09/09/04 19:05:32
(プラシーボで)実行速度が速くなった
804:デフォルトの名無しさん
09/09/04 19:48:32
C++でスレッドをやってみたら思いのほか簡単にできた。
それでも複数の値渡しはいちいち構造体を定義しないといけないなんてどうしてこんな回りくどいやり方でないといけないのか
もっとすっきりしたやり方考えろよ
805:デフォルトの名無しさん
09/09/04 19:50:41
自分で好きなように作ればいいじゃないか?
806:デフォルトの名無しさん
09/09/04 21:25:36
>>804
スレッド開始時の関数に引数を渡すときのことを言っているなら、boost::threadはどう?
bindと組み合わせれば何引数でもいけるよ。
もちろん、それ以外のAPIでもbind使えるようにできるけど。
807:デフォルトの名無しさん
09/09/04 23:34:38
テンプレートメタプログラミングは定数のコレクションを生成するとき便利だよ。
その数が万単位になると劇的に速度が変わる。
808:デフォルトの名無しさん
09/09/04 23:37:14
テンプレートメタプログラミングは
天才がライブラリを作るときに便利だと思うよ。
凡人が挑戦すると死亡するだけ。
809:デフォルトの名無しさん
09/09/05 05:58:07
ちょっとやってみたけどコードがぐちょんぐちょんになった
810:デフォルトの名無しさん
09/09/05 15:50:47
C言語における、ダブルクォートで囲んだ文字列と、
シングルクォートで囲んだ文字列は、どういう違いがあるのでしょうか?
明確に違って、ダブルクォートで囲んだほうは文字列の最後に何か追加されたような気がする、まではおぼえているのですが…
どなたかご教授いただけませんでしょうか
811:デフォルトの名無しさん
09/09/05 15:52:34
>>810
シングルクォートで囲んだ文字列
の意味が分からん。
そんなもの存在しない。
812:デフォルトの名無しさん
09/09/05 15:56:35
>>811
ごめんなさい
文字列という言葉ではおかしかったかもしれません
っていうか、シングルクォートで囲んだものは文字列ではなくて、文字、でしたっけ
"aaa" == 'aaa' ではないことは覚えているのですが
あえて
"aaa"をあえてシングルクォートで囲んで表現したらどう表記するのでしょう、といった質問です
813:811
09/09/05 15:58:56
>>812
"aaa" -> 言語仕様として存在する
'aaa' -> 言語仕様として存在しない
というこれ以上ないほどの違いがあるぞ。
814:デフォルトの名無しさん
09/09/05 15:59:51
つーか、どんなC使ってるのか知らんが、
'aaa'
はCでは出来ないよ。
815:デフォルトの名無しさん
09/09/05 15:59:52
{ 'a', 'a', 'a', '\0' }
こんな感じか?
816:811
09/09/05 16:01:13
それとも
"aaa" -> C/C++ではcharないしconst char型の配列型で、その数は4である。(終端にヌル文字が付く。)
"a" -> C/C++ではcharないしconst char型の配列型で、その数は2である。(終端にヌル文字が付く。)
'a' -> const char型の文字型変数。
であることを言いたいのか?
817:デフォルトの名無しさん
09/09/05 16:01:55
char *p = malloc(3);
p[0] = p[1] = p[2] = 'a';
818:810
09/09/05 16:02:24
過去ログを読み直していたらこんなコードにぶつかったので質問した次第です
文字とか文字列とかそういう問題で捉えたのがいけなかったんですかね
624 :デフォルトの名無しさん[sage]:2008/01/30(水) 00:58:29
#include <iostream>
int main(void)
{
const int max_str = 50 + 1;
char str1[max_str], str2[max_str];
std::cout << "数値a入力>";
std::cin >> str1;
std::cout << "数値b入力>";
std::cin >> str2;
int len1, len2;
for( len1 = 0; len1 < max_str; ++len1 ){
if( str1[len1] == '\0' )
break;
}
for( len2 = 0; len2 < max_str; ++len2 ){
if( str2[len2] == '\0' )
break;
}
819:810
09/09/05 16:05:44
>>816
ヌル文字!
と
文字数!
それです、私が思い出したかったと思われるキーワードはそれです!
あとは自力で調べられそうです
ありがとうございましたー
820:デフォルトの名無しさん
09/09/05 16:07:04
たぶんシングルクォートの文字列は
char foo[] = {'f', 'o', 'o', '\0'}; /* '\0'は'\000'または'\x00'などと同じnull character(JISではNULと表記される)を表す */
だと思う、シングルクォートは文字定数を表記するときによく使われる、そのほかの目的でも使うことはある
ダブルクォートの例は
char bar[] = "bar"; /* {"baz"};とかくこともできる */
char *baz = "baz";
ダブルクォートで囲んだ場合、文字列リテラル(文字列定数)と呼ばれる
この場合、コンパイラは気を利かせてnull characterを付けてくれる
したがって、sizeof(bar)は4となる
しかしながら
char hog[3] = "hog";
の場合、コンパイラは気を利かせてnull characterを追加しない、つまり
char hog[] = {'h', 'o', 'g'}; /* char hog[3] でもよい*/
とした場合と同じ結果となる
と長々書いているうちに解決していたでござるの巻
821:810
09/09/05 16:08:38
>>820
ありがとうありがとう
大感謝です
822:デフォルトの名無しさん
09/09/05 16:22:47
どうでもいいけど、
結局何を疑問に思っていてどう解決したのかさっぱりわからん。
823:デフォルトの名無しさん
09/09/05 16:30:04
要はかなりのうろ覚えだからどう検索すりゃいいのかも分からなかったんだろ。
824:デフォルトの名無しさん
09/09/05 17:20:19
>>820
char *baz の sizeof は勘違いしたらいかんよ。
825:デフォルトの名無しさん
09/09/05 17:28:41
>824
例が悪かったか
ほとんどの環境ではsizeof(char *)も4だったね
826:デフォルトの名無しさん
09/09/05 17:33:44
記号関係で検索しようと思ったら確かに詰むわな。どうにかならんかな。
827:デフォルトの名無しさん
09/09/05 17:46:40
>>825
例えが悪いっていうか、同列に並べたら混同しちゃうだろw
char bar[] = "bar"; とchar *baz = "baz"; じゃ意味が全然違うのに。
828:デフォルトの名無しさん
09/09/05 17:49:24
>>813-814
いや、'aaa'のように中に文字が複数ある場合、その値は処理系定義。
仕様にないとかできないとかはちょっと言い過ぎだと思う。
まあ、実際問題使わないからそういう認識でも構わないと俺も思うけどさ。
829:デフォルトの名無しさん
09/09/05 17:52:12
シングルクォートの中には文字が一つのはずと理解していたのに
'\0'をみて、まるで2つの文字からなる文字列が入っていると勘違いしたんじゃないのだろうか。
830:デフォルトの名無しさん
09/09/05 17:56:07
VC++は'aa'と二つはできたな。
三つ以上は試したことがない。
831:デフォルトの名無しさん
09/09/05 17:59:36
>>828
マジックナンバー表すのによく使われる。3文字は見たこと無いけど。
832:デフォルトの名無しさん
09/09/05 18:01:31
>>831
ちょっとマジックナンバーについて簡単に説明してもらえますか?
833:デフォルトの名無しさん
09/09/05 18:06:18
VC++ならchar c = '??/n';とかできるな
834:デフォルトの名無しさん
09/09/05 19:57:38
問題を整理しよう。
・>833はトライグラフ。
・シングルクォートで囲える文字数は(トライグラフやエスケープ文字を処理した後の)4文字程度(環境依存)。
・その場合のエンディアンも環境依存。
ということで宜しいかと。
で、例えばint foo = 'abcd'としてprintf("%d\n", foo)としたときの出力が、所謂マジックナンバー。
835:デフォルトの名無しさん
09/09/05 20:06:54
多文字リテラルはC90でもあるだろうに
836:デフォルトの名無しさん
09/09/05 21:49:37
なんだかんだいって、もう本人は解決しちゃったんだろうぜ。
837:デフォルトの名無しさん
09/09/05 22:10:10
>>834
もう一度聞くけど、マジックナンバーについて簡単に説明してもらえますか?
どうも一般的に使われているものと異なるように思うので。
838:デフォルトの名無しさん
09/09/05 22:25:51
やだね、こういう言いたいことを裏に覗かせつつ質問する馬鹿って。
>>837
マジックナンバーと呼ばれるものには私の知る限り3種類ある。
・野球のマジックナンバー。詳細は知らん。
・コード中に埋め込まれた由来不明の値。何故その数字か判らんが兎に角動くと言う皮肉を込めて、マジックナンバーと呼ぶ。
・主にバイナリファイルの先頭に置いて、ファイルの種別を明示するために使われるバイト列。或いはそれを数値化したもの。
Unix使いなら/usr/share/file/magic辺りにあるから覗いてみるといい。
839:デフォルトの名無しさん
09/09/05 22:29:20
馬鹿とまで言われるとは思っていませんでした。
> ・コード中に埋め込まれた由来不明の値。何故その数字か判らんが兎に角動くと言う皮肉を込めて、マジックナンバーと呼ぶ。
僕もこれだと思っていたのですが、>>834さんは出力がマジックナンバーといっているので、
いったいどういう事だろうかと思ったんです。
840:デフォルトの名無しさん
09/09/05 22:33:47
質問しただけで荒れるってジャスティスののか
841:デフォルトの名無しさん
09/09/05 22:34:25
>>837
URLリンク(en.wikipedia.org)(programming)
まぁファイルフォーマットとかを直接触らない人には関係ないかもね。
842:デフォルトの名無しさん
09/09/05 22:40:05
>>841
・an unnamed or ill-documented numerical constant value;
これを言いたそうな気配はするんだが、なんか違った意味で使ってるよな
そりゃ質問もされるだろうよ
843:デフォルトの名無しさん
09/09/05 22:52:03
元素か
844:デフォルトの名無しさん
09/09/05 23:05:49
Linuxでは出力もマジックナンバーと呼ぶんだけどな。
ドザは頭が悪くて困る。
845:デフォルトの名無しさん
09/09/05 23:09:48
C言語でプログラムを作成してる際にわからないことがあったので質問させてください
3次元座標(-0,5、0,5、0)を
(sin(t)、t、cos(t))
みたいな形で現したいと思ってるんですがどのように現すのか教えてください
よろしくお願いします
846:デフォルトの名無しさん
09/09/05 23:16:03
どうも使い方の間違いを肯定したくなくてすり替えばかりしているように見える
よくあることだけどな
847:デフォルトの名無しさん
09/09/05 23:17:38
>>845
sin(0.5)は-0.5ではないし、cos(0.5)も0ではないが・・・
どういう意味なので?
848:デフォルトの名無しさん
09/09/05 23:19:00
>>845
double point_3d[3];
point_3d[0] = sin(t);
point_3d[1] = t;
point_3d[2] = cos(t);
とか?
849:845
09/09/05 23:25:39
DrawLine関数で
(-0,5、0、0)から(-0,5、0,5、0)までの直線をひきたいんですが、その後にその線を変数θを使用して回転させたいと思ってるのでsincosで座標を現したいと思ったのですが
可能でしょうか?
850:デフォルトの名無しさん
09/09/05 23:35:32
Linuxでも
>例えばint foo = 'abcd'としてprintf("%d\n", foo)としたときの出力が、所謂マジックナンバー。
なんていったりはしないよ。
もし言うというなら、Linux板にコピペしてきてそのスレで1000人の同意があったら認める^^
851:デフォルトの名無しさん
09/09/05 23:43:12
>>849
直交座標系と極座標系の変換を知りたいの?
もし単に回転させたいならアフィン変換すればいいだけだけど。
852:デフォルトの名無しさん
09/09/05 23:48:39
>>851
よくわかりません
x座標が-0,5なので-cos(60)でいいのかと思ってやってみてもうまくいかなくて…
3次元での座標を表すときのsinθcosθというのは単に数値を入れるのとは全く別物なんでしょうか?
(0,5、1、0)の座標をsincosの座標で現したいと思ったときに(cos(60)、1、sin(0))と表してもまったく別の位置に表示されるんですけど
853:デフォルトの名無しさん
09/09/05 23:51:36
sin,cosの引数はラジアン。
854:デフォルトの名無しさん
09/09/05 23:52:08
sin、cosの引数は度じゃなくラジアンだから *3.14/180 しないとだめ
855:デフォルトの名無しさん
09/09/05 23:59:56
ありがとうございます
わかりました
856:デフォルトの名無しさん
09/09/06 00:29:07
こないだからC++以前に数学がわかってないやつが多いな
857:デフォルトの名無しさん
09/09/06 00:34:46
というか、本にせよリファレンスにせよ、どっかで説明読めば
引数がラジアンだってことくらい書いてあるはず
理論に基づいて組み上げるんじゃなく
カンでプログラミングしてるんじゃないか
858:デフォルトの名無しさん
09/09/06 00:52:37
普段からsmartポインタって乱用してる?
複雑な管理が必要になる部分以外は余分なコストがかかるから使わないほうがいいのかなって思ったんだけど
859:デフォルトの名無しさん
09/09/06 01:02:17
RAIIとかPimplイディオムを実現するには必要不可欠だろうが
860:デフォルトの名無しさん
09/09/06 01:05:49
RAIIとpimplってほんとによく出てくるなぁ。
RAIIはさておき、pimplは目の当たりにしたことがないから実感がわかない
861:デフォルトの名無しさん
09/09/06 01:06:50
使わなかったところで、それと同様のコードを自分で書く羽目になるだけ、自分へコストが跳ね返ってくる。
まあ、最も単純かつ実行時の負荷が低コストでしかも標準のauto_ptrが残念な出来なのは仕方がない。
unique_ptrに期待しましょう。
862:デフォルトの名無しさん
09/09/06 01:07:24
Exceptional C++を読みなせえ
863:845
09/09/06 01:51:30
すいません
さっき教えていただいた通りにラジアンで線を引けたのですが、for文で線を何本も引いて円を書こうと思い
(sin(θ×t)、1、cos(0))
とし、tの値を少しずつ大きくしていきました。
そうするとx軸に沿って円がかけるはずだとおもうのですが45度から130度くらいまでの扇形みたいな形しかできません
まったく理由がわかりません
どなたかアドバイスをください
お願いします
864:デフォルトの名無しさん
09/09/06 01:59:23
自己解決しました
865:デフォルトの名無しさん
09/09/06 02:01:44
質問の文章考えてるヒマがあったらトライ&エラーやってた方が有意義じゃないか?
866:デフォルトの名無しさん
09/09/06 08:28:07
>>858 乱用してるよ!!
スマポのメリット>>>>>>>>>>>>ほんのわずかなコスト
867:デフォルトの名無しさん
09/09/06 09:05:17
>>858
スマポの評価はboostのスマポ、特にshared_ptrを使ってからしたほうがいい。
マジお勧め。
868:デフォルトの名無しさん
09/09/06 11:04:43
確かにboostのshared_ptrはその利便性からいって鬼。
これ以上ないほどの。
869:デフォルトの名無しさん
09/09/06 11:12:58
FFTで求めた実部データと虚部データから振幅スペクトルを求めるにはどうしたらいいですか?
パワースペクトルだと大きすぎるのでさけたいです
870:デフォルトの名無しさん
09/09/06 11:19:21
>>869
帰れ
871:デフォルトの名無しさん
09/09/06 12:08:14
>>869
mag=hypot(real,image)
872:デフォルトの名無しさん
09/09/06 12:19:02
>>870だが断る
873:デフォルトの名無しさん
09/09/06 14:29:57
グローバル変数を使う時は、関数プロトタイプ宣言より前じゃないとダメなんでしょうか?
874:873
09/09/06 14:30:42
日本語おかしかったです、すいません
グローバル変数を使う時は、関数プロトタイプ宣言より前にグローバル変数の宣言をしないとダメなんでしょうか?
875:デフォルトの名無しさん
09/09/06 14:32:20
グローバル変数の宣言と関数プロトタイプは何の関係もなくね?
876:デフォルトの名無しさん
09/09/06 14:33:31
そうでしたか、ありがとうございます
877:デフォルトの名無しさん
09/09/06 15:45:55
かかわるプロジェクトでは必ず三項演算子は目の敵になってるんですがgotoみたいな存在なんですか?