0からの、超初心者C++相談室

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/11/12(月) 14:55:13.35ID:Tf74ZWQr
何にも知らない0からの出発、超初心者のためのC++相談室
2023/11/12(日) 13:14:04.39ID:xpiKETrj
> 基底クラスのポインタで派生クラスのオブジェクトをポイントできるというものです。
> オブジェクトのボインタを使う場面があまりないので用途を聞きました。

アップキャストのことだろうかね。
必ずといっていいほど使う機会がある。関数の引数にオブジェクトを渡すときとか
2023/11/13(月) 06:27:48.00ID:qbVz2ceg
>>561 は、最初から必要数が決まっているオブジェクトしか作ったことがないのかな。
リストやツリー構造を自作していれば、①が必要なケースは分かると思うけど。
569デフォルトの名無しさん
垢版 |
2023/11/13(月) 10:31:45.02ID:IRswNIWu
>>567
型チェックしなきゃ危険だけどな
570デフォルトの名無しさん
垢版 |
2023/11/13(月) 13:26:36.10ID:qAieNn1D
uniqu_ptr
2023/11/13(月) 18:54:22.80ID:CCXWxw1E
>>570
おおスマン
typoだね
2023/11/13(月) 23:59:54.01ID:RLYu3oMv
>>565 ほか皆さんありがとう。

自分の関わってきた分野が小規模組み込みだからか、そもそもCでmallocの使用経験がないのです。
処理系がmallocをサポートしないMCUもありました(使いたいなら自分で作ってという思想、標準入出力も)。
なので>>568 さんの指摘は当たりです。

c++に挑戦している今の環境も小規模なので、newの利用はほどほどに検討してみます。
2023/11/14(火) 00:03:40.68ID:F1cdKor4
>>567
だいたい参照で済んでしまいます
2023/11/14(火) 12:46:18.30ID:SRCspH78
mallocもnewも使ったこと無いってやばいぞ
2023/11/14(火) 15:58:08.40ID:oTbgWDDI
new 演算子はオーバーロードも出来て、型ごとにメモリの確保の仕方を変えるといったようなことも出来る。
メモリの確保と値の構築を別のレイヤとして定義できるということに意味がある。 (いわゆる関心の分離?)
低レイヤでも便利な場面はたぶんある。

分離する甲斐がないほど小規模ならべた書きが悪いわけじゃないけど
あえてべた書きという設計を選ぶってのとなんもわからんで使わないってのでは違う。
知っておくに越したことはないよ。
576デフォルトの名無しさん
垢版 |
2023/11/14(火) 21:59:36.46ID:WxE96Zj2
空配列を用意してそれを順繰り使い回す
チープなCPUでは必須の方法
577デフォルトの名無しさん
垢版 |
2023/11/14(火) 22:15:51.21ID:VpxEmvp/
RAM2KBでmallocが必要かどうか
578デフォルトの名無しさん
垢版 |
2023/11/15(水) 09:06:17.34ID:vh+zgKB1
よく
 A a = new A();
 a->b();
 delete a;
みたいに生成してすぐ解放ってのがありますけど、
 A a;
 a.b();
じゃ駄目なんでしょうか。前者に何のメリットがあるんでしょうか。
579デフォルトの名無しさん
垢版 |
2023/11/15(水) 09:39:21.05ID:88mXe6hW
後者はスタックを消費するから A が巨大なオブジェクトだったら困るとかかな
2023/11/15(水) 09:40:08.83ID:7t1hSBTd
>>578
A *a = new A(); よね、一応
bを呼び出したいだけなら特にメリットはないよ
581デフォルトの名無しさん
垢版 |
2023/11/15(水) 10:25:46.06ID:2QF9cM/v
スタック?
そんな所にゃ領域取らないだろ
2023/11/15(水) 16:06:06.00ID:rnHf5KLb
何したらここの人らみたいにプログラム詳しくなれるの?PC98からやらなきゃダメ?
2023/11/15(水) 16:35:01.46ID:k729Xl/N
>>578
> ありますけど、

ないよ……。
少なくともそう頻繁にはない。

あるとしたら >>579 が指摘するように A が特に巨大な場合というのはひとつの可能性。
ただ、巨大になるのがわかってるならリソースを分割して A の中で
上手いことやりくりする (A 自体の大きさは抑える) べきで、
クラスを使う側で配慮しなきゃならないのは普通は悪い設計だと思う。

第二の可能性として、 new 演算子をオーバーロードして
そのオブジェクトがメモリの特定の場所に対応づけられる場合。
メモリバス経由でデバイスと接続するようなアーキテクチャもまあまあ有るから
それを C++ 上ではオブジェクトのように抽象化するということはあるかもしれない。
でもそれは低いレイヤだけの話で、
適当にラップするクラスを作ってもうちょっと抽象度の高いクラスを挟むのが普通だと思う。
2023/11/15(水) 18:55:56.04ID:aqUxtLPE
超初心者スレで揚げ足とったり、マウントしたり
2023/11/15(水) 19:46:52.63ID:O3I3kWYX
>>582
何か作ってるうちに嫌でも詳しくなるよ
2023/11/15(水) 21:31:49.26ID:k729Xl/N
PC9801 時代を知ってる人は色々と詳しいと思うがその知識が役立っているというわけでもなくて、 PC9801 時代からの三十年くらいあれば詳しくなって当たり前ってだけだぞ。
たくさんの知識を身に付けるにはたくさん学ぶというシンプルな話。
587デフォルトの名無しさん
垢版 |
2023/11/16(木) 11:26:46.68ID:QXdh7keC
当時は役に立ったけど今はオワコンの技術と
今でも役に立ってる技術と
どっちが割合多い?
588デフォルトの名無しさん
垢版 |
2023/11/16(木) 11:55:31.84ID:nxuWB9A/
「技術は陳腐化するが考え方は永遠である」
2023/11/16(木) 14:01:30.65ID:brAf4s3Y
新しい技術的流行が昔からあったやつの焼き直しってことは珍しいことじゃない。
「なんや、結局は××やないか」というときに××自体が廃れていてもう使わなくても
理解のためには役立っているのでオワコンとも役に立ってるとも言えたりする。
590デフォルトの名無しさん
垢版 |
2023/11/16(木) 15:18:16.01ID:QXdh7keC
ActiveXってCOMだよね
COMってOLEだよね
591デフォルトの名無しさん
垢版 |
2023/11/20(月) 15:56:09.22ID:QJSPRwrd
こんにちは坂本と申します。
C++を0から勉強したく書き込み致しました。
私ごとですが先月定年退職し、やっと自由な時間がもてる様になりました。
在職中ずっとプログラミングの勉強をしたかったのですが子育てや職場がプラントの電気機械保全業務の3交代だった為に定年後を楽しみに我慢してまいりました。
プログラミングの知識は全くなく制御盤のPLCでニーモニック語でリストプログラミングをするぐらいしか経験はありません。
有料でもかまいませんので何回でも質問ができ、すぐに返答と解説をして頂けるサービスや学習機関がございましたら教えて頂きたく書き込ませてもらいました。
漠然とした質問で申し訳ありませんが今月よりプログラミングの勉強を独学で始めましたが質問できる知り合いもいなく困り果てております。
長文失礼致しました。
592デフォルトの名無しさん
垢版 |
2023/11/20(月) 19:07:01.26ID:UNSN9Hhc
>>590
DDEは?
2023/11/21(火) 00:24:28.42ID:cXhp/VaI
C/C++ はポインターがあるから、ややこしい。
10年やっても無理

Ruby をやれ。
半年で、Ruby on Rails も出来る
594デフォルトの名無しさん
垢版 |
2023/11/21(火) 11:11:38.44ID:HSO31doi
神社code
2023/11/21(火) 14:22:46.70ID:tYm3I+7J
ポインターが分からない奴は
プログラムを組む資格がない
2023/11/21(火) 17:27:32.66ID:4ADiN9xr
ちゃんとした本があれば独学でそんなに困らないと思うけどな。
入門書の各章をじっくり読んで理解してから次の章に進むみたいな学習法をしているなら
詰まったときにどうしていいかわからなくなりがちなのでやめたほうがいいと思う。
色んな要素が相互に絡むので順番通りに学べるようなものじゃないから。

