1 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 17:56:53.03 ID:uFDqtnkl.net] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part146 https://mevius.5ch.net/test/read.cgi/tech/1573094136/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.105【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1556142878/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 ↑え?だってお前、普通ダイナミックリンクするだろ? "ダイナミックリンク"す・れ・ば、ファイルサイズ**増えないです**
978 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 00:46:56.64 ID:v4E0eL1J.net] なんか長々書いたが 今の時代、スマポこそがポインタであって、もはや生ポインタはアドレスなんだよ! 人間も父が爺になって子が父に繰り上がっていくものだから 時代と共に名実ともに出世していくのは普通の事なのかもしれない
979 名前:デフォルトの名無しさん [2020/01/31(金) 00:47:48.87 ID:88e+X9K2.net] ちょっと江添呼んできて。 電車代出すから。
980 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 00:51:32 ID:v4E0eL1J.net] ただどうしても言いたいのは 生ポインタは address じゃなくても 別に raw_pointer とか native_pointer で良くね? address って言ったら、ただの数値のイメージがあるわ
981 名前:デフォルトの名無しさん [2020/01/31(金) 00:54:08 ID:88e+X9K2.net] アドレスに無料で型情報をつけるアイデアをひらめいたときは、俺って天才かも?って思ったんだろな。
982 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 00:54:15 ID:S0Mdice7.net] >>951 我々の感覚からすると実際その通りなんだが、Java脳の人々にとってはそうではない 彼等はスタックという感覚も非常にうすい なぜならオブジェクトはスタックにはとれず、常に new (ヒープ)しかないから 我々はクラスのインスタンスがスタックにあるのかヒープにあるのかは無意識に常に 判断する事に慣れているが、これをjava脳の人に説明するのはしばしば困難なときがある
983 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/01/31(金) 00:54:31 ID:T8rV4kLc.net] >>929 宣言をヘッダファイルに分割する方式は C++ の意味不明さの根源のひとつじゃない? それで宣言と定義を分ける運用がキッチリできるのならそれはそれでよかったけど、 テンプレートとインラインの活用でヘッダファイルに書く分量がだいぶん多くなってヘッダファイルってなんだっけって気持ちになる。 このあたりの仕組みは再編すべきでしょ。 モジュールは要るって。 コンセプトもなぁ、型に制約を付けるって普通にやりたいことじゃん? ちょっとした制約を付けるためにまわりくどいメタプログラミングなんてやりたくないよ。 現代的な静的型付け言語ならあって然るべき機能が順当に入るってだけのこと…… と思ってたら延び延びになっちゃったから待たされてる感じが強い。
984 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 00:55:51 ID:MjAWY572.net] javaはヌルポ出すくせにポインタじゃないのか ポはなんの略なんだろう
985 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 01:06:28 ID:/0JfR++J.net] >>941 公式は "A value of a pointer type ... represents the address of the first byte ..." 「ポインタ型の値はアドレスを表す」となってる。 https://timsong-cpp.github.io/cppwp/n4659/basic.compound#3 アドレスに加えて他の情報を持つ可能性は否定されないので、いろんな人が言ってるように 厳密にはイコールではないね。
986 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 01:08:43 ID:U1PsHN2Y.net] >>958 要らんなどと一言も言ってないぞ 言い回しがそれっぽいってだけ だいたいモジュールはまだ20では標準ライブラリには使われないし 「コンセプトはよ来い」とか上級者ぶりたい初心者がよく言うけど、その中に「自分で実際にコンセプトを定義する奴」などほぼ居ないだろ 個人的にはこれまでSFINAEでどうにかしてたメタプログラミング用の要件チェックのコードを 全部コンセプトに直すのクソだるい(便利になるだろうけどエラーメッセージ以外で実感するのはまだまだ先) だいたい来るのはわかってんだからもう一喜一憂するような話でもない
987 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 01:08:59 ID:70BTs5bI.net] 今も昔もアドレスとポインタの意味は変わってないんでないの? 「アドレス」=メモリ上のオブジェクトの位置を表す番地(具体的には整数値) 「ポインタ」= (1)何らかのアドレスを格納したT*型の変数(オブジェクト)。生ポインタ。 (2)「アドレス」と同じ意味で用いる 昔からポインタ(2)の用法でアドレスとポインタを同一視して使われるだけで、ポインタ(1)の用法で「アドレス」とは言わんでしょ。 to_addressの件も、引数として受けとるオブジェクトに対する「アドレス」の値を返すのだからto addressと言う命名で適切だろう。ここでto pointerとしたら直感的に「ポインタ」(1)の意味で解釈されかねず、下手な命名だと思う。
988 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 01:50:15 ID:kN8V6wKW.net] 言葉遊びというか言葉の意味の違いでかみあってないだけじゃろ こうした文脈でのアドレスという言葉を アドレス=機械語コードで使うのと同じ表現で指定されてるメモリアドレス の意味に無自覚に限定してるのか アドレス=なんらかの形で指定されてるメモリアドレス のゆるい意味で使っているかの話じゃ ポインタはアドレスではない、は前者の意味のアドレスに対する話で 今回の話も含めたC/C++の規格レベルでのアドレスは一貫して後者の意味じゃて
989 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 02:10:23.02 ID:X6LytJOH.net] >>913 管理者がアレだから♀
990 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 07:12:22 ID:CZDp2h8t.net] アドレスはオブジェクトの番地 ポインタはアドレスを格納する変数
991 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 08:39:51.12 ID:v4E0eL1J.net] しかしアドレスを返すと言いながら ポインタで返し、型情報が付いてきているわけだが
992 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 08:42:38.23 ID:v4E0eL1J.net] 緩い意味でのどこかを指し示す意味でのアドレスと言っているなら スマポもアドレスになるから、to_addressの意味がさらにもう何が何だか
993 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 08:50:06 ID:1ZJZZZs9.net] ポインタというよりvoid*だね void以外のポインタは実体の型により訳が変わる点が 単なるアドレスと違うところで
994 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 10:02:33 ID:v4E0eL1J.net] いやでも、to_address() の戻り値の型は void* ではなくて、ちゃんとした型情報を持った普通のポインタ型だよ void* にはならないよ
995 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 10:06:23 ID:yrj+fbAX.net] またつまんない話で盛り上がってんのな
996 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 10:42:46 ID:70BTs5bI.net] >>966 返されるのはあくまでアドレス(番地)の値だろう。型情報としてT*型を持つが、それはC/C++ではすべての式や値が型を持つから当たり前の話であって、型を持つからアドレスとは呼ばないというのはおかしな話だと思う。
997 名前:デフォルトの名無しさん [2020/01/31(金) 11:36:09.10 ID:v4E0eL1J.net] >型を持つからアドレスとは呼ばないというのはおかしな話だと思う。 つまりは ポインタ=アドレス って事ね
998 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 11:45:36 ID:GGrzMUVS.net] ポインタってのは変数のことでその中身はアドレスって第3版の時点ではっきり書かれてるぞ 型を持ってるのもあくまで変数の方だ
999 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 12:34:07 ID:AatGgooz.net] ヌルポ
1000 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 12:35:25 ID:v4E0eL1J.net] それは当たり前 そういう話ではなく う〜ん、どういえばいいか 例えば、年齢を得る関数 int get_age() ってのがあったとして 俺は別にこれに疑問を持たんし、何とも思わない to_address それは int に対して age の方が高度で抽象的な概念になってるから ところが pointer to_address() の場合はこれが逆になってて pointer の方が address より高度で抽象的な概念になってる だからこう、本質的に気持ち悪いというか 先の例で言えば まぁ適切な例かは分からないが age_t get_int() ってなってたらキモイだろう
1001 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 12:37:15 ID:v4E0eL1J.net] なんか途中で送信してしまった それは当たり前 そういう話ではなく う〜ん、どういえばいいか 例えば、年齢を得る関数 int get_age() ってのがあったとして 俺は別にこれに疑問を持たんし、何とも思わない to_address() と何が違うか それは int に対して age の方が高度で抽象的な概念になってるから ところが pointer to_address() の場合はこれが逆になってて pointer の方が address より高度で抽象的な概念になってる だからこう、本質的に気持ち悪いというか 先の例で言えば、まぁ適切な例かは分からないが age_t get_int() ってなってたらキモイだろう
1002 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 12:45:36 ID:GGrzMUVS.net] なんか勝手に幻想抱いてるけどポインタに入れるものは常にアドレスだから 何もおかしくない
1003 名前:デフォルトの名無しさん [2020/01/31(金) 12:46:08 ID:YmbKsQW3.net] VLTのto_addressは欲しい
1004 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 12:46:37 ID:v4E0eL1J.net] でさ、 age_t get_int() ってのを見たとき 「age_t の中身は int だし int を get してそれが age_t に入っているのだから 解釈としては問題ない」 って感じのことを言ってるレスが結構あったけど 俺はなんか違うような気がするって言ってるわけ
1005 名前:tォルトの名無しさん mailto:sage [2020/01/31(金) 12:48:59 ID:v4E0eL1J.net] 具体的には >>977 とかね age_t の中身は常に int だから〜的な だとしても age_t get_int() とは書かんだろう、というのが俺の主張だから
1006 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 13:07:50 ID:AatGgooz.net] アドレスとポインタってのは ageとage_tの関係
1007 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 13:13:53 ID:GGrzMUVS.net] じゃあint *p = &a;の&もアドレスを取る演算子じゃなくて ポインタを取る演算子に名前変えてもらうようにお願いしたら?
1008 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 17:37:24 ID:aVH6lH01.net] アドレスはデコーダに入力するビット列 (ハードウエアの概念) ポインタはアドレスを扱うことを目的とするデータ型 (プログラム言語の概念) IEEE754とdoubleのような関係だ
1009 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 17:44:13 ID:MQmpFGUT.net] 通常はポインタが数値であることなんてのは意識せんわな。 リングバッファなんかを取り扱うなら嫌でも意識することになるが。
1010 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 18:16:27.29 ID:HzrC4w9c.net] ポインタが数値がどうか意識しないと リングバッファも作れないようなのが C++を使うのか
1011 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 18:34:36 ID:Dscz4LHl.net] 分岐無くす高速化でもしているんじゃね
1012 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 18:37:20 ID:CZDp2h8t.net] >>976 その例は逆 アドレスとポインタは本質(イデア)とその表現の関係にある (イデア <-> 表現) 年齢 <-> 整数 色 <-> RGB値 アドレス <-> ポインタ この関係に照らせば、年齢を取得する場合は int get_age(); だし、色を取得する場合は RGB get_color(); だし、アドレスを取得する場合は T* get_address(); になる
1013 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 18:53:37 ID:Nt0XFA2s.net] その哲学続けるの
1014 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 19:10:20 ID:xOuBGXY8.net] >>986 分岐? それも普通は不要 アドレスを意識するのはDMAなど ハードウェアでリングバッファを使う時くらい
1015 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 19:13:50 ID:MjAWY572.net] ハードウェアとのDMAならポインタにいれるアドレス自体は気にしないだろ 特定の物理メモリを適当な仮想アドレスにマップして使うのだし
1016 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 19:35:40 ID:xOuBGXY8.net] DMAが扱うのは物理アドレス
1017 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 19:42:13 ID:xOuBGXY8.net] じゃないのもあったりするのか? チープなマイコンのDMAしか直接扱ったことがなくて
1018 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 19:51:22 ID:aVH6lH01.net] 仮想アドレスってことはページフォールトがあるってことだろ OSによってページインされるまで待つことになるが そこまでペリフェラルで面倒見る必要あるか考えてみそ
1019 名前:◆QZaw55cn4c mailto:sage [2020/01/31(金) 19:51:32 ID:tTpxWp9S.net] >>933 どれくらいブラックでしょうか? https://mevius.5ch.net/test/read.cgi/tech/1434079972/21 https://ideone.com/9KIuSD
1020 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 19:53:30.58 ID:aVH6lH01.net] 未練
1021 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 19:54:58.34 ID:xOuBGXY8.net] >>993 フォルトならエラーで止めときゃいいんでない? そこまでハードで面倒見る必要は無い
1022 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 19:55:32.42 ID:yrj+fbAX.net] 最近はIOMMUが一般的
1023 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 20:02:09.40 ID:yrj+fbAX.net] >>993 おいおいそんなわけないだろ デバイスがさわるメモリはページアウトしない でも物理アドレスを使わない理由は何でしょう? あスレ違いだな
1024 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 20:34:35 ID:aVH6lH01.net] >>996 ペリフェラルって何だと思う? >>998 循環論法だな
1025 名前:デフォルトの名無しさん mailto:sage [2020/01/31(金) 20:54:47.19 ID:Nt0XFA2s.net] C++相談室 part148 https://mevius.5ch.net/test/read.cgi/tech/1580471646/
1026 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 44日 2時間 57分 54秒
1027 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています