[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/13 19:22 / Filesize : 243 KB / Number-of Response : 945
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part69



1 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 21:04:54 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part66
pc12.2ch.net/test/read.cgi/tech/1231640498/

※part63, part66 が重複していたようですので part69 としました。

231 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 13:00:38 ]
>>226
そんな乱数でもない数列をrand()という名前の関数の出力にする処理系が悪い。
ゴミだから早急に廃棄しろ。

232 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 13:39:39 ]
>>225
製作工程の都合で、1,6の面積が微妙に大きいという話しか?
それとも、くりぬかれた目による重心のずれ、密度の偏りの方か?

233 名前:デフォルトの名無しさん [2009/05/15(金) 13:55:52 ]
>>228
ありがとうございます。
翻訳出てないんですかね……残念です。

C++の一番の特徴であるテンプレート関係の本が少ないのは何故?
わかりやすくテクニックを知りたいのに

234 名前:デフォルトの名無しさん [2009/05/15(金) 15:54:15 ]
すみませぬ JAVAから入っていまC++を勉強し始めたのですが、
C++で、配列で宣言した変数は、跡になってから自らがいくつの要素を持つ配列なのかチェックする方法ってありますか?


Javaだと、
String str[] = new String[3]
のように宣言した場合、
str.length を見れば要素数を見ることができますが、C++の場合は方法ありますか?

235 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 15:56:52 ]
>>234
ないから素直にstd::vector使っとけ

236 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 15:57:32 ]
>>234
sizeof(str) / sizeof(str[0]) で自分は調べてる

237 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 15:58:40 ]
>>236
アホか

238 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:03:46 ]
え?駄目なの
俺も>>236を常用してるけど・・

239 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:07:00 ]
大丈夫、話が噛み合ってないだけだ。
char * foo = new char[3];
した場合は要素数を知る手段はない。
char foo[] = "abc";
した場合は要素数(≠文字数)を>236で得られる。



240 名前:234 [2009/05/15(金) 16:20:29 ]
ありがとうございます。
C言語の場合、
配列を作ったら作りっぱなし、メモリのどこまでがその配列に割り当てられた場所かという情報はどこにもないという認識で良いですか?

たとえば10要素の配列を作ったあとに20番目の要素にアクセスしようとすると、JAVAだとぬるぽが出て教えてくれますが、
Cの場合はシステムから見てそれが分からずに、20番(に相当する場所)を読みに行ったり、書き込んでしまう という理解で良いですか?

241 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:25:57 ]
良いです。
ちなみにここはC++のスレです。

242 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:39:03 ]
>>240
そうです
運が良ければアプリ自体が吹っ飛んでくれますが運が悪いとそのままメモリ破壊して動き続けます
なのでJavaしかできない人が集まってC++案件とかやるととても楽しいことになります

243 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:41:59 ]
そもそも、10要素の配列を作ったあとに20番目の要素にアクセスしようとするような奴は
「Javaしかできない人」ではなく、「Javaもできない人」

244 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:47:00 ]
>>240
大きな勘違いをしている。
>配列を作ったら作りっぱなし、メモリのどこまでがその配列に割り当てられた場所かという情報はどこにもないという認識で良いですか?
配列は、>36でサイズを得ることができる。
つまり、newなんていう外道なモノを使わずに、(昔なつかしの)固定長配列を使うかstd::vectorを使えと言うことだ。

245 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:48:50 ]
Cに配列なんてなかった

246 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:16:41 ]
>>245
何??

247 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:18:10 ]
何の話?

248 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:19:50 ]
ついに狂ったか?

249 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:22:37 ]
Cなんてなかった



250 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:50:31 ]
コンピュータなんてなかった

251 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:52:47 ]
平行世界とつながったな

252 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 22:09:27 ]
仕事なんてなかった

253 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 22:00:39 ]
ISOのC++の2003年の規格のJISは訳がひどいですね。
原文の構成もひどいけど。
規格をもっと読みやすくしたような、同じだけ詳しい本ってあるんでしょうか?

254 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 22:06:55 ]
無いから我慢して読め