理解できなくてもたくさん詰め込んでいけばその内に繋がりがわかってくる。
「最初は」熟考しなくてもいい。 入ってない知識が関連するなら考えてもどうせわからん。
2023/11/21(火) 17:38:45.53ID:oh7zlSJI
>>593
ポインタ使わないこともできるのに何言ってんだ
そもそもポインタはノイマンアーキテクチャの基本なのでポインタがわからないというならコンピュータの利点を十分に利用できないということ
2023/11/21(火) 18:05:44.93ID:tYm3I+7J
ポインター: 変数が入っているアドレスの数字
なんも難しいことはない
599デフォルトの名無しさん
垢版 |
2023/11/21(火) 18:24:30.60ID:fyFN08Ef
インデックスって言えば分かる?
コンピュータにあるメモリー全体のインデックス番号
2023/11/21(火) 18:35:32.85ID:Ai4yJ31G
俺も最初全然わからなかったけどC言語ポインタ完全制覇のおかげで覚えた
601デフォルトの名無しさん
垢版 |
2023/11/21(火) 19:20:18.31ID:JkIDzJ0A
Java や C# にもポインタはあるしポインタを理解できなかったら他の言語も使えないよ
ポインタ自体は難しくないんだけど C/C++ ではポインタ演算できちゃうのが鬼門なんだよね
602デフォルトの名無しさん
垢版 |
2023/11/21(火) 20:49:14.51ID:TIZNoRj+
N88-BASICにポインタあったっけ?
603デフォルトの名無しさん
垢版 |
2023/11/21(火) 20:53:06.63ID:TIZNoRj+
ポインタの文法なんて入門書には必ず説明があるので直ぐ分かるとして
俺が初期に読んだ数冊の入門書には
それがプログラミングでどう役に立つのかが示されてなくて
悶々としながら読んでいたなぁ
604デフォルトの名無しさん
垢版 |
2023/11/21(火) 21:38:13.97ID:fyFN08Ef
ポインターなんて処理が糞遅いCPUをいかに速く動かすかって事以外に意味が無いからなぁ
2023/11/21(火) 23:15:10.49ID:mJ6deMbY
std::string str = "abc";
①str = str + "dd";
②str = "dd" + str;
これらの記述は有効のようです。
①の右辺はstr.operator+("dd");
と解釈でき理解できます。

②の右辺は "dd".operator+(str);
と書きかえるとこれは無効に見えます。

std::stringのoperator+のプロトタイプを調べたところテンプレートが駆使されており私では読めませんでした。

②が有効なのは、テンプレートの仕組み?でそう書けるようにつくられているからですか。
2023/11/22(水) 06:21:16.63ID:xG0rhWaa
>>605
非メンバ関数として定義されている。
つまり
str=std::operator+("dd", str);
に相当することをやってる。
メンバ関数として定義すると不都合が起こるから std::complex とかも非破壊的な二項演算子は非メンバ関数として定義するのが通例だよ。
2023/11/23(木) 18:16:14.60ID:yQq1Seno
>>606
本を見直したらfriendにするといい等ありました。

第1引数+第2引数、という記述があり、2個の引数を持つ+演算子関数が定義されている場合はそれが呼び出される決まりになっているのですね?
2023/11/23(木) 18:17:35.84ID:yQq1Seno
stringから離れて一般的な質問です。↑
2023/11/23(木) 20:11:53.97ID:V52ACnUy
>>607
そう。非メンバ関数として二つの演算子を受けとる operator+ があれば a+b みたいに書いたときに operator+(a,b) に読み替えられると考えてよい。
(全ての演算子を非メンバ関数として定義できるわけではない。)

余談だけど ADL という変な規則があるのは演算子が名前空間修飾できないことに対処する必要があるというのが理由のひとつで、自分が定義するクラスではこれが上手いこと作用するように設計すると便利なこともあるかもね。
2023/11/23(木) 20:13:30.07ID:V52ACnUy
>>609
間違い。
「二つの演算子」じゃなくて「二つの引数」
2023/11/23(木) 20:15:11.03ID:0De2U7us
最小のサンプルコードを書いて自分で試すと分かるし身につくよ
2023/11/23(木) 20:49:41.10ID:V52ACnUy
書いてみるというのは賛成。
でもあくまでも学んでから確かめるために書くのであって動作から言語仕様を推測したりはしないように。
C++ には未定義とか処理系定義とかがいっぱいあるからテキトーに書いたプログラムの結果が保証された動作とは限らないから。
2023/11/25(土) 11:27:01.67ID:rcrc48ZO
>>612
>でもあくまでも学んでから確かめるために書くのであって動作から言語仕様を推測したりはしないように。
横から悪いがこれには反対させてもらう
もちろん動作からの仕様の決めつけは良くないが、人間は学習する動物なので書いて動作を見てこそ上達するんだよ
丸暗記だけで理解したと勘違いしてるやつが昨今多い(そしてそういう奴に限って何も作ってない)ので、そういうのを後押しはしないで欲しい
2023/11/25(土) 11:52:38.86ID:rcrc48ZO
というか、自分の認識の間違いに気づくのもまた書いて試した時だからね(まれにコンパイラのバグだったりもするけど)
人間が頭の中で考えたことなんか穴だらけなんだから書いて試せるなら真っ先に試した方がいい
615デフォルトの名無しさん
垢版 |
2023/11/25(土) 12:13:14.81ID:vlVh3gWj
>>613
同意。
処理系依存とか未定義動作なんて中級者以上になってから気にすればいいこと
はじめは手元にある処理系の結果を「正」として学習を進めても問題ないと思う
616デフォルトの名無しさん
垢版 |
2023/11/25(土) 12:45:47.67ID:rKTwm3uz
>>596 これ
>>593 しね
617デフォルトの名無しさん
垢版 |
2023/11/25(土) 12:47:19.78ID:rKTwm3uz
>>598-599
ポインタ判らんって人はその辺は判ってんだよ
本当に判ってないのはアドレッシングモード
618デフォルトの名無しさん
垢版 |
2023/11/25(土) 12:50:17.30ID:rKTwm3uz
>>602
peek poke はあるし変数もあるから
用途という意味でのポインタはある
619デフォルトの名無しさん
垢版 |
2023/11/25(土) 12:54:57.59ID:rKTwm3uz
>>613
そうだな
Rust スレにも変なのが粘着してゴリ推ししてて迷惑
2023/11/25(土) 13:45:51.01ID:BXmPXb0v
>>613
> 書いて動作を見てこそ上達するんだよ

だから書いてみるのは賛成と書いたのだが、何に反対してるんだ?
621デフォルトの名無しさん
垢版 |
2023/11/25(土) 13:56:27.70ID:vlVh3gWj
「学んでから確かめるために書く」

↑反対されてるのはここでしょ

これどうなるんだろう?動かしてみよう!なるほどこうなるのか!という学び方でもいいと思う

あなたが言ってるのは「これどうなるんだろう?」ではダメで「こうなるはずだ!」と学んでから動かせってことだよね?
それは初心者には結構むずかしい
2023/11/25(土) 15:39:30.62ID:BXmPXb0v
>>621
> これどうなるんだろう?動かしてみよう!なるほどこうなるのか!という学び方でもいいと思う

私が言いたいのは推測できるものではないというところが主旨で、
自分が色々やってみたことが不確かな推測であることを認識した上で
きちんとした資料にあたって確かめるという順序でもかまわないとは思うよ。
出来るのならば。
やってない人が多いように私には見えているから否定的に言ってるわけだけど。

> 初心者には結構むずかしい

訓練せずに他のことをしてても出来るようにはならないでしょ。
やらなきゃずっと難しいよ。

C++ は複雑怪奇かつ規格改訂もあるのでベテランでも頻繁に仕様を参照するのが普通なわけで、
資料を参照するのを後回しにするような人間が後にそのような人間に変われるとは思わない。
623デフォルトの名無しさん
垢版 |
2023/11/25(土) 16:15:59.30ID:vlVh3gWj
「やってない人が多いように私には見えている」

多くの人が出来てないことを初心者に求めてもねェ
2023/11/25(土) 16:27:29.63ID:BXmPXb0v
>>623
「推測した後には多くの人が資料を見ること」をやってないという話だぞ。
最初に資料で学ぶ人は体系的な知識が身に付くからそっちがオススメという話だぞ。
625デフォルトの名無しさん
垢版 |
2023/11/25(土) 16:42:06.01ID:vlVh3gWj
初心者に対して「言語仕様を推測したりしないように」「学んでから確かめるために書く」って言ってたよね

言語仕様を理解してからコードを書けってことでしょ?
626デフォルトの名無しさん
垢版 |
2023/11/25(土) 16:49:08.14ID:vlVh3gWj
>>624
先にも後にも資料(言語仕様)を確認しない人が多いんでしょ
そんな難しいことを初心者にまで要求してどうすんの
2023/11/25(土) 16:51:46.77ID:BXmPXb0v
>>625
そうだよ。 言語仕様を理解してから書くのが好ましい。

理解する前に色々試すというやり方も許容しなくはないが、
それでも後では資料を見て仕様を理解するという前提があってのもの。
理解する前に色々試すタイプは資料を見なくなりがちという現実があると述べてる。
2023/11/25(土) 16:55:25.38ID:BXmPXb0v
>>626
「資料」と「仕様」を使い分けて書いてるつもり。
直接に言語仕様を読めとは述べてないよ。

プログラムを書くときは色んな資料を参考にするので
入門書程度すらちゃんと読まない人がやってけると思ってんの?
ってことを言ってる。
629デフォルトの名無しさん
垢版 |
2023/11/25(土) 17:00:19.64ID:vlVh3gWj
え? 資料=言語仕様じゃないの?

「言語仕様を推測したりはしないように」って言ってたから言語仕様に関する資料を読んでからコードを書けという意味だと解釈したのだけど

資料=入門書程度なの?
・・・なんか言ってることが変わってきたね?
630デフォルトの名無しさん
垢版 |
2023/11/25(土) 17:03:42.33ID:vlVh3gWj
ちなみに「入門書を何冊か買って読みながら進めるといいよ」みたいな書き方だったらこんなに絡んだりしてないからね?
2023/11/25(土) 17:04:18.21ID:BXmPXb0v
>>629
いや、そりゃそうでしょ。 最初から言語仕様を読めとか言わないよ。
入門書だって仕様書に基づいて書いてるし、基づいてない入門書だったらクソってだけ。
632611
垢版 |
2023/11/25(土) 17:06:46.45ID:5Y+f+Y1g
>>623
これをやってきたのがはちみつ餃子なんだよ
俺ははちみつ餃子の書き込みにいつも感心してるよ
2023/11/25(土) 17:09:19.28ID:rcrc48ZO
>言ってることが変わってきた
うん、まぁ、はちみつはそういうとこあるから・・・w
ただまぁ、言語仕様に詳しい人の存在は(はちみつに限らず)非常に有難いんだが、
実際にソフト書く上で気にしなきゃいけないのは言語仕様だけじゃない
特定のソフトの個別の問題を解決するためのアルゴリズムについて、資料があるのか?と。(すでに出来上がってて公開されてるアルゴリズムが存在する問題などほとんど無い)
一番大事なのは論理的思考力であって、なんでもはなから資料をアテにしてたら逆にそれが身につかないよ
634デフォルトの名無しさん
垢版 |
2023/11/25(土) 17:12:35.76ID:vlVh3gWj
>>631
だとしたら、言語仕様を推測するな、未定義動作や処理系がどーのこーのとずいぶんと遠回しな言い方をしたねえ
入門書を読みといいよの一言で済むのに

>>632
それは別の話。餃子がエキスパートであることは否定してない
初心者の前に高いハードルを立ててC++を聖域みたいにするのはやめて欲しいのだ
2023/11/25(土) 17:13:52.19ID:rcrc48ZO
どうも仕様オタク(言い方は悪いが、アマチュアという意味も込めて)な人達は、自分の知ってる世界が全てだと思い込んでるようで前々から問題だと思ってた
世の中、マイナーなAPIとかになると嘘を書いてることもあるし何も資料が無いことすらある

もちろん実際の動作から「今わかること以上」をわかった気になる(仕様を知った気になる)のは問題だが、
逆に言えば「仕様がこうだから間違ってないんだ」などと動作を確かめもせずに決めつけるのも問題だ
そういうのは結局本人の心的態度の問題に過ぎない
2023/11/25(土) 17:15:51.23ID:BXmPXb0v
アルゴリズムは考えればわかることもあるかもしれんが、言語仕様は考えたってわからんし。
(想像はつくことも多いけど。)
2023/11/25(土) 17:17:15.50ID:mGx3DnG8
> 書いてみるというのは賛成。
初心者はこれでもいい

> でもあくまでも学んでから確かめるために書くのであって動作から言語仕様を推測したりはしないように。
中級者以上になって言語仕様等に踏み込んだ学習をしようとするなら書いたもので仕様を測るのではなく「学んで」知るべし

と言う意味だと俺は>>612を解釈してた
2023/11/25(土) 17:21:04.72ID:BXmPXb0v
>>634
複雑難解な C++ を試させるのがハードルの低い方法だと主張したいわけ?
きちんと整備された学習ルートがあるという話なのにそれでハードルを上げてるとか言われるのは心外だわ。
639デフォルトの名無しさん
垢版 |
2023/11/25(土) 17:24:19.67ID:vlVh3gWj
「きちんと整備された学習ルートがあるという話なのに」

お前そんな話してたか?
2023/11/25(土) 17:24:48.18ID:mGx3DnG8
あれよな
・初心者スレだからアドバイスはすべて「初心者向けの内容」
・初心者スレだけどアドバイスは「初心者向けの内容」と「その先を見据えた内容」

はちみつ大先生は後者だけど、ツッコミを入れたほうは前者で読み取っているから噛み合わないってだけよな、たぶん
2023/11/25(土) 17:26:03.64ID:BXmPXb0v
>>639
まずは資料を読め (資料があるから) という主張を最初からしてるつもりだが。
2023/11/25(土) 17:34:11.58ID:xBFezCRv
「C++言語リファレンスを頭に叩き込め!!話はそれからだ」
でいいんじゃね?と俺は思っている
で、理解できない部分は入門書やサンプルコードを読んで理解する

まずは書いて試せという人もいるが俺はこの意見には賛同できない
プログラミング言語というのは日本語や英語などの自然言語と違って
少しでも間違えたら動かないし、C++の場合なら最悪システムが破壊される
理解できなくても動けばいいなどという考えの奴がいるからバグが量産されるのだ

ミスが許されないのはたとえば医者だな
医者は医者になる前に知識を詰め込むのが普通だ
知識もないのに外科手術をしたらどうなるか?
切りながら覚えろというのか?
プログラミングは手術と同様、まずは知識、次に技術が必要となる、と俺は思っている

【完】
2023/11/25(土) 17:40:31.27ID:BXmPXb0v
>>640
初心者教育は二種類に大別されると思っていて、たとえば公立学校の授業でするような
興味がない層も含めて最低限の知識は与える教育と
学ぶ意欲があって専門知識と言えるようなものを身に付けようとする者に対する教育。

前者は「興味をひく」というところから考えないといけない。
理屈よりも楽しいと思えるようなやり方が必要になることもあるだろう。

後者は理屈を避けては通れない。
理屈の身に付け方には色んな方法論があるかもしれないけど
まずは書いてあるものを読め
(先人がそれを良いやり方だと思ってまとめてくれたんだから!
手を動かす必要があると思うところでは演習問題があったりもする)
という風に考えてる。

今は初心者であるかどうかは重要ではなく
ここで相談するような層は後者のルートのつもりでいると私は思って書いてる。
2023/11/25(土) 17:45:56.52ID:Xpg7OWMd
>>642
>理解できなくても動けばいいなどという考えの奴
誰の話?
2023/11/25(土) 18:21:13.32ID:xBFezCRv
>>644
わからないか…かわいそうに…
教えてあげなぁぁい
2023/11/25(土) 18:24:14.13ID:0MoP1N3f
おちんちん舐めてごらん
647デフォルトの名無しさん
垢版 |
2023/11/26(日) 10:58:08.83ID:d/KzVdDP
>>628
最近ChatGPTに全部聴いて済ます変なのが住み着いて迷惑だな
648デフォルトの名無しさん
垢版 |
2023/11/26(日) 11:15:51.84ID:d/KzVdDP
>>642
>医者は医者になる前に知識を詰め込むのが普通だ
>知識もないのに外科手術をしたらどうなるか?
>切りながら覚えろというのか?

言いたいことは判るが「最初の医者」はどうしてたんだろうな
君の言ってるやり方は「従順な職人」を育てるやり方としては正しいが
クリエイターを育てることは出来ない
2023/11/26(日) 12:24:07.96ID:t0WQFMSf
>>642からの>>645だからな
一見それっぽいこと言ってるようで全く中身の無い事を言うアホが長いこと住み着いてる(C++系だけなのか他もなのか)
突っ込まれると頭悪い煽り方しかしてこないからすぐわかる、玄人ぶりたいだけのアホだから相手しない方がいい
650デフォルトの名無しさん
垢版 |
2023/11/26(日) 12:37:18.37ID:DTfcWvWZ
医者の下りはおかしい
医師は残念ながら完全な医学的知識を身に着けて
外科手術に臨む訳じゃないぞ
語弊を恐れなければ「切りながら覚える」側面もある
2023/11/26(日) 12:54:38.94ID:k38CbPq9
ちゃんとした資料で学んでないと用語が無茶苦茶だから
何を言ってるんだかわからないということが起こる。
言語仕様の理解が結果的に正しくてもそうでなくても。
「伝わればいいだろ!」みたいに言う人が結構いるんだけど伝わらないから困るんだ。

メンバ関数をメソッドと言ったりするのは誤解の余地はそんなにないと思ってたら
非メンバ関数もメソッドと言っている例を観測したことがあるし、
子クラスって派生クラスの意味で言ってるんだよな?
と思ってよく確認したら入れ子になったクラス (nested class) だったりするし、
クラス変数は静的データメンバの意味だろう (Ruby とかにはそういう用語があるし) と思ったら
静的でないデータメンバのことを言ってたというオチもある。
結果的に正しく使ってる場面ですら本当にその意味で言ってるのか疑わしくなる。

経験や感覚で書けるようになったとしても
まともな資料を読んでないというのはそういった形でコミュニティ内で有害なわけで
たまには思い違いがあるのはしょうがないが
学んでないし学ぶ気もないのを良しとは言えないよ。
2023/11/26(日) 13:47:17.98ID:t0WQFMSf
>>651
いい加減にしろよ
お前何でそんな上からなの?
2023/11/26(日) 14:18:15.64ID:k38CbPq9
>>652
伝えようとしない態度を批判してるところに対して伝わらないことを書くのやめろよ。
何が言いたいんだ?
2023/11/26(日) 14:34:29.20ID:mssmbX4x
自己正当化しか考えてない人格破綻者に道理を教えてやる気は無い、自分で考えろ

ここを利用してる初心者は、仕様について教えてくれるはちみつには感謝すべきだが、彼はプロではないしソフトウェアを書き上げたこともほぼ無いアマチュアであって
C++の学び方や上達の仕方についてまでご高説垂れてるのを真に受けないようにね
C++は別に仕様を完璧に把握しなくても使える言語だし(そんな言語なら使い物にならない)、未定義踏みまくるのは彼のようにわざと常識に沿わないおかしなコードを書きたがる素人だけだから。

荒らす気は無いのでこれで終わりにする
2023/11/26(日) 14:42:52.42ID:k38CbPq9
完璧に把握しろなんて一度でも俺が書いた箇所があるなら指摘してくれよ。
書いてないことを主張したかのような風評を流してお前はなにをしたいんだ?
2023/11/26(日) 14:55:17.55ID:k38CbPq9
資料(この場合は入門書)を読んでから手を動かして学ぶというごく普通の手順を主張してるつもりだが、むしろそうじゃない方法でどうするのがよいと考えてるんだ?
学校だって座学でやったことを演習で実践してるだろう。
657デフォルトの名無しさん
垢版 |
2023/11/26(日) 15:50:55.41ID:DTfcWvWZ
気にするなってほぼ嫉妬なんだから
2023/11/26(日) 16:03:14.03ID:t0WQFMSf
>ほぼ嫉妬
俺に言ってんの?
いずれにせよ荒らそうとしてる自覚はあるか?
2023/11/26(日) 16:08:02.37ID:Dy8SO9u0
>>658
どう考えてもお前が荒らしじゃん
人のことをアホ呼ばわりしてるし
2023/11/26(日) 16:22:42.40ID:t0WQFMSf
>>642=645=659 バレバレだからwww
661デフォルトの名無しさん
垢版 |
2023/11/26(日) 18:08:35.12ID:fCQnoW9K
>>655
言語仕様・未定義動作・処理系とか言ってたから完璧に把握しろに近いニュアンスだと感じた
メソッドではなくメンバ関数、用語を正しくつかわないと伝わらないとか言ってることがどんどん変わってる
2023/11/26(日) 18:08:55.12ID:4RSi5A29
お取り込み中すみませんが質問です
ダウンキャストという用語が是か非かです

ボクは不適切な用語だと思っていて
理由は
1) 言語の仕様に出てきていない
2) アップかダウンかについてももちろん仕様に無い
3) アップキャスト相当の操作は通常行わない
です

少なくともC++界隈でちゃんとした定義なんて出てこないですよね?
2023/11/26(日) 20:14:28.93ID:k38CbPq9
>>662
仕様の中を検索してみたら何故か例示のコードのコメントとして数か所だけ upcast という用語で書いてあるんだけど……
原則としては C++ 用語ではないと考えて良いと思う。
クラスの関係をスーパー/サブだとか親/子で言うのが混乱の元という理由で基底/派生という用語になっているので
方向をアップ/ダウンで言うのもおかしな話だし。

derived-to-base convertion というような用語は仕様書の文面にもあるので
アップキャストに相当するのはこの用語のはずだけど
base-to-derived convertion という用語は出てこないので
ダウンキャストに相当する直接の用語はなさそう。
冗長でも「××から〇〇への変換」みたいな言い方が公式なんだと思う。

ところであらためて JIS を見たら derived-to-base convertion の訳語は「派生基底変換」だった……。
to が脱落したらだいぶん雰囲気が変わってしまうでないの。
これは真似しないほうがいいかもね。

ただ、 C++ 界隈の中でも、というか規格の提案や検討に関する文面の中でも
アップキャスト/ダウンキャストという用語はまあまあ使ってるっぽいので
なんだかんだで一語で表せるってのは便利なんだと思う。
私は使わないようにしているけど。
2023/11/26(日) 20:20:37.65ID:k38CbPq9
すまぬ。 綴りが間違えてた。 concertion じゃなくて conversion だった。
2023/11/26(日) 20:28:40.49ID:4RSi5A29
レスサンクス
お手数おかけして痛み入ります

> 3) アップキャスト相当の操作は通常行わない

B *b = (B *)d; // もしもこれが必要な世界だったら
使い分ける?ための用語が欲しくなるのはまだわかるけど
D *d = (D *)b; // こっち方向にしかキャストしないんだから
区別する必要もないし、アップだのダウンだの余計なもんくっつける必要もない

…とはいえボクがいくらこう考えても
みんながそうじゃないから蔓延ってるわけで

> 私は使わないようにしているけど。

その一言で何か救われた気分になりました
2023/11/26(日) 20:32:07.21ID:4RSi5A29
一応補足

> B *b = (B *)d; // もしもこれが必要な世界だったら

B *b = d; // こう書くだけじゃ許されなくて
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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