[過去ログ] ふらっと C#,C♯,C#(初心者用) Part153 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
528
(3): デフォルトの名無しさん (ワッチョイ 9901-45BR) [] 2022/01/07(金) 12:38:03 ID:6zNCaZbD0(1/12) AAS
>>509
509(2): デフォルトの名無しさん (アウアウウー Saa5-45BR) [sage] 2022/01/06(木) 20:59:03 ID:snULIxlRa(1) AAS
>>487
問題設定自体を変えた方がいいかもね。
なぜ値型ではだめなのか?と。

値型だと少なくとも「フールドを増やしたサブクラスの値を
ベースクラスの型の変数に入れる」なんて芸当は難しくなるね。

というか、こういう禅問答みたいな話は(たぶん重要なんだろうとは思うけど)
初心者は後回しにした方が絶対にいいと思う。
>> 値型だと少なくとも「フールドを増やしたサブクラスの値を
>> ベースクラスの型の変数に入れる」なんて芸当は難しくなるね。

すみません。良く分かりません。クラスが値型のC++で
「フールドを増やしたサブクラスの値をベースクラスの型の変数に入れる」
なんて芸当、なんの問題もなくできると思うのですが

>>510
>>文字列が値型だとどうなるか考えてみれば?

文字列は内部実装は参照ですが、ユーザ見えは値型と同じだと思うんですが・・・
内部でどう実装されているのかは、そんなに説明するつもりもないし・・・
530
(1): デフォルトの名無しさん (ワッチョイ 9901-45BR) [] 2022/01/07(金) 13:01:07 ID:6zNCaZbD0(2/12) AAS
返答ありがとうございます。

>>501
501(1): デフォルトの名無しさん (アウアウウー Saa5-FJ/U) [sage] 2022/01/06(木) 19:34:56 ID:jNRDp0FJa(1) AAS
>>498
逆に参照型じゃないならどうする?
多くのデータを抱えたクラスを毎度毎度コピーして渡すコピー型にでもする?
>>逆に参照型じゃないならどうする?

c++ではクラスは参照型ではないですよね?
c#では構造体は参照型ではないですよね?

>>502
502(1): デフォルトの名無しさん (ワッチョイ 9d78-iZeD) [sage] 2022/01/06(木) 19:35:48 ID:Bcw/lb7Z0(1) AAS
>>498
C# クラス 参照型
でググれば一番上にお前が望んでいる答えがあるぞ
>> C# クラス 参照型
>> でググれば一番上にお前が望んでいる答えがあるぞ

配列が参照型なのを考慮すると、高速化・・・・
いや、そのサイト見てると高速化よりも
ポインタを無理やり追い出した弊害に思えてきました・・
534: デフォルトの名無しさん (ワッチョイ 9901-45BR) [] 2022/01/07(金) 13:08:54 ID:6zNCaZbD0(3/12) AAS
>>529
529(1): デフォルトの名無しさん (スップ Sdc2-MYyk) [sage] 2022/01/07(金) 13:00:57 ID:y6x0s+uzd(2/3) AAS
>>528
ベースクラスの変数に入れることはなんの問題もないけど逆の操作派生クラスに戻せなくなる
C++でもそうだけどnewされた時の型をベースクラスが覚えておかないとvirtualとかasが使えない
>>C++でもそうだけど

まことに申し訳ないけど、何を言いたいのか全く理解できません。
クラスが値型のC++でも通用する話を出してきても???と思うんですが
536: デフォルトの名無しさん (ワッチョイ 9901-45BR) [] 2022/01/07(金) 13:12:31 ID:6zNCaZbD0(4/12) AAS
>>532
532(1): デフォルトの名無しさん (スップ Sdc2-MYyk) [sage] 2022/01/07(金) 13:03:54 ID:y6x0s+uzd(3/3) AAS
>>528
型ってのはコンパイル時に大きさ(byte数と配置)が決まってないといけないという縛りがCのときからある
長さがいくつになるか分からんstringは参照型にするしかない
それだとクラスは値型でOKという話になっちゃいます。
537
(1): デフォルトの名無しさん (ワッチョイ 9901-45BR) [] 2022/01/07(金) 13:17:33 ID:6zNCaZbD0(5/12) AAS
>>535
535(1): デフォルトの名無しさん (ワッチョイ e12d-qpXy) [sage] 2022/01/07(金) 13:09:35 ID:IAj8vN+S0(1/2) AAS
>>530
生のポインタだとオブジェクトを移動して断片化したメモリの整理が出来ない
ひょっとして私根本的な所を理解していないのかな?
class clsA { class clsB { class clsC { xxx }}}
みたいなクラスの内部にクラスを含んだクラスであっても
GCでガンガン割り当てられているメモリアドレスを
動かされると言いたいのでしょうか??
540
(1): デフォルトの名無しさん (ワッチョイ 9901-45BR) [] 2022/01/07(金) 13:28:12 ID:6zNCaZbD0(6/12) AAS
>>538
538(1): デフォルトの名無しさん (ワッチョイ ed18-TVXy) [sage] 2022/01/07(金) 13:18:48 ID:qow9t6Ky0(6/11) AAS
で参照の何を議論してるんだ?
c#のクラスが参照型なのが許せない!!って言いたいのか? キミがそういうのならそうだろう。キミの中ではな。
>> c#のクラスが参照型なのが許せない!!って言いたいのか?

