C++相談室 part9
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG(´∀`).。o(関連URLは>>2-5の辺り)
0412デフォルトの名無しさん
NGNGありがとう。
0413デフォルトの名無しさん
NGNG> あと、__A__ とか、インクルードガードに _ 使う人多いんだけど、
> いちおうダメだよね。
処理系が予約してるから、ね。俺は一度だけ、標準ヘッダのインクルードガードと
衝突して泣いた経験がある。
ただ VC++ みたく「処理系が勝手に _ 付きのインクルードガードをつける」場合に
は問題ないんじゃない? あれは重複しない文字列 (GUID) 使ってるし。
0414デフォルトの名無しさん
NGNG文字列にするにはどうすればいいのでしょうか?
0415デフォルトの名無しさん
NGNG0416デフォルトの名無しさん
NGNGもとのデータはそんなに正確なのかい?
0417414
NGNGまず初めは
float -> string -> float
みたいな処理をしても
一致させたいのです。
0418デフォルトの名無しさん
NGNGなんでそんなことを?
0419デフォルトの名無しさん
NGNG0420414
NGNGありがとう。がんばってみます。
0421デフォルトの名無しさん
NGNGfloat の全ビットパターンについて
sprintf(buf, "%.15g", f1);
sscanf(buf, "%g", &f2);
assert(f1 == f2);
を試してみたことがあるが、NaN,Infを除いて一致したよ。
0422デフォルトの名無しさん
NGNGスゲー、floatが32bitってことは43億通りになるんかいな?
0423デフォルトの名無しさん
NGNGたいして時間かからないでそ。
0424デフォルトの名無しさん
NGNGビットパターンのセットってintとかからキャストしてぶっこむの?
0425421
NGNGキャストで予期しない変換がおこると嫌なので、memcpy しました。
テストコードはこんな具合っす。
float f1, f2;
for (unsigned long u = 0; u != 0xFFFFFFFF; ++u) {
int e = (u >> 23) & 0xff;
if (e == 0 || e == 0xff) continue; // NaN or Inf
memcpy(&f1, &u, sizeof(f1)); // f1 = *(float*) &u;
sprintf(.... 以下 >>421 と同じなので略
PenIII 700MHz で2〜3日で終わったよ。
0426デフォルトの名無しさん
NGNGそんなにかかるのかー。一瞬自分もやってみようとしたけど
それを聞いておいて良かったw
0427デフォルトの名無しさん
NGNG複素数ライブラリってどうやって使うんですか?
0428デフォルトの名無しさん
NGNG0429421
NGNG実際に試したのは sscanf ではなく istringstream 経由の
istream >> float なので、sscanf なら3日もかからず早く終わるかも。
試してみるなら、途中経過を入れておくと良いっす。
if (u % 0x10000 == 0) printf("%08lx,%g", u, f1);
0431デフォルトの名無しさん
NGNGなにがスゲーんだ???
たいして時間かからないでそ。
SETI@home、UDはカレにおまかせ♥
0432デフォルトの名無しさん
NGNG献血と同じで無意味だ
0433デフォルトの名無しさん
NGNG0434デフォルトの名無しさん
NGNG献血も無意味だよ。
死ぬ奴は死なしておけば良いんだ。
0435デフォルトの名無しさん
NGNGその主張の先は、
「じゃキミ生きてなくてもいいよ。キミが生きてる事は俺には無意味だ」
とか「俺には迷惑だよ」となる
0436デフォルトの名無しさん
NGNGこ こ は C + + に つ い て
相 談 す る ス レ で す 。
0437デフォルトの名無しさん
NGNGf1≠f2
になってしまうのでしょうか?
int e = (u >> 23) & 0xff;
if (e == 0 || e == 0xff) continue; // 0 or Denormal or NaN or Inf
0438デフォルトの名無しさん
NGNGどっかにC++の規格書落ちてねえのかよ。
0439デフォルトの名無しさん
NGNG>>5
0440デフォルトの名無しさん
NGNGそれはまずかないですか?
0442デフォルトの名無しさん
NGNG何故?
0443デフォルトの名無しさん
NGNG売り物じゃないの?
0444デフォルトの名無しさん
NGNGNaNもしくはInfの場合は、
f1==f2がfalseになるからではなくて?
ってかNaNかInfの時ってf1==f2はtrue?false?
どっち?
0445デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNG0447デフォルトの名無しさん
NGNG0448デフォルトの名無しさん
NGNGしかし、allocation functionはアドレスを返し、返されたポインタがどうたら
と書いてあるところはある…。
アドレスとポインタを同一視してると思えるような文は所々にあるな。
0449デフォルトの名無しさん
NGNGなにがいいたいの?
0450デフォルトの名無しさん
NGNGポインタはC++ではアドレスなのか。そうでないのか。
規格書の記述ではわかりづらいが前者のようだということ。
0451デフォルトの名無しさん
NGNGそれが重要なの?
0452デフォルトの名無しさん
NGNG一応ね。人にポインタを説明する時に頻出事項だし。
ぜひ確認しておきたいことではあるね。
ただし、一般にアセンブラなどで使ってる「アドレス」とは
異なる意味でのアドレスだということは確かだな。
ポインタの値はimplementation-definedだとはっきり書いてあるし。
0453デフォルトの名無しさん
NGNG0454デフォルトの名無しさん
NGNGいや、そう思いやすいかもしれないけど、そうではないと思う。
implementation-definedでかつアドレスなんだと思う。
勝手に処理系がつけた値を「アドレス」と呼んでしまえば、矛盾しない。
言葉の定義の問題だけど。
0455デフォルトの名無しさん
NGNGimplementation-defined は、ようはどう定義しても間違いではないって
意味でしょ?例えば「aが整数だ」というルールがあったときに、
あんたはa=0だと主張しているに過ぎないんじゃない?
0456デフォルトの名無しさん
NGNGだから、もしも0という言葉が整数全体を表す言葉にも使える
ものだったとしたら(実際は違うけど)OKだよな?
あと、いくらimplementation-defined だと言っても
全く自由というわけではないぞ。当然他の規則と矛盾しない
ようにしなくてはならない。
0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNGそうだが。
いろいろな記述を見るに、アドレスはポインタだと考えないとつじつまが合わない。
決定的なのはさっきのallocation functionの記述。
それから、constやvolatileに関してはアドレスがポインタだと明記してある。
例えば、allocation functionの説明でもアドレスはポインタだとして
解説してるようだが、それ以外にもconstやvolatileに関してはアドレスが
ポインタだとはっきり明記してある。
この場合は確実にimplementation-definedで、かつアドレスなんだよ。
0459デフォルトの名無しさん
NGNG0460デフォルトの名無しさん
NGNG本当に規格書読んだ?
ISO/IEC 14882:1998(E)
5.3.1
2
The result of unary & operator is a pointer to its operand.
0461デフォルトの名無しさん
NGNGん?その部分は勿論読んだぞ。
「&はポインタを返す」だろ。
でも、ポインタがアドレスとはその部分だけでは断定できまい。
「&がアドレスを返す」と書いてない以上。
まあ、&は「address-of operator」って名前らしいが…
しかし、それ以外のいろんな記述を見るに、アドレスがポインタらしいと
いうのが俺の意見。
0462460
NGNG046311
NGNGなだけでその他はそうであるとは限らない。ということだと思いまっせ。
0464デフォルトの名無しさん
NGNG文脈から見るに、その部分は「〜へのポインタ」という言い方をconstなど
に適用するとどうなるかを説明した文であって、そこだけアドレスがポインタ
だということを説明した文じゃないと思うわけよ。
それに、何度も言ってるように、他でアドレスとポインタを混同したような文がいくつもある。
比較的証拠っぽいのは14.3.2のプログラムのコメントとか、thisポインタが
アドレスだとかな。
046511
NGNGおおその通りだ。へたうった。例外はメンバポインタの場合だけだ
3.9.3.5 In this International Standard,
the notation {\it cv} (or {\it cv1}, {\it cv2}, etc.),
used in the description of Types,
represents an arbitrary set of cv-qualifiers,
0466デフォルトの名無しさん
NGNG適当にアドレスと書いたり書かなかったりしてしまってるように見える。
まあ断定は出来ないけど。
0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNG% cp foo.pdf bar.pdf
できますが、何か? もしかしてパーミッションの問題か?
0469デフォルトの名無しさん
NGNGコピーしているようにしか見えないが、どこでペーストしてる?
0471デフォルトの名無しさん
NGNGfoo.pdf で取り込み(コピー)、bar.pdf で貼り付け(ペースト)では?
# cp コマンドで名前変えて連続コピーってできたっけか?
# シェルスクリプト書く方が早そうだけど
0472デフォルトの名無しさん
NGNGと
int* i;
の違いって何ですか?
0473デフォルトの名無しさん
NGNG0474472
NGNG違いはない。書き手のセンスの問題。
0476デフォルトの名無しさん
NGNG0477デフォルトの名無しさん
NGNGAccept: */*
i
;
0478デフォルトの名無しさん
NGNG};
とかみたいにブロックの後に ; を付ける人が偶にいますが、
これってどうですか?
0479デフォルトの名無しさん
NGNG0480488
NGNGテキスト選択のボタンが使えなくなってる。なんでだろ。
0481デフォルトの名無しさん
NGNGhtml版の Final draft を使わせてもらってよいんじゃないかな。
つーか、html 化された正式版仕様書ってないの?
ちなみに >>5 にある ansi_iso_iec_14882_1998.pdf は海賊版ぽい。
ダウンロードした人の話では正式版とはファイルサイズが異なるらしい。
0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNGISO/IEC 14882は 2.8M 2.1M の2つのタイプが存在するのを知らないのか?
それから、なぜ正規購入者でなければwebのFDを利用できないんだ?
頭に虫沸いてない?
0484デフォルトの名無しさん
NGNG> ISO/IEC 14882は 2.8M 2.1M の2つのタイプが存在するのを知らないのか?
うん、知らない。2.8M のやつってどこが配布してるの? 2.1M のやつとは
何か違いがある?
> なぜ正規購入者でなければwebのFDを利用できないんだ
FD って一般に公開されてなかったと思ったから。実際のところ、FDの
ライセンスはどうなってるの?
上記2点、よければ教えてよ。
0485デフォルトの名無しさん
NGNG0486デフォルトの名無しさん
NGNGstruct A { int i; float f; };のようなstructを定義して、
これをmain()の中で、A *a=new a[10];(あるいは、A a[10];)
として、他の関数の中で使うには、その関数はどう定義
すればよいのでしょうか?void func(A* a[]){}ではダメでした。
ここでいうfunc()の中で、a[5]->iを使いたいのです。
よろしくお願いします。
0487デフォルトの名無しさん
NGNGstruct{
...
};
でセミコロンをつけ忘れないように普段から慣れさせておくため。
0488デフォルトの名無しさん
NGNGvoid func(A a[]) ;
とか
void func(A *a) ;
0489486
NGNGvoid func(A a[10])でいいのですね。
0491デフォルトの名無しさん
NGNG0492デフォルトの名無しさん
NGNG結果に違いはないです。 ないからわざわざ10と書くこたな(略
0493初心者
NGNG0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNGそんなこと言ったら、2chに書き込む方がよっぽど指が疲れるYO!
0496デフォルトの名無しさん
NGNG0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNGC, C++ だと仮引数の配列はポインタに縮退するから、わざわざ a[10] と
書くのは
誤解を助長してる
としか思えんなぁ。だいたい要素数 10 個の配列にしか適用できない関数って
時点で、何か間違ってるような気がする。
俺なら
1. 構造体にして、そのポインタを引き渡す
2. 要素数も同時に引数として渡す or vector 使う
3. 番兵を使う
どれかにするけどな。
0499デフォルトの名無しさん
NGNGRECT myrect;
---------------------------------------------------
myrect.top = 0;
myrect.left = 0; 問題はこの部分です
myrect.bottom = 100;
myrect.right = 100;
---------------------------------------------------
CreateHatchBrush(HS_CROSS,GetSysColor(COLOR_WINDOW));
FillRect(hwnd,&myrect,hbrush);
のようにして,ウィンドウの任意の領域を白紙に戻したいのですが,
RECT構造体(myrect)の(座標の)初期化がうまくいきません.
GetClientRect(hwnd,&myrect);
として座標を取得するしかないのでしょうか?
また,任意の領域を白紙に戻す方法でもっと良い方法があるんでしょうか?
よろしくお願いします.
0500かかし
NGNGここの掲示板に書くことではないと思うのですがどこに書けばいいか
分からないのでアドバイスをお願いします。
「DevelopperStudio」とは、何のことでしょうか?
探してもさっぱり (+_+)
皆さん!!この件に関して知っていることがあれば
メールかRe>でお願いします。
@かかし
0501デフォルトの名無しさん
NGNGDeveloper Studioを探して下さい。
0502499
NGNGRECT *root;
void Draw(void)
{
RECT *p = new RECT;
p->top = 0;
p->left = 0;
p->bottom =100;
p->right =100;
root = p;
}
とする事で代入できました.
ポインタを使ってしかメンバには代入できないのですね.
Cでは
RECT myrect;
のように構造体myrectを宣言すれば myrect.メンバ名
もしくは、myrectを指すポインタ->メンバ名
でアクセスできたのと思うのですが.
newもしくはmallocを使ってポインタの指す構造体を直接作らないと
いけないんですねえ.
間違いがあれば指摘お願いします.
0503デフォルトの名無しさん
NGNG要素数を間違えて渡したらコンパイル時に型不一致で引っかかって
くれる。
0504デフォルトの名無しさん
NGNGいってることがよくわからないんだけど…。
RECTみたいな単純な構造体メンバへのアクセスって別にCもC++もかわらないよ?
0505デフォルトの名無しさん
NGNGclass Base {
void Function();
void Main();
void (Base::*funcPtr)();
};
void Base::Main() {
funcPtr = &Base::Function;
(*funcPtr)(); // ここでエラー
}
としても
error C2171: '*' : 'void (__thiscall Base::* )(void)' のオペランドが無効です。
error C2064: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。
とエラーが出てしまいます。
メンバ関数を呼び出す際は何か特別な構文などが必要なのでしょうか?
0506デフォルトの名無しさん
NGNG(Base::funcPtr)();
とか
0507デフォルトの名無しさん
NGNGインスタンスを与えればよい。
class Base {
void Function();
void Main();
void (Base::*funcPtr)();
};
void Base::Main() {
Base b;
funcPtr = &Base::Function;
(b.*funcPtr)();
}
0508デフォルトの名無しさん
NGNGコンパイル通らないっすよ。
0509デフォルトの名無しさん
NGNG0510506
NGNGコンパイルは通った。リンクで引っかかるんだろ
つか、厨でした。逝ってきます
0511デフォルトの名無しさん
NGNGうーんコンパイラによるような。
BCC5.6だとコンパイルエラー。「メンバポインタの不正な使用」だとさ。
>>509
なるほど。その手があったか。
■ このスレッドは過去ログ倉庫に格納されています