255 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 22:15:03 ]
規格書の文章なんてどれもああいうもんだよ。
訳が酷いわけじゃない。

256 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 01:01:57 ]
C++は規格自体がひどいから文章もひどくなる

257 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 01:56:44 ]
C++の文法があまりに酷いもんで翻訳者もイライラしながら
訳してたんじゃないか?w

258 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 02:35:49 ]
どのくらいメモリを使っているかという情報は型が持っているのだから
例えば、char[3] 型の最初の要素のアドレスをchar*型に代入したら
もうメモリサイズがわからなくなるのは当然といえば当然。
char[3] 型を char[3] 型に代入する分にはちゃんとサイズがわかる。

という感じかしら

259 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 04:11:03 ]
変数の型も含めてすべてをクラスにってのがJava以降に導入されたもんだからね



260 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 04:25:19 ]
それは別にJavaで初めてというわけじゃないだろ。


261 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 08:18:01 ]
Javaも全てがクラスというわけでもないし。

262 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 08:57:46 ]
全てがクラスになる


unlambdaやれば全てが関数だからオススメ。

263 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 09:49:55 ]
C++の一行の文字数って標準仕様上、制限ありますか?
またあるとして、現実的に気にした方が良いですか?


264 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 10:53:44 ]
>>263
言語仕様としてはメモリの許す限りおk

265 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 10:56:29 ]
メモリの許す限りという制限すらない無制限

266 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 11:16:18 ]
ありがとうございます。
じゃあ気にせず行きます!

267 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 11:29:51 ]
80文字が一つの目安だな。
120文字超えてたらちょっとイラッとする。

268 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 11:32:26 ]
クラスのメンバ関数の返り値は
コピー返しでも可能ならconstにしろ

とEffective C++で言われていましたが、
なぜか返り値がbool型だけはconst付けない風習がありません?
例: bool is_valid() const {return member?true:false;}
この場合も返り値にconst付けた方が良いのでしょうか?

269 名前:デフォルトの名無しさん [2009/05/17(日) 11:34:17 ]
付けた方がいいよ。



270 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 11:54:31 ]
>>268
メリットはなに?

271 名前:268 mailto:sage [2009/05/17(日) 11:58:07 ]
>>269
そうですよね。ありがとうございます。

>>270
組み込み型の返り値を万が一変更するバカが居た場合の予防です。

272 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 12:12:37 ]
>組み込み型の返り値を万が一変更する
なんてできません。

馬鹿って言う人が馬鹿なんだぞw
ちゃんと読もうぜ。

273 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 12:25:20 ]
メリットは記述の統一感かな?
テンプレート引数にするときにいいことってある?

自分は組み込み型にはconst付けない派だな

274 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 12:34:53 ]
それ書いてあるのってEffecitve C++だっけ? Exceptionalかなんかのほうだった気がするが。

275 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 12:35:35 ]
> テンプレート引数にするときにいいことってある?
全くない。

むしろ
組み込み型戻り値のconstは
環境によってはwarningやerrorになるから
うっとうしいことこの上ない。




276 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 13:02:35 ]
constな自クラス型参照メンバなんか使いだすと有りとあらゆる宣言にconstが波及して`err passing〜'の楽しい事になるんだよね。

277 名前:271 mailto:sage [2009/05/17(日) 13:06:18 ]
>>272
> >組み込み型の返り値を万が一変更する
> なんてできません。
有名どころのコンパイラならちゃんとコンパイルエラー出してくれるみたいですが
環境が違っても確実に予防してくれるのでしょうかね?

>>274
Exceptional C++だったかもしれません。


>>275
gccやboostの実装でも確かに組み込み型の戻り値にconstは付いていないようですね。



278 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 13:59:47 ]
そもそも「組み込み型の返り値を万が一変更する」って
どういう意味なの?

279 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:00:46 ]
public継承は分かる。
private継承も分かる。

ではprotected継承は?
使ったことある人います?(遊びじゃなく実用で。)



280 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:17:27 ]
だからちゃんと嫁ってば。

Effecitve C++ 2ndの21節と29節に書いてあるのは、
非組み込み型のコピーを返す関数を左辺値として使われないように、
左辺値になり得る型が戻り値の場合はconst付けよーねってことと、
const宣言したメソッドがデータのハンドル(stringクラスのcharポインタとか)を
返却するときは戻り値にconst付けよーねってこと。

わざわざ押し入れからEffectiveC++取り出してきた俺に
プッチンプリン買ってこいw

>環境が違っても確実に予防してくれるのでしょうかね?
ぶっ壊れたコンパイラの話をされても困る。

281 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:18:55 ]
じゃあ俺はなめらかプリンでよろしく

282 名前:271 mailto:sage [2009/05/17(日) 14:33:58 ]
>>280
サーセン。吊って来ます。

ありがとうございました。

283 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:35:03 ]
constの同音異義語っぷりもなかなか見事なものだ

284 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 17:10:42 ]
>>280
非組み込み型の戻り値について const つけてあると、右辺値参照として取れなくなっちゃいそう。
この指針は将来的に非推奨になるんじゃなかろうか?

285 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 17:52:26 ]
そもそも右辺値参照自体が、
Effective C++で問題が広く知れ渡ったことで
実装されることになったんじゃないかな。

ぷらぷら界に多大な影響を与えた引き替えに、
次の版は全面改定だな。

286 名前:デフォルトの名無しさん [2009/05/17(日) 17:55:23 ]
cppunitに関する質問ってありですか?

287 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 17:56:06 ]
>>286
専用スレがあるから、まずはそっちで。

CPPUnitについて少し話そうかい
pc12.2ch.net/test/read.cgi/tech/1042358524/

288 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 18:07:21 ]
互換性考えたら右辺const値のオブジェクト代入は右辺値参照を無視してコピー噛ますんじゃないかな

289 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 18:09:03 ]
そう。だから右辺値参照を使って最適化しているつもりが、うっかり今までどおりの
コピーになったりすることが考えられる。まぁ最適化の範疇と認識する分には問題には
ならないんだろうけど。



290 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 19:44:11 ]
右辺値参照って、なんだかよく分からない。
C++0xが出れば解説も増えるかな?

291 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 20:32:36 ]
僕もよく解らないけど、関数の返すオブジェクトがコピーされるとき、
もとのオブジェクトが捨てられる場面で、
コピーコンストラクタを呼ばないでよりコストの低い破壊的なコピー、
つまりオブジェクトのメンバを移動することをするってことなんでしょ?
ただそれだけでしょ?

292 名前:290 mailto:sage [2009/05/17(日) 21:12:34 ]
現在 標準C++のコンパイラの最適化機能として実装されている
 戻値最適化
とは違うのかいな?

C++ ラビリンス Return value and constructor
ttp://www.fides.dti.ne.jp/~oka-t/cpplab-retval-ctor.html


293 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:12:36 ]
そうそう、「移動」の概念(ムーブセマンティクス)を容易に実現するための言語仕様として考え出されたのが右辺値参照。
ほかに分かりやすい例を挙げるとしたらauto_ptr(の後継)がvectorに入れられるようになることとか、
functionやbindなどで各引数のconstや参照の有無の挙動を完全に再現したoperator ()を実現できるなんて効果がある。

294 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:27:43 ]
多次元配列の要素全てを任意の値で埋めたい場合
どう書くのが良いでしょうか。
1次元の場合は std::fill や std::fill_n が使えるのですが。

int a[10][10];
for(int i=0; i < 10; i++)
for(int j=0; j < 10; j++)
a[i][j] = 42;

ということをしたいわけです。

295 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:28:25 ]
>>292
最初の例や2番目のコピーコンストラクタ・代入演算子が呼ばれる例でもムーブセマンティクスは効く。
そこのコピーコンストラクタ・代入演算子の呼出が、ムーブコンストラクタ・代入演算子の呼出になる。
一般にムーブコンストラクタ代入演算子はコピーコンストラクタと違って、
それより遙かに低コストで例外の投げようもない実装になるので、より最適なコードになるとされる。

296 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:31:12 ]
>>294
自分で書いてるじゃねーか。何が不満なの?

297 名前:デフォルトの名無しさん [2009/05/17(日) 21:34:04 ]
酒鬼薔薇

298 名前:290 mailto:sage [2009/05/17(日) 21:34:39 ]
>>295
ほっほー。
そうなのかぁ。
ありがとう。C++0xが楽しみになって来たんだぜ。

299 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:46:45 ]
いや普通に

 memset(a, 42, 100);

で、いいんでない。string.h が使える環境なら



それより最近、スザンヌとギャル曽根の区別が付かなくて困ってます
見分け方を教えてください



300 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:47:47 ]
>>299
int に memset() して 42 になるとでも思ってんのか?

301 名前:299 mailto:sage [2009/05/17(日) 21:47:53 ]
アンカー忘れ。>>294 な

302 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:51:12 ]
>>299
これはひどい。

303 名前:299 mailto:sage [2009/05/17(日) 21:52:38 ]
すまん。レス取り消し。int だったね

回線切って(ry


304 名前:299 mailto:sage [2009/05/17(日) 21:53:52 ]
>>301-302
仕事速いな。暇人

305 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:04:38 ]
>>304
お前の方がよっぽど暇人に見えるんだが

306 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:11:27 ]
>>294
その配列だったら連続性が保証されてるから
std::fill_n(&a[0][0], 100, 42)
でいいだろ。

307 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:12:15 ]
>>294
お好きなほうをどうぞ。
std::fill_n(&a[0][0], sizeof a / sizeof a[0][0], 42);

namespace bll = boost::bind;
std::for_each(a, a + sizeof a / sizeof a[0], bll::bind(std::fill_n<int*, std::size_t, int>, bll::_1, sizeof a[0] / sizeof a[0][0], 42));

308 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:23:24 ]
>>307
std::fill_n(first, n, val) は [first, first + n) に対しての操作だから
要素数でOK。sizeof a / sizeof a[0][0] は冗長。

309 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:26:42 ]
それも要素数・・・



310 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:28:14 ]
g++にてテンプレートに暗黙の型変換を絡めたら分からなくなったので教えてください。

C++ code - 60 lines - codepad
ttp://codepad.org/l7pocEaw
このソースコードでは50行目hoge < short(1)の部分で
error: no match for 'operator<' in 'hoge < 1'
と言われてしまいます。どうやら暗黙の型変換がうまくいかないようです。

これを改変してForward declarationを無くして代わりにクラステンプレートの内部で friend 関数を定義することで回避できます。
C++ code - 49 lines - codepad
ttp://codepad.org/F0VomJTk

しかし、どうして前者のソースコードでは暗黙の型変換がうまくいかないのでしょうか?



311 名前:294 mailto:sage [2009/05/17(日) 22:30:18 ]
みなさまありがとうございます。

std::fill_n(&a[0][0], sizeof a / sizeof a[0][0], 42)

がよさそうですね。勉強になりました。



312 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:39:30 ]
>>309
だから、要素数が既知なのに一々冗長に書くことないってこと。

313 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:42:54 ]
>>312
「要素数が既知」ということに依存したコードにするほうが面倒なこともあると覚えておけ。

一般的には、保守性のほうが一回だけの記述の利便よりも重要だ。

314 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:45:14 ]
>>313
何頭に血を登らせてるの?
質問者が提示したコードで要素数が定数になってたんだからそれでいいだろ。
不明な場合に要素数を計算するのは当然のこと。

315 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:45:22 ]
>>312
マジックナンバーは避けるべきだろjk
const N = 10;
int a[N][N];
なんてしているならsizeofを使わずにNと書いてもいいとは思うけど。

316 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 23:08:17 ]
そういう本質でない話はもういい

317 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 01:54:38 ]
template<T,U>void fill(T (&d)[U],T v){for(unsigned i=0;i<U;++i)d[i]=v;}
template<T,U0,U1>void fill(T (&d)[U0][U1],T v){for(unsigned i=0;i<U0;++i)for(unsigned j=0;j<U1;++j)d[i][j]=v;}

マジックナンバーイラズサイテキ化キタイダイ
int a[10][10];
double b[10];
fill(a,0);
fill(b,0.0);

318 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 02:07:27 ]
オナニーレスうぜえな
ループを書きたくないってのが本題なのに、それじゃ本末転倒だろうが

319 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 02:22:32 ]
>>318
何いってんの?
ライブラリって知ってる?



320 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 02:57:44 ]
>>310
暗黙の型変換はテンプレートを具象化しなければならない時には行われないから
んで、どうすればいいかというと後者のようにすればいい
Effective C++の46項に詳しく書いてあるよ

321 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 03:25:03 ]
>>284,285,288,289
C++0x の話としては,戻り値の型が const 修飾されていると
move 出来ない (immutable な右辺値になる) ので,
Effective C++ の記述がやや古くなるのはその通りだと思います.

C++0x 的には, EC++ のこの記述は
恐らく "Extending move semantics to *this" と
"Defaulted and Deleted Functions" との組み合わせに置き換わるべき話だと思います.

322 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 03:56:14 ]
C++が苦手なCプログラマなのですが、ちょっと質問です。
ファイル内の文字列を探すプログラムです。
これをC++で書くとしたらこの程度でもクラスを作るのですか?
#include <stdio.h>
#include <string.h>
int main(int ac, char * av[])
{
 //ファイルからメモリーに読み込み
 FILE * fp = fopen("文字列が入ったファイル", "r");
 fseek(fp, 0, SEEK_END);
 int fSize = ftell(fp);
 fseek(fp, 0, SEEK_SET);
 char * buf = (char *)malloc(fSize);
 fread(buf, 1, fSize, fp);
 fclose(fp);
 //さがす
 char ss = "abcde";
 int ss_len = strlen(ss);
char * p = buf;
 for (int i = 0; i < fSize - ss_len; i++) {
  if (strncmp(ss, p, ss_len) == 0) {
   printf("%d番目に見つかりましたよ\n", i);
   return 0;
  }
  p++;
 }
 free(buf);
 return 0;
}



323 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 04:00:29 ]
おれはc++のOOP が標準だから、特別な理由が無い限りOOPで書く。
英語で育った人は、特に何も考えずに英語会話するのと同じ

324 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 04:03:57 ]
その程度だと、既存のクラスを使うだけで出来上がるね。つまり、クラスを作る出番ではないと。

極論すればクラスってのは作るものというより使うもの。

325 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 04:09:51 ]
それに、mallocをfreeしてないでしょ、終われば開放するけど、
それはたまたま短いプログラムだから、OOPだと、明示的にディストラクタがある。
まあ使わなきゃ意味無いけど、私はこれも標準で書いてしまう。だから少し安心なわけ。
それに、そのプログラムはバッファーオーバランしないようだけど、それも、保護されやすい。
ただし、標準でOOPが身についてるからであって、人によってはOOPでもいくらでも汚くかける。

326 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 04:13:16 ]
あ、ごめ freeしてた orz

327 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 04:14:40 ]
いや…、Cはもう、身についてないから…と言い訳する  orz orz orz

328 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 04:16:55 ]
一人で無駄に4レスも使いやがって

329 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 04:17:57 ]
俺はその程度ならclass内でやったりしないな。FILEも普通に使うし。

ただ、バッファはvector<char>で確保するし
探索も文字列探索クラス(BM法とか)を作って実行するね。

処理自体は(mainには限らないが)普通の関数に置く。
ただこれは当然「ファイル内の文字列探索が処理の全て」の場合。
何らかのclassの処理の中でファイル内探索を必要とする時は、当然そのように書く。



330 名前:310 mailto:sage [2009/05/18(月) 05:52:46 ]
>>320
Effective C++では後者の方式が天下りに与えられていました。

あくまで前者のような方式(実装をクラス宣言部分に書かない)
で解決する方法はありませんか?
(後者の方式でprivate宣言されたヘルパー関数を呼び出すという回避策もありますけれど。)


331 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 05:56:50 ]
>>325
destructor
はディストラクタではなくデストラクタね。発音的にも用語的にも。
ディスクトップでなくデスクトップなのと同じで。








[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<243KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef