1 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 23:53:59 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part61 pc11.2ch.net/test/read.cgi/tech/1205059063/
52 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 19:56:00 ] 逆に POD の時にエラーにしてほしい。意味のない操作になるから。
53 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 02:12:49 ] >>33 うちではvc9は重すぎて入れてないので検証できないのだが、 なんでvc9だと通るんだ?? template <void * P> class A {}; void *f() { return NULL; } int main() { A<f()> a; return 0; } だったらわかるけど。
54 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 02:13:29 ] >>36 自己レス。すまん、これか! ほほぉ。ややこしいねぇ
55 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:52:42 ] >>32 >ビルトイン型で明示的に「コンストラクタ」を使って得られる値は >0 をその型に変換した値になる、 と、「コンストラクタ」と書かれているわけだが。 んで引数なしだから明らかにデフォルトコンストラクタだろ。
56 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:07:16 ] 初期化が終わっていないオブジェクトへの参照を関数へ渡すのは合法ですか。 その関数の中では、その参照からアドレスを得るか他の参照変数を初期化する操作しかしないとして。
57 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:09:19 ] 前スレでもその話は出てて、アドレスや参照の保持だけなら問題無いだろう、 って言われてるけど、規格書レベルでの合法かどうかのソースは出てない。 規格書で保証があるなら、俺も知りたい所。
58 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 12:49:04 ] 状態によって処理を変えたい時、Stateパターンで実装する方法と、enumとif文を使って実装する方法があると思います。 あとで状態の種類を増やしたくなった時、Stateパターンの方が保守しやすいと思っているのですが、 私が見てきたサンプルコードでは、enumを使っている例が多く感じます。 この2つの実装方法は、どのような事を考えて使い分ければいいのでしょうか?
59 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 17:54:50 ] stateパターンてどんなの?
60 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:19:05 ] 状態ごとにオブジェクトを作りそれに動作をにまとめ、切り替える。
61 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:43:31 ] (1)とりあえずswitch 状態の数少ないし、stateにしてクラス数増えるのもしんどいし あんまり変更もなさそうだからenumでswitchしちゃえ 増えるようならstateに書き直そう (2)能力不足 state間で情報を共有する美しい方法が思いつかない グローバル変数使うとアイツが怒るし・・・ そうだ、enumでswitchしとけば全部同一クラス内だから問題ナシ
62 名前:58 mailto:sage [2008/06/04(水) 12:33:24 ] >>61 どうもです。 小規模なものならenumで十分ということですか。 state間で情報共有ですが、各stateに親クラスへのポインタを持たせて〜っていう方法では、 getter/setterが増えてしまうのが問題ということでしょうか。
63 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 18:20:21 ] class X { int x; friend class Y; }; class Y { int y; Y(X a) : y(a.x) {} }; のようにメンバ変数の初期化で private にアクセスできるでしょうか?
64 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 18:26:49 ] friend class Y; されてるんだから、YからXの中は丸見えだ。
65 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:42:00 ] Wから xの Yが丸見えだと? ごめんなんでもない
66 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:26:45 ] また懐かしいネタを・・・w
67 名前:デフォルトの名無しさん [2008/06/05(木) 10:33:50 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6797.txt buffonの針のシミュレーションでπを求めるプログラムなんですけど Borland C++ Compilerでコンパイルすると C:\borland\bcc55\src\C++>buffon.exe Length of needle (0<L<=1): 1 Drop total of needle : 100 Number of hits = 55 Pi = 3.63636 という風にシミュレーション結果が出るんですが、 同じソースをcygwin g++(version4.2.4)でコンパイルすると $ ./a.exe Length of needle (<=1): 1 Drop total of needle : 100 Number of hits = 100 Pi = 2 という風におかしなシミュレーション結果になってしまうんですが、何が原因なんでしょうか?
68 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:26:10 ] >>67 y座標の乱数生成に問題がある。 rand()関数が返す値の最大値は定数RAND_MAXで判るけど、 これが65536前後しかないコンパイラは多数ある。 その式だとy座標には0か1しか返ってこない。
69 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:55:10 ] >>68 アドバイスありがとうございます。 ちゃんと動くようになりました。
70 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 19:41:00 ] クラスのtemplate化を考えています。 それで、templateで指定する型の取りうる範囲 を調べたいのですが、何か良い方法はありませんでしょうか? template<T> (略) public: int str[Tの取り得る範囲]; 内部にこういう変数の宣言に関してもあるので・・・。
71 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 19:44:08 ] 可算で上下限のある型なんて限られてるんだから特殊化すればいいだろ。
72 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 19:45:13 ] long longとか指定されたらどうするの?死ぬの?
73 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 20:05:30 ] std::numeric_limitsのmin(), max()
74 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 20:18:10 ] 禿も禿本で言ってるな numeric_limitsの特殊化も提供しろって
75 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 15:56:46 ] MinGWとVC++との連携を考えてて 下記みたいなソースを考えた。 GeoOpen関数へ引数無しだとちゃんとreturnされてくるんだが、 引数を作るとエラーが起こっちゃうんだよ。 printfはちゃんとされてるからまさにreturnでエラーが起こってる様子。 ちなみにエラー文はコレ↓ 「The value of ESP was not properly saved across a funciton call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.」 なんぞこれーー コンパイラが違うから起こってるエラーなのか。。。 ■MinGW側cpp(DLL作成側) extern "C" __declspec(dllexport) int __stdcall GeoOpen(int inta) { printf("%u", inta); return 1; } ■VC++側cpp(DLL読み込み側) GEOOPEN geoOpen = (GEOOPEN)GetProcAddress(hGEOCODERDLL, "GeoOpen@4"); if (geoOpen != NULL){ int intRes = (*geoOpen)(testInt); }
76 名前:デフォルトの名無しさん [2008/06/06(金) 15:58:29 ] ちなみにVC++のヴァージョンは6.0 もしかしてスレチなのかな。
77 名前:デフォルトの名無しさん [2008/06/06(金) 16:00:59 ] しまった記述し忘れ。 ■VC++側cpp(DLL読み込み側) testInt = 1;
78 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 16:05:27 ] GEOOPENの定義は?
79 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 16:07:09 ] C++にはDLLなんて概念ないしスレ違いだが まあ呼び出し規約が一致してないんじゃないかなあ。
80 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 16:07:44 ] GEOOPENのtypedeで__stdcallを忘れているんじゃない
81 名前:デフォルトの名無しさん [2008/06/06(金) 16:13:25 ] >>78 typedef int (* GEOOPEN)(int); です。 >>79 やはりスレチでしたか。 失礼を。
82 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 16:16:12 ] >>80 ぐほー! 正にその通りでしたっ ありがとうございます!
83 名前:デフォルトの名無しさん [2008/06/07(土) 05:17:16 ] templateの型を強引にunsigned形式にキャストしたいんですが どうやれば良いのでしょうか? (unsigned T)num; はエラーになってしまうので・・・。
84 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 05:32:20 ] Boostのmake_unsignedを使う。 あるいは自分で同等のメタ関数を書く。
85 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 05:43:10 ] 質問です ゲームを作るときに速度や位置といったよく変更するものは一箇所のヘッダーにまとめたほうがいいのでしょうか それとも、その値を使うヘッダーごとに分けたほうがいいのでしょうか 前者だと、変更するたびにコンパイルの時間が長くなるし、 後者だと、書いてるヘッダーを探す手間が増えるというように、 長所と短所があるのでアドバイスをお願いします
86 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 06:19:35 ] >>73 固定配列のサイズ指定でmax() の戻り値使うと、可変長配列にならね? C99なら問題無いけど、C++だと規格上不正のような気がする。 とはいえGCC4は通っちゃったので俺が間違ってるのか >>70 boost使えるのならこういうのがあるYo boost::integer_traits<T>::const_max
87 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 10:03:09 ] >>85 定義ファイルから読み込む
88 名前:83 mailto:sage [2008/06/07(土) 12:18:14 ] >>84 レスありがとうございます。 boostは環境で使えないので メタ関数を書いたのですが・・・ template <typename T> struct add_unsigned { typedef unsigned T type; }; で、エラーが出ます。 unsignedではなくconstなどでは問題なくコンパイル通るのですが・・・
89 名前:83 mailto:sage [2008/06/07(土) 12:24:42 ] 力ずくですが template <class T> struct add_unsigned{ typedef T type; }; template <> struct add_unsigned<char>{ typedef unsigned char type; }; template <> struct add_unsigned<wchar_t>{ typedef unsigned int type; }; template <> struct add_unsigned<int>{ typedef unsigned int type; }; こんな感じで解決する事にしました。 どうもありがとうございました。
90 名前:85 mailto:sage [2008/06/07(土) 15:55:13 ] >>87 定義ファイルだとユーザが変更出来るという点が気になって使ってなかったんですが、 気にしなくていいのでしょうか それとも配布前にコードに埋め込んで配布という形を取るのでしょうか
91 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:54:34 ] >>85 ヘッダで宣言してソースで定義すればいいんじゃないの?
92 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 17:50:01 ] >>90 コードに埋め込めばユーザーが変更できないとでも?
93 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 18:03:16 ] >>91 俺もそれ思ったけど、 定数自体よく増えそうじゃね? その場合、定数取得用の関数に文字列渡して ソースの方でマッピングするくらいしか無いと思う。 マクロ使って、開発中は関数+文字列渡しで、 リリース時は本当の定数にするのも手だけど、 うまいマクロ書けずに諦めた。
94 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 18:29:25 ] 潤沢なCPU資源のある今の時代、別に毎回文字列をmapから探しても大して問題はないと思うな。 適当なテキストファイルにa=bの形式でひたすら列挙したものを読み込むクラスとか、そんなに手間でないし便利だから作っておくといいんじゃね? 俺は保存とかコメント付けもしたいからxml使ってるが。
95 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 18:42:44 ] おれは>>91 の方法だな >>93 は同じような文字列(宣言と定義)を2箇所に書くのがいやだとかそういう話?
96 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:21:47 ] >>95 じゃなくて、値だけがよく変わるならそれ(cppの書き換えだけ)で良いけど、 定数が増える場合は宣言も当然追加しないといけないので、 ヘッダ書き換える事になって、 結局includeしてる全cppがコンパイルし直しになるな、と。 まぁ、>>85 が定数増やすこと有るかどうか分からないけどね。
97 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:25:14 ] ヘッダ一つに定数一個だけ宣言して 定数使うソースは使う定数の分だけヘッダをインクルードすればいいんじゃね?
98 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:40:18 ] BCC 5.5.1であるテンプレートクラスの変数をメンバに持つクラスがいて、このクラスのヘッダの段階では テンプレート引数にくるクラスが前方宣言されただけの時コンパイラに未定義の構造体と警告されてしまいます。 でもcppの方で実際の定義が分かるので、一応コンパイルは通ってるみたいなんですが、 コンパイラを黙らせるにはどのように書くのが良いのでしょうか? ヘッダ class hoge; class piyo{ sokuseki_ptr<hoge> hoggee; }; ソース struct hoge{ 〜 } (hoggeeの使用)
99 名前:デフォルトの名無しさん [2008/06/07(土) 23:27:42 ] C++でDLL作成に挑戦しています 公開するAPI関数の定義(XXX.h)を extern "C" {} ブロックで囲っているのですが、 関数の本体(XXX.cpp)も同じように extern "C" {} ブロックで囲う必要があるのか分かりません もちろんインターネットで検索をかけていますが、今のところ有用な情報がないです 両方とも囲う必要があるのか教えてください
100 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:36:28 ] >>99 試してみれば?
101 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:45:59 ] >>100 コンパイルは通りました defファイルも作成できました しかし、これで正しいのかが分からないのです
102 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:48:23 ] >>98 BCB2007の付属品のBCC5.9.3では何のエラーも警告も出ない。 5.5.1のバグというか癖では?
103 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:08:39 ] ソート済みのvectorに対してupper_boundで取得してきたイテレータから そもvectorにおけるインデックス番号はどうやれば取得できるでしょうか?
104 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:11:18 ] std::distance()
105 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:24:29 ] >>99 名前マングルか名前マングリングでググれ。
106 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 01:22:37 ] >>104 ほんとだ。ありがとうございます!
107 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 01:33:02 ] >>105 いくつか有用な情報が得られました ありがとうございました
108 名前:デフォルトの名無しさん [2008/06/08(日) 02:07:53 ] 質問です。 VC++2008を使用しているのですが STLのvectorのsize()って、メソッドが呼ばれたらその都度数えているのでしょうか? それとも、内部に、数量を管理する変数があって、その値を返しているのでしょうか?
109 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 02:11:13 ] 実装次第。 VC6 の STL なんかは begin と end のポインタを保持していてその差を返してるが、 全ての STL でそういう実装になっているとは限らない。
110 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 02:11:44 ] 普通はその都度数えます とはいっても引き算1回 意味的には vector<T> v; v.end() - v.begin() と同じ
111 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 02:17:45 ] 数えるにしても、少なくとも O(1) の数え方ではある。 strlen みたいな O(N) の数え方はしていないな。
112 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 03:00:16 ] リストと違って定数時間が保証されてる
113 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 03:25:40 ] spliceとどっちを優先するかだね。
114 名前:108 mailto:sage [2008/06/08(日) 06:23:00 ] レスどうもありがとうございます。 それほど遅くはならない仕様なんですね。 今使ってるプログラムは 配列を使ってmalloc()で逐次拡張していくプログラムなんですが これをvectorに置き換えたんですが、なんか100倍近く遅くなってるんですよね。 基本的に、配列と同じく[]しか使わなかったし mallocで1つずつ拡張してた場所をresizeやらpush_backに置き換えただけなのに・・・。 元が1時間くらい回しっぱなしのプログラムなので、vectorに置き換えたら10時間くらいかかるようになってしまった・・・。
115 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 07:52:43 ] >>114 vectorは一般的に[]は速く、resizeやpushu_backは遅い。reservを調べよ。
116 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 08:28:37 ] FreeBSD7.0のgcc4.2.1では vectorは1つの連続したメモリで管理しています。 resize()、push_back()は内部の配列のメモリは大体二倍ずつ増えるようになっています。 resize()は縮小しても内部のメモリを再割り当てしない様になっています。 STLのソースを読むのが早いのではないですか?
117 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 08:59:30 ] vector<A> v; void f(vector<A> v); f(v); とかやってるんではないですか? void g(vector<A>& v); ではなく。
118 名前:85 mailto:sage [2008/06/08(日) 09:00:57 ] >>91-97 アドバイスを参考に色々考えた結果、ヘッダで宣言して定義をソースに書き、 設定する値は、デバック時はINIファイルやXMLファイルから読み込み、 配布時は埋め込んだコードを使うということにします。 アドバイスありがとうございました。
119 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 10:17:40 ] >>114 VC++2008のSTLはセキュリティのために色々やっていて遅い。 #define _SECURE_SCL=0を書いてからヘッダをインクルードすると それがなくなってだいぶ速くなる。
120 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 10:41:43 ] >>119 そんなうえーんな事って他のコンパイラにもありうる? 例えば2005とか
121 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 11:42:21 ] むしろ2005からそうなった。
122 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 12:13:34 ] >>115 typo ひどすぎw
123 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 14:54:03 ] typoはコンパイラが教えてくれるから兵器だもん!
124 名前:デフォルトの名無しさん [2008/06/08(日) 15:03:54 ] defalt:
125 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 17:34:26 ] カタカナでdefaultとか書こうとすると、typoで酷いことになるよね
126 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 17:43:43 ] defualt:とtypoしてラベルと見なされた事がある
127 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 17:47:00 ] >>120 セキュリティとはどんなセキュリティで なにをしているんですか?
128 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 18:27:56 ] std::vector<int> hoge; int* p = &hoge[0]; // NOT SECURE!!! っていう
129 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 18:31:09 ] >>119 それわざわざヘッダに書かずコンパイラオプションでいいよな ポータブルなC/C++コードをコンパイルしたいときは その手の呪文をやたらと唱える必要あるよね、VC++8以降だと
130 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 18:33:15 ] >>127 operator []やイテレータでの範囲チェック。 ナントカ_sって関数に変えないCと違って、 何もしなくていいというのはC++さすがというべきところだけど、 どうしてもお節介という感じは否めない。
131 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:11:08 ] 速度を落としてでも安全方向に振るっていうのは、C++の理念に反発してる。 そんなのはC#でやればいい話だ。
132 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:19:52 ] いつからお前の思想がC++の理念になったんだよ。
133 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:28:20 ] C++自体はオーバーヘッドは抱え込まない。 オーバーヘッドのある冗長なチェックをどこまで行うかは、ライブラリの実装しだいで使用者の自由ってことかな。
134 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:38:38 ] 単なるデータ構造使いたい場合でも、 class使っちゃったら、コンストラクタが呼ばれてオーバーヘッドが起きたりとか・・・ 工夫すりゃ回避できるけど、言語自体は"デフォルト"では、オーバーヘッドだらけでしょ。
135 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:43:07 ] >>134 コンストラクタが呼ばれてオーバーヘッド? どんな場合の話だ?
136 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:43:20 ] プログラミング言語C++とC++の設計と進化をよむと 実効速度を重視して言語を設計してますよね。
137 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:46:30 ] >>134 >class使っちゃったら、コンストラクタが呼ばれてオーバーヘッドが いいえ >言語自体は"デフォルト"では、オーバーヘッドだらけでしょ。 いいえ D&EのC++言語の設計ルールの章に書かれてるけど、 C++には「ゼロオーバーヘッドルール」というのがありまして。
138 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:24:49 ] オーバーヘッドをコントロールできるかどうかが問題だと思う
139 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:56:29 ] 理想論でゼロオーバーヘッド言ってても 実際問題、速度差が出てるんだから、言い訳出来まい。
140 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:58:08 ] 仕方ねーだろコードの肥大でCPUキャッシュからは溢れるし 仮想関数だって投機実行が効かないんだから
141 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:59:53 ] インライン展開するからコードの肥大化は関係なし 理想論だけどね ;-)
142 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 21:08:26 ] インライン展開するから肥大化すんだろ
143 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 21:13:07 ] Cでもコンストラクタや仮想関数と同じようなことをしようとすれば同じだけ時間がかかる。
144 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 21:14:33 ] C++はCのつもりで書けばCと同じ速度で動くんだよね。 ただ、速度を犠牲にして抽象化したくなる誘惑が多いということで。
145 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 21:21:11 ] わずかなパフォーマンスと引き換えに、抽象化をしてメンテナンスに有利なコードを書くのか。 それともメンテナンスを犠牲にしてベタコードでパフォーマンスを追及するかの選択は使用者が選べるのが利点だわな。
146 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 21:34:03 ] C++のfstream.writeはどうして第一引数がconst void*ではなくchar*なのですか?
147 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 21:40:17 ] 理由は知らないけど、現実にvoid*してもキャストが減るわけでもないし、テンプレート書くときvoidの引数があるといろいろエラーが出るしメリットないもんな
148 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 21:58:28 ] basic_fstream<char>だからcharしか受け取らんという意図なんだろうけど、 バイナリ指向なwrite関数はvoid*が使いやすいよな。
149 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 21:59:08 ] というかなんでconstが無いのかと
150 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:04:59 ] charの配列しか動作は保証されないんじゃない?
151 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:09:55 ] え?constはあるだろ、流石に
152 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:12:39 ] >>149 実は俺も「マジで?」って思ってググッたw 大丈夫const付いてる。146が省略しただけ。