X



C++相談室 part147
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2019/12/18(水) 17:56:53.03ID:uFDqtnkl
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part146
https://mevius.5ch.net/test/read.cgi/tech/1573094136/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

↑え?だってお前、普通ダイナミックリンクするだろ?
"ダイナミックリンク"す・れ・ば、ファイルサイズ**増えないです**
0952デフォルトの名無しさん
垢版 |
2020/01/31(金) 00:46:15.67ID:S0Mdice7
常識なんかどんどん変るからな、とくにC/C++みたいな歴史が長い世界は
ピュアCの時代にはそもそもポインタといえばたしかにその値がアドレス(位置情報)
として機能する値と一致していたがファンシーポインタがある現代では
"ポインタ"の実体とそれが保持したい情報(アドレス情報)は一致すると思わない事が常識になる
"ポインタ"は情報としては何かの位置を差す値を保持はしているがそのオブジェクト
自体は保持しているアドレス情報とはまったく無関係のメモリ空間にある何かである
現代の感覚でいうともし std::to_pointer というネーミングにすると
"は?ポインタをポインタに変換するってどういう意味だよ????"とむしろ混乱の元になるってわけだ
0953デフォルトの名無しさん
垢版 |
2020/01/31(金) 00:46:56.64ID:v4E0eL1J
なんか長々書いたが
今の時代、スマポこそがポインタであって、もはや生ポインタはアドレスなんだよ!
人間も父が爺になって子が父に繰り上がっていくものだから
時代と共に名実ともに出世していくのは普通の事なのかもしれない
0954デフォルトの名無しさん
垢版 |
2020/01/31(金) 00:47:48.87ID:88e+X9K2
ちょっと江添呼んできて。
電車代出すから。
0955デフォルトの名無しさん
垢版 |
2020/01/31(金) 00:51:32.98ID:v4E0eL1J
ただどうしても言いたいのは
生ポインタは address じゃなくても
別に raw_pointer とか native_pointer で良くね?
address って言ったら、ただの数値のイメージがあるわ
0956デフォルトの名無しさん
垢版 |
2020/01/31(金) 00:54:08.51ID:88e+X9K2
アドレスに無料で型情報をつけるアイデアをひらめいたときは、俺って天才かも?って思ったんだろな。
0957デフォルトの名無しさん
垢版 |
2020/01/31(金) 00:54:15.91ID:S0Mdice7
>>951
我々の感覚からすると実際その通りなんだが、Java脳の人々にとってはそうではない
彼等はスタックという感覚も非常にうすい
なぜならオブジェクトはスタックにはとれず、常に new (ヒープ)しかないから
我々はクラスのインスタンスがスタックにあるのかヒープにあるのかは無意識に常に
判断する事に慣れているが、これをjava脳の人に説明するのはしばしば困難なときがある
0958はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/01/31(金) 00:54:31.65ID:T8rV4kLc
>>929
宣言をヘッダファイルに分割する方式は C++ の意味不明さの根源のひとつじゃない?
それで宣言と定義を分ける運用がキッチリできるのならそれはそれでよかったけど、
テンプレートとインラインの活用でヘッダファイルに書く分量がだいぶん多くなってヘッダファイルってなんだっけって気持ちになる。
このあたりの仕組みは再編すべきでしょ。 モジュールは要るって。

コンセプトもなぁ、型に制約を付けるって普通にやりたいことじゃん?
ちょっとした制約を付けるためにまわりくどいメタプログラミングなんてやりたくないよ。
現代的な静的型付け言語ならあって然るべき機能が順当に入るってだけのこと……
と思ってたら延び延びになっちゃったから待たされてる感じが強い。
0961デフォルトの名無しさん
垢版 |
2020/01/31(金) 01:08:43.20ID:U1PsHN2Y
>>958
要らんなどと一言も言ってないぞ
言い回しがそれっぽいってだけ

だいたいモジュールはまだ20では標準ライブラリには使われないし
「コンセプトはよ来い」とか上級者ぶりたい初心者がよく言うけど、その中に「自分で実際にコンセプトを定義する奴」などほぼ居ないだろ

個人的にはこれまでSFINAEでどうにかしてたメタプログラミング用の要件チェックのコードを
全部コンセプトに直すのクソだるい(便利になるだろうけどエラーメッセージ以外で実感するのはまだまだ先)
だいたい来るのはわかってんだからもう一喜一憂するような話でもない
0962デフォルトの名無しさん
垢版 |
2020/01/31(金) 01:08:59.37ID:70BTs5bI
今も昔もアドレスとポインタの意味は変わってないんでないの?
「アドレス」=メモリ上のオブジェクトの位置を表す番地(具体的には整数値)
「ポインタ」=
(1)何らかのアドレスを格納したT*型の変数(オブジェクト)。生ポインタ。
(2)「アドレス」と同じ意味で用いる

昔からポインタ(2)の用法でアドレスとポインタを同一視して使われるだけで、ポインタ(1)の用法で「アドレス」とは言わんでしょ。
to_addressの件も、引数として受けとるオブジェクトに対する「アドレス」の値を返すのだからto addressと言う命名で適切だろう。ここでto pointerとしたら直感的に「ポインタ」(1)の意味で解釈されかねず、下手な命名だと思う。
0963デフォルトの名無しさん
垢版 |
2020/01/31(金) 01:50:15.23ID:kN8V6wKW
言葉遊びというか言葉の意味の違いでかみあってないだけじゃろ

こうした文脈でのアドレスという言葉を
アドレス=機械語コードで使うのと同じ表現で指定されてるメモリアドレス
の意味に無自覚に限定してるのか
アドレス=なんらかの形で指定されてるメモリアドレス
のゆるい意味で使っているかの話じゃ

ポインタはアドレスではない、は前者の意味のアドレスに対する話で
今回の話も含めたC/C++の規格レベルでのアドレスは一貫して後者の意味じゃて
0966デフォルトの名無しさん
垢版 |
2020/01/31(金) 08:39:51.12ID:v4E0eL1J
しかしアドレスを返すと言いながら
ポインタで返し、型情報が付いてきているわけだが
0967デフォルトの名無しさん
垢版 |
2020/01/31(金) 08:42:38.23ID:v4E0eL1J
緩い意味でのどこかを指し示す意味でのアドレスと言っているなら
スマポもアドレスになるから、to_addressの意味がさらにもう何が何だか
0968デフォルトの名無しさん
垢版 |
2020/01/31(金) 08:50:06.41ID:1ZJZZZs9
ポインタというよりvoid*だね
void以外のポインタは実体の型により訳が変わる点が
単なるアドレスと違うところで
0969デフォルトの名無しさん
垢版 |
2020/01/31(金) 10:02:33.89ID:v4E0eL1J
いやでも、to_address() の戻り値の型は
void* ではなくて、ちゃんとした型情報を持った普通のポインタ型だよ
void* にはならないよ
0971デフォルトの名無しさん
垢版 |
2020/01/31(金) 10:42:46.16ID:70BTs5bI
>>966
返されるのはあくまでアドレス(番地)の値だろう。型情報としてT*型を持つが、それはC/C++ではすべての式や値が型を持つから当たり前の話であって、型を持つからアドレスとは呼ばないというのはおかしな話だと思う。
0972デフォルトの名無しさん
垢版 |
2020/01/31(金) 11:36:09.10ID:v4E0eL1J
>型を持つからアドレスとは呼ばないというのはおかしな話だと思う。

つまりは ポインタ=アドレス って事ね
0973デフォルトの名無しさん
垢版 |
2020/01/31(金) 11:45:36.21ID:GGrzMUVS
ポインタってのは変数のことでその中身はアドレスって第3版の時点ではっきり書かれてるぞ
型を持ってるのもあくまで変数の方だ
0975デフォルトの名無しさん
垢版 |
2020/01/31(金) 12:35:25.45ID:v4E0eL1J
それは当たり前
そういう話ではなく
う〜ん、どういえばいいか
例えば、年齢を得る関数 int get_age() ってのがあったとして
俺は別にこれに疑問を持たんし、何とも思わない
to_address
それは int に対して age の方が高度で抽象的な概念になってるから
ところが pointer to_address() の場合はこれが逆になってて
pointer の方が address より高度で抽象的な概念になってる
だからこう、本質的に気持ち悪いというか
先の例で言えば
まぁ適切な例かは分からないが
age_t get_int()
ってなってたらキモイだろう
0976デフォルトの名無しさん
垢版 |
2020/01/31(金) 12:37:15.21ID:v4E0eL1J
なんか途中で送信してしまった

それは当たり前
そういう話ではなく
う〜ん、どういえばいいか
例えば、年齢を得る関数 int get_age() ってのがあったとして
俺は別にこれに疑問を持たんし、何とも思わない
to_address() と何が違うか

それは int に対して age の方が高度で抽象的な概念になってるから
ところが pointer to_address() の場合はこれが逆になってて
pointer の方が address より高度で抽象的な概念になってる
だからこう、本質的に気持ち悪いというか
先の例で言えば、まぁ適切な例かは分からないが
age_t get_int()
ってなってたらキモイだろう
0977デフォルトの名無しさん
垢版 |
2020/01/31(金) 12:45:36.65ID:GGrzMUVS
なんか勝手に幻想抱いてるけどポインタに入れるものは常にアドレスだから
何もおかしくない
0978デフォルトの名無しさん
垢版 |
2020/01/31(金) 12:46:08.71ID:YmbKsQW3
VLTのto_addressは欲しい
0979デフォルトの名無しさん
垢版 |
2020/01/31(金) 12:46:37.74ID:v4E0eL1J
でさ、
age_t get_int() ってのを見たとき
「age_t の中身は int だし
 int を get してそれが age_t に入っているのだから
 解釈としては問題ない」
って感じのことを言ってるレスが結構あったけど
俺はなんか違うような気がするって言ってるわけ
0980デフォルトの名無しさん
垢版 |
2020/01/31(金) 12:48:59.87ID:v4E0eL1J
具体的には >>977 とかね
age_t の中身は常に int だから〜的な
だとしても age_t get_int() とは書かんだろう、というのが俺の主張だから
0982デフォルトの名無しさん
垢版 |
2020/01/31(金) 13:13:53.02ID:GGrzMUVS
じゃあint *p = &a;の&もアドレスを取る演算子じゃなくて
ポインタを取る演算子に名前変えてもらうようにお願いしたら?
0983デフォルトの名無しさん
垢版 |
2020/01/31(金) 17:37:24.29ID:aVH6lH01
アドレスはデコーダに入力するビット列 (ハードウエアの概念)
ポインタはアドレスを扱うことを目的とするデータ型 (プログラム言語の概念)

IEEE754とdoubleのような関係だ
0984デフォルトの名無しさん
垢版 |
2020/01/31(金) 17:44:13.04ID:MQmpFGUT
通常はポインタが数値であることなんてのは意識せんわな。
リングバッファなんかを取り扱うなら嫌でも意識することになるが。
0985デフォルトの名無しさん
垢版 |
2020/01/31(金) 18:16:27.29ID:HzrC4w9c
ポインタが数値がどうか意識しないと
リングバッファも作れないようなのが
C++を使うのか
0987デフォルトの名無しさん
垢版 |
2020/01/31(金) 18:37:20.08ID:CZDp2h8t
>>976
その例は逆
アドレスとポインタは本質(イデア)とその表現の関係にある
(イデア <-> 表現)
年齢 <-> 整数
色 <-> RGB値
アドレス <-> ポインタ

この関係に照らせば、年齢を取得する場合は
int get_age();
だし、色を取得する場合は
RGB get_color();
だし、アドレスを取得する場合は
T* get_address();
になる
0989デフォルトの名無しさん
垢版 |
2020/01/31(金) 19:10:20.77ID:xOuBGXY8
>>986
分岐?
それも普通は不要

アドレスを意識するのはDMAなど
ハードウェアでリングバッファを使う時くらい
0990デフォルトの名無しさん
垢版 |
2020/01/31(金) 19:13:50.70ID:MjAWY572
ハードウェアとのDMAならポインタにいれるアドレス自体は気にしないだろ
特定の物理メモリを適当な仮想アドレスにマップして使うのだし
0992デフォルトの名無しさん
垢版 |
2020/01/31(金) 19:42:13.08ID:xOuBGXY8
じゃないのもあったりするのか?
チープなマイコンのDMAしか直接扱ったことがなくて
0993デフォルトの名無しさん
垢版 |
2020/01/31(金) 19:51:22.09ID:aVH6lH01
仮想アドレスってことはページフォールトがあるってことだろ
OSによってページインされるまで待つことになるが
そこまでペリフェラルで面倒見る必要あるか考えてみそ
0998デフォルトの名無しさん
垢版 |
2020/01/31(金) 20:02:09.40ID:yrj+fbAX
>>993
おいおいそんなわけないだろ
デバイスがさわるメモリはページアウトしない
でも物理アドレスを使わない理由は何でしょう?
あスレ違いだな
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 44日 2時間 57分 54秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況