- 1 名前:デフォルトの名無しさん mailto:sage [2006/12/30(土) 20:07:25 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
- 231 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 22:27:09 ]
- >>224>>227
C++ならboost::sizeはだめか?<boost/range/size.hpp>
- 232 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 22:32:38 ]
- >>231
boost::size じゃ、>>227 の速度性能には及ばんだろ、多分。 # メンテナンス性は最悪だけど。
- 233 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 22:36:08 ]
- boost::sizeもO2あたりの最適化を書けてやれば定数に収束するんでねーの、たぶん。
- 234 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 22:46:13 ]
- >>233
一回しか比較を実施しないロジックに対し速度で対抗しようとしたら あとはもうテーブルでも用意するぐらいしかないぞ。
- 235 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 22:56:53 ]
- 比較と剰余のどちらのコストが高いかは議論たり得る。
- 236 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 23:03:11 ]
- じゃ、おいらは
#define isupper(c) ((unsigned)((c)-'A')<26U)) で対抗しちゃる。
- 237 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 23:03:26 ]
- そうだな。一般的には剰余のほうが速いだろうけど、そうじゃない環境もあるかもね。
- 238 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 23:06:15 ]
- >>236
お、これなら環境を問わずに最速なんじゃね?
- 239 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 00:53:05 ]
- fgetcで読み込んだファイル(c)の文字を判定して印刷可能文字ならそのまま出力
それ以外なら空白を表示するプログラムを作っていたのですが while((c = fgetc(fp)) != EOF){ if(isprint(c) != 0){ buf[n] = c; n++; } else{ buf[n] = ' '; n++; } if(n % 16 == 0){ puts(buf); for(n = 16;i >= 0;n--){ buf[n] = ' '; } n = 0; } } この状態で出力すると16文字目の後にバグのような文字がでてきてしまいます。 いろいろ考えてみたのですが原因がわかりませんでした。どうにかしてこのバグを消す方法はないでしょうか? Win XPでBorlandを使用しています。
- 240 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 00:55:43 ]
- 連投失礼します。
for(n = 16;i >= 0;n--)ではなく for(n = 16;n >= 0;n--) でした。よろしくお願いしますm(--)m
- 241 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 01:01:38 ]
- 文字列の終端はナル文字をうめましょう。●4点
- 242 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 07:34:48 ]
- ぬるぽ
- 243 名前:がっ mailto:sage [2007/01/30(火) 07:39:54 ]
- ちんぽ
- 244 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 09:00:18 ]
- _,ィ、 ,r、__
,.ヘー'´ i `´/ `i_ /ヾ、 ヽ、 i / /ヽ _ィ、〉 > ´ ̄  ̄ ` く ,ゝ、 }、 ,>'´ 、 ヽ./`ヽ ┌! / / i 「`i ヽヽ ヽ } Y ! | | l i i l i ',__,.ゝ ,' | | | !l l | l l ! i ! | | | | j___j | |i i! |i! l ,.|‐T丁i! ハlj, --!`トlノ、|| | ! ! レ'i´ミj "i´ミ iヽ, i || _ | l |i iバ__ソ L__ソ /.ノ |! _ヽ) | | |l |、//// ' ///// |! |i ヽ) !ハ |! |,ゝ' ´ ̄ ̄ ` く レy'|! __,ノ レ'ヽiハ / \}'´ ̄ `ヽ、 ィ´ ̄/ ,べY Y`i__ \ 〉/ / , 、ヽ /_`ヽ\ \ ,ィ'ん、 / ! '´__ ヽ /´__,.` ', \ ァ'` `ヽ、/ー' /! __`ヾ! レ'´ _,. ! \ i /ー-ィ、 ィ__! ___`フ / ヽ二 /7 _i弋 / 辷j ! ヽ / / / / } j´ 〉 ヽ、 冫 ヽ__ュ_y\ / / /ヽヘ/え´ /
- 245 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 12:19:11 ]
- >>239
・putsの仕様を確認すべし。 ・下手な小細工しないでputcharとかfputcを使ったほうがいいぞ。 ・そのコードだと16文字に満たない分が出力されないぞ
- 246 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 16:13:41 ]
- >>239
> for(n = 16;n >= 0;n--) 17 回実行されるよね。
- 247 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 16:31:01 ]
- >>221-222
そのような「べき」も「一般的」もありません。 >>230 感服しました。
- 248 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 17:09:56 ]
- 数直線を意識しない奴は、素養がない。
- 249 名前:239 mailto:sage [2007/01/30(火) 19:23:13 ]
- >>241,245,246
助言ありがとうございます。 いろいろと試してみたらどうにか動きました。 お手数かけました。
- 250 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 19:23:52 ]
- なんか不安w
- 251 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 19:34:31 ]
- 適当に試行錯誤して動いたらOKという人は、C言語を使うべきではないね。
たまたま偶然、自分が見た範囲内で問題なく動いているように見えるだけ、というのは勘弁して欲しい。
- 252 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 21:58:00 ]
- >>248
自然言語で読みやすいように書かない香具師はカス。 Ex. if (NULL = fp) ...
- 253 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 07:54:30 ]
- >>252
それはコンパイルエラーだろ…常識で考えて。 if(NULL == fp)って書きたかったんだろうけどさ。 俺はいっつも右辺にリテラルを入れる派。
- 254 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 08:41:40 ]
- >>253
252の挙げている例は、 ==を間違って=にしてしまっても、コンパイラがエラーを出してくれるので安全だから、定数は左辺に書け という、コンパイラが警告を出さなかった時代の人達のクソッタレなコーディングルールを、 今だに実践しているダメな人のことを言っているのだと思うよ。
- 255 名前:デフォルトの名無しさん [2007/02/01(木) 22:04:13 ]
- C++勉強始めて一週間ほどの超初心者なんですが、
定数(const)ってしっかり覚えた方が良いでしょうか? それとも あ〜そんなのあったね。くらいで良いでしょうか? そりゃ覚えるにこした事は無いと思いますが、なんかイマイチ頭に入らなくて
- 256 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 22:05:31 ]
- constごときでそんなに苦労するの?
- 257 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 22:08:10 ]
- 覚えられなければ参考書とかグーグルで
すぐ答を引っ張り出せるようにはしておけ
- 258 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 22:18:30 ]
- ややこしいのもあるから
const char * const s = "ssssss"; とか class M { int i; public: void setInt(int i) { this->i = i; } int getInt() const { return i; } }; こういうのは後回しでもいいかもしれんね。
- 259 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 22:31:54 ]
- >>255
まだ、勉強始めて一週間ってことだったら、いますぐじゃなくてもいいとは思うけど。 でも、後からでもいいから const は絶対に覚えておけ。
- 260 名前:255 [2007/02/01(木) 23:01:13 ]
- 親切にお答えいただきありがとうございます。
定数は絶対に変えられない!程度に覚えておき、追々勉強していこうと思います
- 261 名前:デフォルトの名無しさん [2007/02/02(金) 00:20:10 ]
- c++でグローバル領域において
const double TEISU = 0.05; とかにして,VS2005でTEISUにマウスカーソルを合わせると 「static const double TEISU」 って表示されるんだけど,勝手にstaticを付けられてるってこと? int型だとこうはならないんですけど
- 262 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 01:09:58 ]
- そんな感じ。
C++の名前空間内(含グローバル空間)でのconstはexternを付けない限りstaticと同じ内部リンケージを持つ。 (特に整数型において)ヘッダで初期化して定数として使えるようにするため。
- 263 名前:デフォルトの名無しさん [2007/02/02(金) 11:26:29 ]
- あるn次元空間において、全ての点から遠くなるような点(最遠点)の効率のよい計算方法を探してます。
ただし、最遠点の範囲はそれぞれの軸で決まっていて、 例えば下図のような2次元空間上でこのように点があった場合、 赤点の位置を算出したいのです。 ttp://kjm.kir.jp/pc/?p=29115.gif ttp://kjm.kir.jp/pc/?p=29117.gif 上の場合は、点が偏っているために範囲ぎりぎりの点が選択されてる様子で、 下は周囲に点が偏っているので中央が選択されてる状態です。 このような点を探索する場合は、 全ての座標において点までの距離を計算し、最も遠くなるような座標を求める、 みたいな総当たりで調べていくしかないのでしょうか。 それともなにか効率のよいアルゴリズムはありますか?
- 264 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 13:42:23 ]
- >>263
点に接する円の径を最大化するように円の中心点を範囲内にとればいいのかな? 最急上昇法を使うのはどう? ローカルマキシマムに気をつけないといけないけど
- 265 名前:263 [2007/02/02(金) 15:24:35 ]
- >>264
つまりこういうことでしょうか? ttp://kjm.kir.jp/pc/?p=29123.gif ttp://kjm.kir.jp/pc/?p=29124.gif 3次元以上に使えるのかが分からないのですが、ひとまず調べてみようと思います。 回答本当にありがとうございます。
- 266 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 15:50:57 ]
- 点が疎な領域で風船(円)を膨らましていくイメージじゃないの?
3次元以上でも使える。
- 267 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 16:02:02 ]
- >>255
constがらみの文法は、わかりにくいですね。 他の人も言っているように、アンチョコを作りましょう。 頭の中に記憶しておく必要はないのです。 あやふやな記憶に頼ってコーディングをするのは、とても愚かな行為です。 (セキュリティのために、裸一貫でしか入退場できない場所での仕事は別だが・・・) constはちゃんと理解して使えるようにならないと、 他者の書いたコードやライブラリを使うことができません。 >>258 自分はtypedefを使って、なるべくわかりやすくするよ。 typedefを勝手にやるな! というルールのところもあるけどね。
- 268 名前:264 mailto:sage [2007/02/02(金) 16:56:55 ]
- >>265
言いたかった事は>>266 kjm.kir.jp/pc/?p=29126.gif kjm.kir.jp/pc/?p=29127.gif これはローカルマキシマムにはまった例 kjm.kir.jp/pc/?p=29128.gif
- 269 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 21:09:52 ]
- とりあえず適切に荒くマス目に区切って総当たりし、
その中から有望そうな部分についてマス目を細かくして総当たりし、 さらにその中から・・・ という具合に、ニュートン法みたいに繰り返していくのが無難そうよ。
- 270 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 22:21:45 ]
- 配列の宣言において、要素数にキーボードから入力した値を用いるにはどうすればよいでしょうか?
- 271 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 22:30:36 ]
- 配列は静的に確保しなきゃいけないから無理
vector使え
- 272 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 22:51:59 ]
- >>270
int int_array[ #include "CON" ]; これでおk。
- 273 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:04:54 ]
- >>270
// for C(99) int num = キーボードから入力する関数(); AnyType_t array[num]; // for C++ // use std::vector. // for (regacy)C // try malloc() / free().
- 274 名前:270 mailto:sage [2007/02/03(土) 00:09:48 ]
- >>271,272
ありがとうございます。 説明不足で申し訳なかったのですが、 C++ではなく、Cで実現させたいのですが、 >>271のおっしゃる通り不可能なのでしょうか?
- 275 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:11:11 ]
- >>274
>273
- 276 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:22:00 ]
- >>273,275
ありがとうございます。 初心者なもので、具体的に教えていただきたいのですが、 float型で変数nを要素数とするxという配列を作りたいときは scanf("%d",&n); float x[n]; でよろしいのでしょうか? やってみたところ、 ここでは宣言はできない(関数 main ) 定数式が必要(関数 main ) とのエラーが float x[n]; の行に出てしまいました。 ご教授願います。
- 277 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:33:06 ]
- >>276
今時、8年も前の規格も満たせないような半端モノのCコンパイラではなく、真っ当なCコンパイラを使ってください。 それがいやなら、C++でも使ってください。
- 278 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:53:05 ]
- >277
すみません、フリーのBorland C++Compiler 5.5です。 月曜日に学校のVisual C++コンパイラでやってみます。
- 279 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:55:42 ]
- いや、一緒だから。
- 280 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 01:03:41 ]
- C99がまともにコンパイルできるコンパイラで身近なものはiccしかない。
部分的にサポートならgccでもよいが完全ではない。 こういう状態だから「C99は死んだ規格」と呼ばれる。
- 281 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 01:34:13 ]
- >>277
まともなコンパイラを教えてください
- 282 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 03:47:23 ]
- >>281
>280
- 283 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 13:17:31 ]
- >>280
>こういう状態だから「C99は死んだ規格」と呼ばれる。 でも、決して無駄にはならないハズ。 なぜならその屍をC++0xが乗り越えてくれるから。
- 284 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 13:50:00 ]
- なーんだ結局C++に乗っかかるつもりかよ。やめてくれ。
ただでさえ複雑怪奇なC++の言語仕様をさらに複雑にする気か。 まあC++0xは文法を複雑にするというより、足りない部分を補う だけで、今の文法でも出来る事を焼き直すわけではないからな。
- 285 名前:263 [2007/02/03(土) 14:32:19 ]
- >>266-269
回答ありがとうございます。 ローカルマキシマムも図で説明しただいてよく分かりました。 ひとまず269の方法で試してみたいと思います。
- 286 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 19:03:10 ]
- C++で他のアプリケーションの画面の色を取得したり、クリックしたりできますか?
できないなら言語は何がオススメですか?
- 287 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 19:25:09 ]
- それはC++かどうかよりもGUIのAPIもしくはライブラリの問題。
- 288 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 20:31:25 ]
- はいはい、HSPHSP
- 289 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 14:53:13 ]
- ↓ですが、@がAとして認識されるということですが、
私はAがどういう場合に使われるのかがわかりません。 externで定義ってどういうことでしょうか? 大きな非互換項目の一つにconst型修飾子の取り扱いの違いがある。 C言語では記憶域クラス指定子を持たず、const型修飾されたファイル 有効範囲の識別子は、外部結合の識別子として取り扱われる。 一方、C++言語では内部結合の識別子として取り扱われる。 つまりC言語ではexternが補完されるのに対し、C++言語ではstaticが 補完されると考えればわかりやすい。多くのプログラマは、C言語での プログラミングにおいて、extern型修飾子は、変数の外部参照宣言を行 なう時にのみ使用し、変数の定義においては使用していない。 この問題は、const型修飾子を使用している多くのプログラムで発生する と予想される。 const int a=10; @ (C言語で認識される型) extern const int a=10; A (C++言語で認識される型) static const int a=10; B
- 290 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 15:28:27 ]
- >>289
どういうこともそういうことも、Cには昔const修飾子がなかったので const int a = 10はint a = 10と同じスコープを持つしかなかっただけなんだが。
- 291 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 15:48:37 ]
- >>289
CでもC++でもグローバル変数の定義にはexternを付けてもいいんだよ。 /* hoge.h */ extern int foo; /* グローバル変数fooの宣言 */ extern int bar; /* グローバル変数barの宣言 */ /* hoge.c */ int foo = 4; /* グローバル変数fooの定義 */ extern int bar = 2; /* グローバル変数barの定義 */
- 292 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 16:00:40 ]
- 定義に「付けてもいい」ってところがミソだな
- 293 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 19:11:39 ]
- >>290、>>291
ご回答感謝します。 よくわかりました(助かりました)。
- 294 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 19:12:09 ]
- >>292
>定義に「付けてもいい」ってところがミソだな どういうことでしょうか?
- 295 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 00:04:19 ]
- >>289
> 私はAがどういう場合に使われるのかがわかりません。 C言語では(1)と(2)は同じだから、どっち使うか自由なので (2)を使わなければいけない場面なんてないんじゃないのかな。 C++だと(1)は(3)の意味になる。 (3)では複数のファイルに同じものがあって無駄に感じるが そんなの気にしないで(2)を使わず(1)を使うようだね。
- 296 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 00:10:04 ]
- >>295
生半可な知識しかないなら回答しないでください。 >(3)では複数のファイルに同じものがあって無駄に感じるが 全くの思い違いです。
- 297 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 00:12:40 ]
- >>296
そうでしたか。 ごめんなさい。
- 298 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 00:36:07 ]
- C++で
複数のファイルに const int a=10; などがあっても 変数aというより値10が直接使われる。 複数のファイルに const int a=10; const int *p=a; とした場合はそれぞれのファイルで異なるポインタのaが存在るんじゃないの。
- 299 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 00:37:44 ]
- >>296
>無駄に感じる どう感じるかは自由だ
- 300 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 01:09:35 ]
- 同じ定義を複数のファイルに書いたりしない。一個をインクルードするだろ。常識的に考えて。
- 301 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 02:02:43 ]
- >>300
そういうこといっているんじゃないと思うが。 その通り実際にはヘッダファイルに書くけど ヘッダファイルにstatic const int a=10;を書いて複数のファイルからインクルードするのと 複数のファイルにstatic const int a=10;を書きのとで staticやexternの動作は変わらないでしょ。 それとも別の話?
- 302 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 14:30:40 ]
- 質問です、class Aを継承したclass Bが存在したとします。
class Aに仮想デストラクタが存在しない場合、class Bのデストラクタが呼ばれないと聞きました。 これは、常に真なのでしょうか? B Obj;などと動的に生成しなくても、デストラクタはやはり呼ばれないのでしょうか?
- 303 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 14:55:20 ]
- >>302
A *obj = new B; みたいな使い方した場合。 Aに仮想関数が存在しなければobjはすべてAとして動作するから、 デストラクタもAのデストラクタが動けばいいけど 仮想関数が存在した場合、objはBとして動作することがある。 そのときBの動作してAのデストラクタしか動かなかった場合、危険でそ? B *obj = new B; のように宣言するならちゃんとobjが破棄されたときにBのデストラクタが動くはず。 でもそんなリスキーなこと考えず、仮想メンバ関数のあるクラスには virtualなデストラクタを置くのが常識。
- 304 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 00:48:51 ]
- >>300に同意
ま、スレの題名通りの流れだから良いけど。
- 305 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 02:03:28 ]
- >>300
そもそも、 複数のファイルに書かれた static const int a=10; が、同じ定義かどうかは、わからないぞ。 ファイル内のローカルスコープなわけで、 ファイルによって aの値は違うかもしれないし、 今は同じでも今後変るかもしれない。
- 306 名前:デフォルトの名無しさん [2007/02/06(火) 11:36:10 ]
- blowfishをやろうと思っているのですけど、暗号化できません
#include <stdio.h> #include "blowfish.h" #include "blowfish.h2" #define FilePath "text.txt" #define Key "keyword" #define BUF_SIZE 256 FILE *fp; char buffer[] = "asdfghjk"; char newbuffer[255]; CBlowFish *blow = new CBlowFish; blow->Initialize( Key, strlen(Key)); blow->Encode( buffer, newbuffer, BUF_SIZE); delete blow; fp = fopen(FilePath,"w"); fprintf(fp,newbuffer); fclose(fp); どこが間違っているのでしょうか?
- 307 名前:デフォルトの名無しさん [2007/02/06(火) 11:40:52 ]
- 質問です
メインで使うクラスにデストラクタの中で 終了時にメンバ変数の領域をdeleteにより手動で開放する 意味はあるのですか?
- 308 名前:306 mailto:sage [2007/02/06(火) 11:55:53 ]
- すみませんけど、自己解決しました
- 309 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 14:56:08 ]
- >>307
確保したものは解放するのが当然。まして、「メインで使う」ことが何度もあるなら。
- 310 名前:デフォルトの名無しさん [2007/02/06(火) 15:11:02 ]
- ではもう使わないんなら解放しなくてもいいですね
- 311 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 16:15:41 ]
- デバッガでメモリリークを検出するようにしてるような場合、
そういうことを適当にしてるとせっかく検出したリークを 見落とすようなことになる。 それに限らず、「もう使わないから」って理由で開放漏れを 容認しだしたら、本当に深刻なリークが発生したとき あちこちに疑わしい箇所が散逸してて泣くことになると思うぞ。 一人で責任持てるなら良いかもしれんがチームのときは迷惑極まりない。
- 312 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:23:21 ]
- >>307
いや、さすがに冗談だよな……?
- 313 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:28:58 ]
- どうせOSが後始末をしてくれるし、終了処理してたら重くなるから
リリースバージョンではabortで終了する。という人もいるみたい。
- 314 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:29:37 ]
- free論争は秋田
- 315 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:29:55 ]
- まさか307はこういうことを言いたいのか?
class Hoge { public: ~Hoge() {delete &x;} private: int x; };
- 316 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:42:06 ]
- >>315
なんかおかしな事になりそうだから試したくないけど それしたらどうなるの?
- 317 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:49:39 ]
- おそらく未定義の動作。どうなろうと標準規格の関与するところではない。
鼻から悪魔が(ryとよく言われるやつ。
- 318 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 18:57:47 ]
- 同じオブジェクトを二回破壊しようとしたら実行時エラーでないか?
- 319 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 19:34:00 ]
- >>307じゃないけどデストラクタでdeleteするのってダメなんですか?
デストラクタって破棄される直前に呼ばれるんですよね?
- 320 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 19:44:22 ]
- メンバ変数がnewで確保されたものなら、デストラクタでdeleteするのは当然だが。
- 321 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 19:52:51 ]
- ああ、>>315をよく見て無かっただけですた
びっくりしたぜ、サーセン
- 322 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 03:11:03 ]
- >>316
おそらく何も起きない。 というのも、スタック上にあればdeleteは、 んなポインタ知らないよとスルーするし、 ヒープ上にあっても、 んなポインタ知らないよとスルーするから。 デバッグ版なら、変なポインタをdeleteするな、って叫ぶかもしれない。 だがしかし、実装依存であり、何が起きても泣かない覚悟が必要だ。
- 323 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 03:59:03 ]
- へ?最近のdeleteはそんな親切設計というか過保護設計というかになってるの?
- 324 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 06:49:00 ]
- というか、そういう過保護な実装が存在するのか?だな。
- 325 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 07:55:33 ]
- しないだろ。
- 326 名前:デフォルトの名無しさん [2007/02/07(水) 10:30:05 ]
- クラスのメンバ変数についての質問です
グローバル変数としてビュークラスの外で宣言したクラスの メンバ変数は0や空文字で初期化されてるんですが そのクラスをビュークラスのメンバとして宣言するとそのクラスの メンバ変数が初期化されないのはどうしてですか?
- 327 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 10:43:10 ]
- c++ 変数 初期化 の検索結果 約 145,000 件中 1 - 10 件目 (0.19 秒)
ぐぐったら見つかるだろ
- 328 名前:デフォルトの名無しさん [2007/02/07(水) 10:46:50 ]
- >>327
わからないんなら答えなくていいよ
- 329 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 10:58:04 ]
- >>326
仕様です
- 330 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 11:13:14 ]
- >>326
向こうにちょっと書いたが・・・ グローバル変数はコンパイル時に場所を決定して0で初期化したブロックにできるが ヒープの場合実行時に割り当てられるので、わざわざ0クリアするコードを入れるわけ ではないので初期化はされない。 しかし期待した答えをもらえないからって文句言うな
- 331 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 11:13:54 ]
- ヒープの場合
を ヒープやスタックの場合 に
|

|