【初心者歓迎】C/C++室 Ver.42【環境依存OK】
at TECH
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
13:デフォルトの名無しさん 07/09/03 23:05:49 C++3rd 15.5「メンバポインタ」の項を読むといい。 「メンバポインタは、変数ポインタや関数ポインタとは異なり、メモリの位置を指すポインタではない。 メンバポインタは、ポインタというよりも構造体オフセット、配列の添え字に近い。」 14:デフォルトの名無しさん 07/09/03 23:22:19 メンバ関数へのポインタは、 非仮想関数の場合アドレスを、 仮想関数の場合vtblのオフセットを保持するようになっている。 もちろんどっちを保持しているかのフラグも要るし、 多重継承などで複数のvtblがある場合も考えなければいけないし、 そうしてぶくぶくふくれていく。 15:デフォルトの名無しさん 07/09/03 23:22:59 14はもちろん例えばの話ね。 16:デフォルトの名無しさん 07/09/04 03:07:04 >>13のは、主にメンバ変数へのポインタの話。 >>9のは、独自拡張のいわゆる__closureの影響。 17:デフォルトの名無しさん 07/09/04 10:28:56 WinAPIの話なんですが、C/C++の型についてなので、ここで質問させてもらいます。 LPARAMの値lpを SetWindowLongPtr(wnd, DWLP_USER, lp); として設定すると、「LPARAMからLONGへの変換。データが失われる可能性がある」と出てきます。 LPARAMもLONGも、元をたどれば同じlongなので、データが変わることはないと思ったんですが… また、hoge *h; ていうクラスのポインタがあって、 h = reinterpret_cast<hoge *>(GetWindowLongPtr(wnd, DWLP_USER)); とすると、「LONGからより大きいサイズの hoge * へ変換します」と出てきます。 ↑2つとも、自分の環境だと自分の期待通り動いてるんですが、 64ビット環境とか、他の環境だと動かない可能性があると言うことでしょうか。 # そもそも、SetWindowLongPtrの第3引数や、GetWindowLongPtrの戻り値の型はLONG_PTRだと、 MSDNライブラリに書いてあるんですが、なぜLONGなのだろう…
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
4988日前に更新/9347 Bytes
担当:undef