[過去ログ] C++相談室 part156 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
416(1): 2021/06/20(日)07:43 ID:vxtAtGft(1/7) AAS
C言語の double _Complex と C++ の std::complex<double> って実部虚部の並び方とか一緒ですよね?
ヘッダファイル aaa.h で宣言されてる double _Complex * をとる関数に std::complex<double> * を渡したいのですが、やり方がわかりません。
#define 〇〇 std::complex<double>
#include<aaa.h>
みたいにできると想像してるのですが、合っているでしょうか?
418: 2021/06/20(日)08:59 ID:vxtAtGft(2/7) AAS
>>417
メモリレイアウトから違うのですか?
では、double _Complex * をとる関数に std::complex<double> * を渡すことはできないということですか?
420: 2021/06/20(日)09:11 ID:vxtAtGft(3/7) AAS
エ!?
_Complex って std::complex の後にできたんじゃありませんでしたか
なぜ、実部と虚部がメモリ上に連続で置かれているという設計にしなかったのでしょうか……
430(3): 2021/06/20(日)14:29 ID:vxtAtGft(4/7) AAS
>>421-422
今調べたら、C側は実部虚部というメモリレイアウトを保証していて、std::complex 側は C の複素数と同じメモリレイアウトを保証してるようですね
>>423
すみませんCの方が早かったんですね
>>425
ありがとうございます
暗黙のキャストがなぜ許されないのかはまだよく分かっていませんが、キャスト自体は可能なようで、double _Complex (あるいはそのポインタ) をとる C 言語関数に std::complex<double> (あるいはそのポインタ) を適切にキャストして渡すのは問題ないようになってると理解しました
433(1): 2021/06/20(日)16:06 ID:vxtAtGft(5/7) AAS
>>431
いや、すみません。逆に「似ている」とはどういう意味でしょうか
例えば std::complex については
外部リンク:eel.is
の記述からしてメモリレイアウトは実部虚部と決まってるわけですが、これはソースとは見なせないんでしたっけ?
434(1): 2021/06/20(日)16:11 ID:vxtAtGft(6/7) AAS
>>431
> それからC++03は2003年にC++98のバグ修正をしただけだから
> C99より古いぞ
ですから、
>>430
> Cの方が早かった
のでは?
あと>>433は「std::complex は C の複素数型と同じことを保証する」という記述は含みませんね
ただ、この場合メモリレイアウトが同じであることの他に要請するべきことってありますっけ?
435: 2021/06/20(日)16:13 ID:vxtAtGft(7/7) AAS
>>431,434
> ですから、
> >>430
> > Cの方が早かった
> のでは?
すみません
間違えました
ごっちゃになってました
これは取り消します
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.051s