質問を読んでそういう理解なのでしょうか?
質問を読まずにそういう理解なのでしょうか?
548
(1): デフォルトの名無しさん (ワッチョイ 9901-45BR) [] 2022/01/07(金) 15:17:14 ID:6zNCaZbD0(7/12) AAS
>>546
546(2): デフォルトの名無しさん (ワッチョイ ed18-TVXy) [sage] 2022/01/07(金) 14:24:42 ID:qow9t6Ky0(9/11) AAS
>>544
え? コピーのコストが違うから分けたという単純な話だが。
Cだって配列のコピーは重いから引数で参照渡しされるだろう?
>> コピーのコストが違うから分けたという単純な話

確かにそんな感じですね。
クラスが値型のc++が遅くて
クラスが参照型のc#が早いなんて
全く聞いたことないのですが、
MSがトチ狂って高速化を優先(それ以外を犠牲)したようですね。
555
(2): デフォルトの名無しさん (ワッチョイ 9901-45BR) [] 2022/01/07(金) 19:37:25 ID:6zNCaZbD0(8/12) AAS
>>546
>>Cだって配列のコピーは重いから引数で参照渡しされるだろう?

つ【std::vectorは参照ではない】
557: デフォルトの名無しさん (ワッチョイ 9901-45BR) [] 2022/01/07(金) 19:41:19 ID:6zNCaZbD0(9/12) AAS
>>554
554(2): デフォルトの名無しさん (アウアウウー Saa5-45BR) [sage] 2022/01/07(金) 19:02:16 ID:NAsC2Vwba(1/4) AAS
>>528
正直C++よく知らんので調べてみたけど、だから↓にあるような「問題」があるわけだよね
外部リンク[html]:www.cloverfield.co.jp

だから他の人が指摘しているstringのようなケースを無視するとしても、
値型で無理に継承を実現しようとすると、

(1) >>509に書いたように多態を諦めるか

(2) メモリ効率を犠牲にして、ベースクラスの変数のメモリ上のサイズは全ての派生クラスの
「共用体」のサイズとする。当然全ての型はinternalとして定義する必要もある。

こういうありがたくない制約が出来ちゃうでしょ
>> 正直C++よく知らんので調べてみたけど、だから↓にあるような「問題」があるわけだよね

菱形継承はいろいろと問題あるからね。菱形継承問題でググってみな
それにc#は多重継承できないからね・・・
559
(1): デフォルトの名無しさん (ワッチョイ 9901-45BR) [] 2022/01/07(金) 19:44:39 ID:6zNCaZbD0(10/12) AAS
>>554
>> ベースクラスの変数のメモリ上のサイズは

いや、ベースクラスの変数のメモリ上のサイズは
ベースクラスが持っている変数のメモリ上のサイズの合計
(パディング考慮)でしょうが・・・
562
(1): デフォルトの名無しさん (ワッチョイ 9901-45BR) [] 2022/01/07(金) 19:48:35 ID:6zNCaZbD0(11/12) AAS
>>558
558(1): デフォルトの名無しさん (ワッチョイ 4124-iMNY) [sage] 2022/01/07(金) 19:42:11 ID:46kMC38t0(2/4) AAS
>>555
push_backでコピーorムーブが発生するってことを言いたいん?
そのコピーコストを無視できないくらい大きなもの扱ってるときは正にC#の参照型Listのようにポインタ型のvectorを作るか、resize+インデクサアクセスで直埋め込みするじゃん
引数で参照渡しされるだろう?

と言ってるので『std::vectorを引数にする時は参照渡しではない』という意味で言ってるが
564
(1): デフォルトの名無しさん (ワッチョイ 9901-45BR) [] 2022/01/07(金) 19:54:17 ID:6zNCaZbD0(12/12) AAS
>>561
561(1): デフォルトの名無しさん (アウアウウー Saa5-45BR) [sage] 2022/01/07(金) 19:47:36 ID:NAsC2Vwba(3/4) AAS
>>559
だから、そうだとしてそれにフィールドを追加した派生クラスの値を入れられるんですかと
つまり『ポインタを無理やり追い出した弊害に』だよなぁ
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.033s