[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 01/28 12:32 / Filesize : 120 KB / Number-of Response : 460
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

スレを勃てるまでもないC/C++の質問はここで



1 名前:デフォルトの名無しさん mailto:sage [2006/12/30(土) 20:07:25 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

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 ]
ヒープの場合

ヒープやスタックの場合


332 名前:デフォルトの名無しさん [2007/02/07(水) 11:14:54 ]
すいませんありがとうございます

333 名前:デフォルトの名無しさん [2007/02/07(水) 19:07:36 ]
C++の勉強したいんですけど、
ゲーム作りしながら学べるような本はありませんか?
持ってるのはVisualC++の6.0なんですけど…。

334 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 19:13:30 ]
www.kohgakusha.co.jp/books/detail/978-4-87593-295-6
ゲーム作りではじめるMFC



335 名前:デフォルトの名無しさん [2007/02/07(水) 19:28:10 ]
mallcoを使って二次元配列の領域を確保したんですけど,
その配列の値を他の関数に渡すにはどうしたらいいんでしょうか?

336 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 19:43:56 ]
値で渡す場合は値渡しだね

337 名前:デフォルトの名無しさん [2007/02/07(水) 19:49:31 ]
>>335
たとえばintなら

int (*array)[10]; // int[10]型のポインタ変数array
array = (int (*)[10])malloc(sizeof(int) * 10 * 5); // int [5][10]
func(array[0][0]); // call

良く使うならint[10]型をtypdedef汁


338 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 19:58:36 ]
337はfuncの引数がint*となっている場合だね。
void func(int [][10]);などと宣言されていれば、func(array)と呼べる。

339 名前:337 mailto:sage [2007/02/07(水) 20:11:41 ]
>>338
array[0][0]でちゃんと値を渡してるよ。
コンパイル通してみたから間違いないかと。

340 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 20:28:09 ]
typedef版。要は配列の基底となる要素数を[10]です、と明示的に
宣言してやらないと領域だけあっても2元配列としては使えない。

typedef int ArrayType[10];
ArrayType *array;
array = (ArrayType *)malloc(sizeof(ArrayType) * 5); // int [10]を5個分
func(array[0][0]);


341 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 20:53:06 ]
>>323
WindowsのVC++のdeleteは、不正なポインタを渡すとint 3してくれたと思う。

342 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 20:55:49 ]
>>333
2つのことを同時にやろうとするのは無駄が多いよ。
C++とゲーム作りと、別々に勉強することをお勧めする。

C++の良い参考書はいくつもあるが、
↑と同レベルの、ゲームを作りながらC++を学ぶという本はないから。



343 名前:338 mailto:sage [2007/02/07(水) 21:31:32 ]
>>339
ごめん。337ではfunc(&array[0][0])と書いてあるかと勘違いした。

344 名前:デフォルトの名無しさん [2007/02/07(水) 23:52:01 ]
構造体をヘッダファイルに定義して適当にインクルードしたら
二重定義ということで怒られてしまいました。

#pragma once を使用することで解決しましたが、今まで
C言語をやっていて気になったことはありません。
コンパイルエラーになったのはC++ですが、C++でエラーになる
ようになったのでしょうか?
それともエラーにならなかったコンパイラが寛容だったということでしょうか?



345 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 23:52:48 ]
お前がまともな規模のコードを書いてこなかっただけ

346 名前:344 mailto:sage [2007/02/07(水) 23:56:13 ]
>>345
規模と何の関係があるんですか?

347 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 23:59:42 ]
>>344
C言語でもまともなコンパイラならエラーになる。
大きな規模のプロジェクトならば名前の衝突は経験することがあるはず。

348 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 00:05:11 ]
>>344
Cでも「構造体をヘッダファイルに定義して適当にインクルードしたら二重定義ということで怒られ」ます。

349 名前:デフォルトの名無しさん [2007/02/08(木) 00:20:11 ]
>>348
今Borland C++ 5.5.1をダウンロードして試してみましたが全く
エラーになりません。

<struct.h>
typedef struct test_st
{ int a;
int b; }TEST_ST;

<main.c>
#include"struct.h"
void testFunc(void);
int main(void)
{testFunc();
return 0; }

<sub.c>
#include<stdio.h>
#include"struct.h"
void testFunc()
{ printf("Hello\n"); }

main.cとsub.cで2回構造体の定義(struct.h)をインクルード
していますがエラーにならずに実行できます。
ちなみにエラーになったのはVC++でC++を使ったときでした。
これはエラーにならないコンパイラが甘いということでしょうか?


350 名前:344 mailto:sage [2007/02/08(木) 00:21:08 ]
どうもVC++のバージョンを上げてから弾かれるようになったように
記憶しているのですが・・・

351 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 00:24:54 ]
>>344
"piyo.h"というヘッダを作ったとします
そしたらヘッダ内に
#ifndef INC_PIYO_H
#define INC_PIYO_H
 ・
 ・
#endif /* INC_PIYO_H */
のような形の文を必ず書きなさい
そうすればと二重インクルードガードとなる

352 名前:344 mailto:sage [2007/02/08(木) 00:32:02 ]
>>351
いや、それは知っています。
それの代わりに#pragma onceでもいいってことも。

気になっているのはなぜ今までエラーにならなかったのかと
いうことです。
実際、さきほどbccで試したらエラーにならなかったし。

353 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 00:44:43 ]
struct.h
をインクルードする
struct2.hを作って

main.cから

#include "struct.h"
#include "struct2.h"

ってしてみれ

規模が大きくなるとそういう事が多くなる


354 名前:344 mailto:sage [2007/02/08(木) 00:54:32 ]
>>353
ありがとうございます。
なんとなく分かった気がします。

同一ファイル内で1回なら問題ないということですね。

Cで自分で意識してインクルードした場合は、1ファイルにつき
1回しかインクルードしないので問題がなかったのですが、VC++で
MFCを使うと勝手にインクルードとかされてエラーになるように
なったんじゃないかと思います。



355 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 01:03:19 ]
どんな名前になるのかわからないファイルを勝手にインクルードなどできるはずがない。

356 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 01:03:41 ]
だからそれはCとかC++とかの問題ではなくて
お前の書くプログラムの規模が小さかったから現れてこなかっただけだ。

ところで分割コンパイルと二重インクルード防止は基礎中の基礎だと思うんだが
最近の入門書じゃ教えてないっぽいな。
嘆かわしいなあ…

357 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 01:57:01 ]
>>356
まともな入門書には書かれてるよ。

まともじゃない入門書でも、説明しているものがあるけどね。


358 名前:デフォルトの名無しさん [2007/02/08(木) 02:35:10 ]
質問です。以下のように、変数を自作クラスを使うベクタを使って作成する場合
どのようにして作成していけばよいのでしょうか。push_backメンバが使えると思うのですが
いまいち自作クラスを使ったベクタでの使い方がわかりません。よろしくお願いします。

class A {
 int a;
 int b;
public:
 void set_a(int seta) { a = seta; }
 void set_b(int setb) { b = setb; }
 int get_a() { return a; }
 int get_b() { return b; }
};

int main() {
 vector<A> vec_a;

 /* vec_aに要素を追加する */

 return 0;
}

359 名前:358 mailto:sage [2007/02/08(木) 02:38:02 ]
訂正します。
どのようにして要素を作成していけばよいのでしょうか。

360 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 02:48:54 ]
>>358-359
vec_a.push_back(A());

361 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 03:12:35 ]
>>358
class Aに引き数をとるコンストラクタを用意した方が何かと便利かもね。
仮に、A(int seta, int setb);というコンストラクタがあるなら、
vec_a.push_back(A(0, 0));って感じで設定も同時に行なえる。

362 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 03:44:42 ]
>>361
セッターの戻り値を *this にして
vec_a.push_back(A().set_a(0).set_b(0));
なんてやるのもいいと思うけどね。
コンストラクタでやるのに比べるとちょっと冗長だけど、
このスタイルのほうがいろいろと都合がいいことってあるし。

363 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 07:36:19 ]
それマジ?

364 名前:358 mailto:sage [2007/02/08(木) 10:19:30 ]
>>360-362
ありがとうございます。
勉強になりました。



365 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 10:24:34 ]
>>362面白い
それは応用が利きそうだな。

366 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 11:48:25 ]
setterでthisポインタ返すのは常識だろ

367 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 13:59:43 ]
質問です
cout << false;
cout << true;
の出力結果は 0 1 ですが、これは環境によって違うのでしょうか?

368 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 15:19:39 ]
>>367違わない。

369 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 17:20:28 ]
プリコンパイル済みヘッダに関する質問です、
VC++2003やVC++2005では各cppに#include "stdafx.h"でプリコンパイル済みヘッダが使えます。
ところがそのソースをBCCに移植すると、(ディレクトリの関係で)一部#include "../stdafx.h"にしなければなりません。

VCはディレクトリ関係を気にせず一様に指定出来ますが、BCCで同じことは行えないのでしょうか?

370 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 17:25:30 ]
>>369
BCCはstdafx.hは必要ありません。

371 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 01:09:27 ]
>>366
はて、>362は実体を返しているようだが。

372 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 01:32:40 ]
>>371
僕は参照だと脳内補完した。

373 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 03:02:01 ]
とりあえずゲッターはconstつけようや

374 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 19:17:43 ]
C++のソースからクラス図を自動生成してくれるようなツールはないでしょうか・・・?



375 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 19:19:06 ]
>>369
インクルードパスに..を追加できないの?
""で括ったヘッダ名が見付からなければ、
<>で括ったのと同じようにヘッダを探すことになっている。

だからインクルードパスの指定は""で括ったものにも有効。

376 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 20:59:55 ]
>>374
Doxygenを含めて色々在ると思う。

377 名前:デフォルトの名無しさん [2007/02/14(水) 13:38:46 ]
class A{
static const double a;
static const double b;
static const double c;
};

const double A::a=5;         
const double A::b=10;
const double A::c=a/b;

と書いた場合、cは必ずa=5とb=10が実行された後に実行されるのでしょうか?

378 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 17:02:17 ]
CTypedPtrListのSeqValueListを
CTypedPtrArrayにする時ってどうすればいいんでしょうか?
下のがソースなんですが、やり方が良くわからない。。。orz
CItemInfo::~CItemInfo(){
int iCount;
POSITION pos;
VALUE *pValue;
m_pValueList = &m_SeqValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
m_pValueList = &m_ParValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
}


379 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 18:28:32 ]
なんだマルチか

380 名前:コンパイルとおらねぇもん mailto:sage [2007/02/15(木) 01:23:57 ]
>>377
いいえ。実行されることはありません。

381 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 14:39:13 ]
MFC実行したら
Warning: calling DestroyWindow in CWnd::~CWnd; OnDestroy or
PostNcDestroy in derived class will not be called.
って言われたんだけど、どういう意味なの?

382 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 14:45:37 ]
そのままの意味です。英語の意味が判らないと言うのであれば、鼬害です。

383 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 22:56:15 ]
>>381
ウィンドウを正しく終了せず
プログラムの変数(インスタンス)が消されたことにより
正しい手順ではなくCWndのデストラクタが呼ばれたんじゃないの(推測)。

384 名前:377 mailto:sage [2007/02/16(金) 07:39:55 ]
そうするとcの値は何になるのでしょうか?



385 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 08:19:55 ]
0.5でしょ。コンパイルタイムに確定するから。

386 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 12:56:06 ]
>>385
この手の順序依存は規格的には未定義じゃなかったっけ?

387 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 13:13:40 ]
BCCでインデントするとemacsでやってたのと違ってかなり
スペース空くのですが、こんなもんなんですか?

388 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 13:22:19 ]
BCCでインデント の意味がわからない。

389 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 16:54:28 ]
class A{ 
static const double a; 
static const double b; 
static const double c; 
}; 

const double A::a=5;          
const double A::b=c/a; 
const double A::c=a/b; 

じつはこれもコンパイルできてしまったりする。

390 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 12:40:16 ]
>>389
順序は規定されていないけどコンパイルされる以上、値は決まるわけだね。
その例だとa, b, cの順序に評価される可能性が高そうだから、bは(cが暗黙の初期化で0だから)0、cは∞か。
const double A::c=a+b;
const double A::b=c+a;
const double A::a=5;
こうなってたとすると、a, b, cがそれぞれ(acbの順序で評価して)5, 0, 0なのか(cbaの順序で評価して)5, 10, 5なのか悩ましいところだ。
まして複数のコンパイル単位に分かれていたらリンク順序にも依存してしまうのかな。

結論:
評価順序に依存した初期化は鼻から悪魔。constにしないでシングルトンにすべきか。

391 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 12:41:58 ]
一部訂正:
×こうなってたとすると、a, b, cがそれぞれ(acbの順序で評価して)5, 0, 0なのか(cbaの順序で評価して)5, 10, 5なのか悩ましいところだ。
○こうなってたとすると、a, b, cがそれぞれ(cbaの順序で評価して)5, 0, 0なのか(acbの順序で評価して)5, 10, 5なのか悩ましいところだ。



392 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 23:13:18 ]
gccは確か制御できた様な

393 名前:デフォルトの名無しさん [2007/02/19(月) 12:03:31 ]
C言語なんですがwaveを再生させるにはどうすればよいでしょうか?
プログラムが完了したら鳴らしたいのですが・・・。

394 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 12:18:16 ]
Beep()
…言ってみただけ



395 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 12:19:02 BE:672138566-2BP(1050)]
てst

396 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 12:19:46 ]
ビープ音鳴らすだけならputchar('\a');
処理系依存だけど






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

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

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