2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

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

1 :デフォルトの名無しさん:2018/11/12(月) 14:55:13.35 ID:Tf74ZWQr.net
何にも知らない0からの出発、超初心者のためのC++相談室

610 :デフォルトの名無しさん:2023/11/25(土) 11:27:01.67 ID:rcrc48ZO.net
>>609
>でもあくまでも学んでから確かめるために書くのであって動作から言語仕様を推測したりはしないように。
横から悪いがこれには反対させてもらう
もちろん動作からの仕様の決めつけは良くないが、人間は学習する動物なので書いて動作を見てこそ上達するんだよ
丸暗記だけで理解したと勘違いしてるやつが昨今多い(そしてそういう奴に限って何も作ってない)ので、そういうのを後押しはしないで欲しい

611 :デフォルトの名無しさん:2023/11/25(土) 11:52:38.86 ID:rcrc48ZO.net
というか、自分の認識の間違いに気づくのもまた書いて試した時だからね(まれにコンパイラのバグだったりもするけど)
人間が頭の中で考えたことなんか穴だらけなんだから書いて試せるなら真っ先に試した方がいい

612 :デフォルトの名無しさん:2023/11/25(土) 12:13:14.81 ID:vlVh3gWj.net
>>610
同意。
処理系依存とか未定義動作なんて中級者以上になってから気にすればいいこと
はじめは手元にある処理系の結果を「正」として学習を進めても問題ないと思う

613 :デフォルトの名無しさん:2023/11/25(土) 12:45:47.67 ID:rKTwm3uz.net
>>593 これ
>>590 しね

614 :デフォルトの名無しさん:2023/11/25(土) 12:47:19.78 ID:rKTwm3uz.net
>>595-596
ポインタ判らんって人はその辺は判ってんだよ
本当に判ってないのはアドレッシングモード

615 :デフォルトの名無しさん:2023/11/25(土) 12:50:17.30 ID:rKTwm3uz.net
>>599
peek poke はあるし変数もあるから
用途という意味でのポインタはある

616 :デフォルトの名無しさん:2023/11/25(土) 12:54:57.59 ID:rKTwm3uz.net
>>610
そうだな
Rust スレにも変なのが粘着してゴリ推ししてて迷惑

617 :はちみつ餃子 ◆8X2XSCHEME :2023/11/25(土) 13:45:51.01 ID:BXmPXb0v.net
>>610
> 書いて動作を見てこそ上達するんだよ

だから書いてみるのは賛成と書いたのだが、何に反対してるんだ?

618 :デフォルトの名無しさん:2023/11/25(土) 13:56:27.70 ID:vlVh3gWj.net
「学んでから確かめるために書く」

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

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

あなたが言ってるのは「これどうなるんだろう?」ではダメで「こうなるはずだ!」と学んでから動かせってことだよね?
それは初心者には結構むずかしい

619 :はちみつ餃子 :2023/11/25(土) 15:39:30.62 ID:BXmPXb0v.net
>>618
> これどうなるんだろう?動かしてみよう!なるほどこうなるのか!という学び方でもいいと思う

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

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

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

C++ は複雑怪奇かつ規格改訂もあるのでベテランでも頻繁に仕様を参照するのが普通なわけで、
資料を参照するのを後回しにするような人間が後にそのような人間に変われるとは思わない。

620 :デフォルトの名無しさん:2023/11/25(土) 16:15:59.30 ID:vlVh3gWj.net
「やってない人が多いように私には見えている」

多くの人が出来てないことを初心者に求めてもねェ

621 :はちみつ餃子 :2023/11/25(土) 16:27:29.63 ID:BXmPXb0v.net
>>620
「推測した後には多くの人が資料を見ること」をやってないという話だぞ。
最初に資料で学ぶ人は体系的な知識が身に付くからそっちがオススメという話だぞ。

622 :デフォルトの名無しさん:2023/11/25(土) 16:42:06.01 ID:vlVh3gWj.net
初心者に対して「言語仕様を推測したりしないように」「学んでから確かめるために書く」って言ってたよね

言語仕様を理解してからコードを書けってことでしょ?

623 :デフォルトの名無しさん:2023/11/25(土) 16:49:08.14 ID:vlVh3gWj.net
>>621
先にも後にも資料(言語仕様)を確認しない人が多いんでしょ
そんな難しいことを初心者にまで要求してどうすんの

624 :はちみつ餃子 :2023/11/25(土) 16:51:46.77 ID:BXmPXb0v.net
>>622
そうだよ。 言語仕様を理解してから書くのが好ましい。

理解する前に色々試すというやり方も許容しなくはないが、
それでも後では資料を見て仕様を理解するという前提があってのもの。
理解する前に色々試すタイプは資料を見なくなりがちという現実があると述べてる。

625 :はちみつ餃子 :2023/11/25(土) 16:55:25.38 ID:BXmPXb0v.net
>>623
「資料」と「仕様」を使い分けて書いてるつもり。
直接に言語仕様を読めとは述べてないよ。

プログラムを書くときは色んな資料を参考にするので
入門書程度すらちゃんと読まない人がやってけると思ってんの?
ってことを言ってる。

626 :デフォルトの名無しさん:2023/11/25(土) 17:00:19.64 ID:vlVh3gWj.net
え? 資料=言語仕様じゃないの?

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

資料=入門書程度なの?
・・・なんか言ってることが変わってきたね?

627 :デフォルトの名無しさん:2023/11/25(土) 17:03:42.33 ID:vlVh3gWj.net
ちなみに「入門書を何冊か買って読みながら進めるといいよ」みたいな書き方だったらこんなに絡んだりしてないからね?

628 :はちみつ餃子 :2023/11/25(土) 17:04:18.21 ID:BXmPXb0v.net
>>626
いや、そりゃそうでしょ。 最初から言語仕様を読めとか言わないよ。
入門書だって仕様書に基づいて書いてるし、基づいてない入門書だったらクソってだけ。

629 :611:2023/11/25(土) 17:06:46.45 ID:5Y+f+Y1g.net
>>620
これをやってきたのがはちみつ餃子なんだよ
俺ははちみつ餃子の書き込みにいつも感心してるよ

630 :デフォルトの名無しさん:2023/11/25(土) 17:09:19.28 ID:rcrc48ZO.net
>言ってることが変わってきた
うん、まぁ、はちみつはそういうとこあるから・・・w
ただまぁ、言語仕様に詳しい人の存在は(はちみつに限らず)非常に有難いんだが、
実際にソフト書く上で気にしなきゃいけないのは言語仕様だけじゃない
特定のソフトの個別の問題を解決するためのアルゴリズムについて、資料があるのか?と。(すでに出来上がってて公開されてるアルゴリズムが存在する問題などほとんど無い)
一番大事なのは論理的思考力であって、なんでもはなから資料をアテにしてたら逆にそれが身につかないよ

631 :デフォルトの名無しさん:2023/11/25(土) 17:12:35.76 ID:vlVh3gWj.net
>>628
だとしたら、言語仕様を推測するな、未定義動作や処理系がどーのこーのとずいぶんと遠回しな言い方をしたねえ
入門書を読みといいよの一言で済むのに

>>629
それは別の話。餃子がエキスパートであることは否定してない
初心者の前に高いハードルを立ててC++を聖域みたいにするのはやめて欲しいのだ

632 :デフォルトの名無しさん:2023/11/25(土) 17:13:52.19 ID:rcrc48ZO.net
どうも仕様オタク(言い方は悪いが、アマチュアという意味も込めて)な人達は、自分の知ってる世界が全てだと思い込んでるようで前々から問題だと思ってた
世の中、マイナーなAPIとかになると嘘を書いてることもあるし何も資料が無いことすらある

もちろん実際の動作から「今わかること以上」をわかった気になる(仕様を知った気になる)のは問題だが、
逆に言えば「仕様がこうだから間違ってないんだ」などと動作を確かめもせずに決めつけるのも問題だ
そういうのは結局本人の心的態度の問題に過ぎない

633 :はちみつ餃子 :2023/11/25(土) 17:15:51.23 ID:BXmPXb0v.net
アルゴリズムは考えればわかることもあるかもしれんが、言語仕様は考えたってわからんし。
(想像はつくことも多いけど。)

634 :デフォルトの名無しさん:2023/11/25(土) 17:17:15.50 ID:mGx3DnG8.net
> 書いてみるというのは賛成。
初心者はこれでもいい

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

と言う意味だと俺は>>609を解釈してた

635 :はちみつ餃子 :2023/11/25(土) 17:21:04.72 ID:BXmPXb0v.net
>>631
複雑難解な C++ を試させるのがハードルの低い方法だと主張したいわけ?
きちんと整備された学習ルートがあるという話なのにそれでハードルを上げてるとか言われるのは心外だわ。

636 :デフォルトの名無しさん:2023/11/25(土) 17:24:19.67 ID:vlVh3gWj.net
「きちんと整備された学習ルートがあるという話なのに」

お前そんな話してたか?

637 :デフォルトの名無しさん:2023/11/25(土) 17:24:48.18 ID:mGx3DnG8.net
あれよな
・初心者スレだからアドバイスはすべて「初心者向けの内容」
・初心者スレだけどアドバイスは「初心者向けの内容」と「その先を見据えた内容」

はちみつ大先生は後者だけど、ツッコミを入れたほうは前者で読み取っているから噛み合わないってだけよな、たぶん

638 :はちみつ餃子 :2023/11/25(土) 17:26:03.64 ID:BXmPXb0v.net
>>636
まずは資料を読め (資料があるから) という主張を最初からしてるつもりだが。

639 :デフォルトの名無しさん:2023/11/25(土) 17:34:11.58 ID:xBFezCRv.net
「C++言語リファレンスを頭に叩き込め!!話はそれからだ」
でいいんじゃね?と俺は思っている
で、理解できない部分は入門書やサンプルコードを読んで理解する

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

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

【完】

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

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

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

今は初心者であるかどうかは重要ではなく
ここで相談するような層は後者のルートのつもりでいると私は思って書いてる。

641 :デフォルトの名無しさん:2023/11/25(土) 17:45:56.52 ID:Xpg7OWMd.net
>>639
>理解できなくても動けばいいなどという考えの奴
誰の話?

642 :デフォルトの名無しさん:2023/11/25(土) 18:21:13.32 ID:xBFezCRv.net
>>641
わからないか…かわいそうに…
教えてあげなぁぁい

643 :デフォルトの名無しさん:2023/11/25(土) 18:24:14.13 ID:0MoP1N3f.net
おちんちん舐めてごらん

644 :デフォルトの名無しさん:2023/11/26(日) 10:58:08.83 ID:d/KzVdDP.net
>>625
最近ChatGPTに全部聴いて済ます変なのが住み着いて迷惑だな

645 :デフォルトの名無しさん:2023/11/26(日) 11:15:51.84 ID:d/KzVdDP.net
>>639
>医者は医者になる前に知識を詰め込むのが普通だ
>知識もないのに外科手術をしたらどうなるか?
>切りながら覚えろというのか?

言いたいことは判るが「最初の医者」はどうしてたんだろうな
君の言ってるやり方は「従順な職人」を育てるやり方としては正しいが
クリエイターを育てることは出来ない

646 :デフォルトの名無しさん:2023/11/26(日) 12:24:07.96 ID:t0WQFMSf.net
>>639からの>>642だからな
一見それっぽいこと言ってるようで全く中身の無い事を言うアホが長いこと住み着いてる(C++系だけなのか他もなのか)
突っ込まれると頭悪い煽り方しかしてこないからすぐわかる、玄人ぶりたいだけのアホだから相手しない方がいい

647 :デフォルトの名無しさん:2023/11/26(日) 12:37:18.37 ID:DTfcWvWZ.net
医者の下りはおかしい
医師は残念ながら完全な医学的知識を身に着けて
外科手術に臨む訳じゃないぞ
語弊を恐れなければ「切りながら覚える」側面もある

648 :はちみつ餃子 :2023/11/26(日) 12:54:38.94 ID:k38CbPq9.net
ちゃんとした資料で学んでないと用語が無茶苦茶だから
何を言ってるんだかわからないということが起こる。
言語仕様の理解が結果的に正しくてもそうでなくても。
「伝わればいいだろ!」みたいに言う人が結構いるんだけど伝わらないから困るんだ。

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

経験や感覚で書けるようになったとしても
まともな資料を読んでないというのはそういった形でコミュニティ内で有害なわけで
たまには思い違いがあるのはしょうがないが
学んでないし学ぶ気もないのを良しとは言えないよ。

649 :デフォルトの名無しさん:2023/11/26(日) 13:47:17.98 ID:t0WQFMSf.net
>>648
いい加減にしろよ
お前何でそんな上からなの?

650 :はちみつ餃子 :2023/11/26(日) 14:18:15.64 ID:k38CbPq9.net
>>649
伝えようとしない態度を批判してるところに対して伝わらないことを書くのやめろよ。
何が言いたいんだ?

651 :デフォルトの名無しさん:2023/11/26(日) 14:34:29.20 ID:mssmbX4x.net
自己正当化しか考えてない人格破綻者に道理を教えてやる気は無い、自分で考えろ

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

荒らす気は無いのでこれで終わりにする

652 :はちみつ餃子 :2023/11/26(日) 14:42:52.42 ID:k38CbPq9.net
完璧に把握しろなんて一度でも俺が書いた箇所があるなら指摘してくれよ。
書いてないことを主張したかのような風評を流してお前はなにをしたいんだ?

653 :はちみつ餃子 :2023/11/26(日) 14:55:17.55 ID:k38CbPq9.net
資料(この場合は入門書)を読んでから手を動かして学ぶというごく普通の手順を主張してるつもりだが、むしろそうじゃない方法でどうするのがよいと考えてるんだ?
学校だって座学でやったことを演習で実践してるだろう。

654 :デフォルトの名無しさん:2023/11/26(日) 15:50:55.41 ID:DTfcWvWZ.net
気にするなってほぼ嫉妬なんだから

655 :デフォルトの名無しさん:2023/11/26(日) 16:03:14.03 ID:t0WQFMSf.net
>ほぼ嫉妬
俺に言ってんの?
いずれにせよ荒らそうとしてる自覚はあるか?

656 :デフォルトの名無しさん:2023/11/26(日) 16:08:02.37 ID:Dy8SO9u0.net
>>655
どう考えてもお前が荒らしじゃん
人のことをアホ呼ばわりしてるし

657 :デフォルトの名無しさん:2023/11/26(日) 16:22:42.40 ID:t0WQFMSf.net
>>639=645=659 バレバレだからwww

658 :デフォルトの名無しさん:2023/11/26(日) 18:08:35.12 ID:fCQnoW9K.net
>>652
言語仕様・未定義動作・処理系とか言ってたから完璧に把握しろに近いニュアンスだと感じた
メソッドではなくメンバ関数、用語を正しくつかわないと伝わらないとか言ってることがどんどん変わってる

659 :デフォルトの名無しさん:2023/11/26(日) 18:08:55.12 ID:4RSi5A29.net
お取り込み中すみませんが質問です
ダウンキャストという用語が是か非かです

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

少なくともC++界隈でちゃんとした定義なんて出てこないですよね?

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

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

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

ただ、 C++ 界隈の中でも、というか規格の提案や検討に関する文面の中でも
アップキャスト/ダウンキャストという用語はまあまあ使ってるっぽいので
なんだかんだで一語で表せるってのは便利なんだと思う。
私は使わないようにしているけど。

661 :はちみつ餃子 :2023/11/26(日) 20:20:37.65 ID:k38CbPq9.net
すまぬ。 綴りが間違えてた。 concertion じゃなくて conversion だった。

662 :デフォルトの名無しさん:2023/11/26(日) 20:28:40.49 ID:4RSi5A29.net
レスサンクス
お手数おかけして痛み入ります

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

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

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

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

その一言で何か救われた気分になりました

663 :デフォルトの名無しさん:2023/11/26(日) 20:32:07.21 ID:4RSi5A29.net
一応補足

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

B *b = d; // こう書くだけじゃ許されなくて

664 :デフォルトの名無しさん:2023/11/26(日) 20:37:16.38 ID:Dy8SO9u0.net
ダウンキャストって言葉は普通に使われてると思うが…
日本語版のウィキペディアなら

C++ - Wikipedia
https://ja.wikipedia.org/wiki/C%2B%2B
に「dynamic_castは基底オブジェクトから派生オブジェクトへの変換(ダウンキャスト)を実行時に安全に行うための演算子である」とある

英語版ウィキペディアなら
Downcasting - Wikipedia
https://en.wikipedia.org/wiki/Downcasting

マイクロソフトのリファレンスなら
dynamic_cast 演算子 | Microsoft Learn
https://learn.microsoft.com/ja-jp/cpp/cpp/dynamic-cast-operator
にアップキャストとダウンキャストのことが書かれてる

665 :デフォルトの名無しさん:2023/11/26(日) 20:47:28.85 ID:4RSi5A29.net
rustに至っては嘆かわしいことに
https://doc.rust-lang.org/std/any/trait.Any.html
> pub fn downcast<T>(self) -> Result<Box<T, A>, Box<dyn Any, A>> where T: Any,

上記トレイトのメソッド名に採用されている
あー虚しい
あーヤダヤダ

666 :デフォルトの名無しさん:2023/11/26(日) 20:59:53.00 ID:mssmbX4x.net
>>664
使われてるけど規格に定義があるような正式な用語ではないってことだろ

667 :はちみつ餃子 :2023/11/26(日) 21:20:56.75 ID:k38CbPq9.net
>>662
むしろアップ/ダウンだけでは状況を充分に表せないんじゃないかな。
ポインタを経由せずに値を直接キャストすることもありうるし
参照の場合かもしれない。

class foo {};
struct bar : public foo {};

int main() {
auto a = bar();
// bar から foo へのアップキャストってどれのこと?
auto b = static_cast<foo>(a);
auto c = static_cast<foo *>(&a);
auto &d = static_cast<foo &>(a);
}

668 :デフォルトの名無しさん:2023/11/26(日) 21:48:36.05 ID:Dy8SO9u0.net
>>666
一応マイクロソフトのリファレンスは正式だと思うが
まあマイクロソフト独自の規格ってなるのだろうけどな
あんなもんは認めないというのなら仕方あるまい

669 :デフォルトの名無しさん:2023/11/26(日) 21:52:47.74 ID:DTfcWvWZ.net
>>660
>仕様の中を検索してみたら何故か例示のコードのコメントとして数か所だけ upcast という用語で書いてあるんだけど……
>原則としては C++ 用語ではないと考えて良いと思う。
>クラスの関係をスーパー/サブだとか親/子で言うのが混乱の元という理由で基底/派生という用語になっているので
>方向をアップ/ダウンで言うのもおかしな話だし。
upcastとdowncastって一般名詞なのではないかな?

670 :デフォルトの名無しさん:2023/11/26(日) 21:57:36.24 ID:mssmbX4x.net
>>668
デファクトスタンダードだとは思うよ、個人的には使うことに全然否定的ではない

671 :デフォルトの名無しさん:2023/11/26(日) 22:15:54.01 ID:Dy8SO9u0.net
>>670
デファクトスタンダード
それだ

大正解

672 :はちみつ餃子 ◆8X2XSCHEME :2023/11/26(日) 23:34:44.38 ID:k38CbPq9.net
言語仕様の説明をするときには >>667 のようなバリエーションの内のどれのことを言っているかで
事情が変わってくるので結局は具体的な場合を示さなければならず、
「アップキャスト」「ダウンキャスト」という用語で充分に説明できない。
(より詳細な場合分けをするので用語を使う機会がない。)

逆に言うなら「アップキャスト」「ダウンキャスト」という用語を使うときは
充分な補足説明が必要で、それをちゃんとやってるか? ってことでもある。

どうせ説明を付け足すなら用語の甲斐がないので
使う意味もそんなにないように思う。

念のために補足しておくけど、これは「言語仕様を説明するなら」という前提なので
そうではない状況で文脈を共有できていて
「アップキャスト」「ダウンキャスト」という用語で通じるという確信がある場面に対する意見ではないよ。

673 :デフォルトの名無しさん:2023/11/27(月) 04:54:45.36 ID:tiJqQBXv.net
オナニー解答

674 :デフォルトの名無しさん:2023/11/27(月) 08:10:08.19 ID:8c8BDf1i.net
相変わらずはちみちはめんどくせーな

675 :デフォルトの名無しさん:2023/11/27(月) 09:35:39.43 ID:7/k6/GSg.net
>>648
違う言語で比較するときはそういう用語の使い方になるケースが多いと感じる
「學んでいない」のとはまた別の問題だと思う

676 :デフォルトの名無しさん:2023/11/27(月) 09:39:16.20 ID:7/k6/GSg.net
>>653
あいつは學校行ってないかも知れないな
なんでも試行錯誤で
挙句ChatGPTが完璧に教えてくれると勘違いしている
救えない

677 :デフォルトの名無しさん:2023/11/27(月) 09:41:27.50 ID:7/k6/GSg.net
>>659
「ダブルポインタ」ってのも可笑しな使われ方してることが数多く観測される

678 :デフォルトの名無しさん:2023/11/27(月) 09:52:51.04 ID:7/k6/GSg.net
>>672-674
アスペ臭を感じる

679 :デフォルトの名無しさん:2023/11/27(月) 14:40:19.25 ID:UqO8a829.net
アスペルガー症候群だって良いじゃないか?
何で差別的なことを書くのかね?

680 :デフォルトの名無しさん:2023/11/28(火) 00:01:54.69 ID:5UazaCro.net
クラス内からのみ参照する定数配列のベストな書き方を模索しています。

まず
1、constメンバ変数にする方法。ヘッダに書くだけで手軽だが、オブジェクト生成のたびに領域が取られてしまい資源浪費。

2、staticメンバにする方法。
.h
static const int TABLE[3];
.cpp
const int TABLE[3]={1,2,3};

エラー。ほかに、{1,2,3}の場所をhに移動してみたりしたがすべてエラーになり断念。

3、cppにのみに書きhには書かない。
.cpp
const int TABLE[3]={1,2,3};
エラーにならず良好。ただこれだとクラス無関係のC風の書き方なので、別の翻訳単位とよ間で名前の衝突が起きうる?

名前の衝突なく、メモリ占有はただ一個で、資源節約につながるならconstexprも活用したい。ベストな書き方はどうなりますか。

constexprは上のconstを置き換えて試しましたが2ではエラー解消せずでした。

681 :デフォルトの名無しさん:2023/11/28(火) 00:04:59.65 ID:5UazaCro.net
2のcppは

const int クラス名::TABLE[3]={1,2,3};

も試したはずですがエラー解消しませんでした。

682 :デフォルトの名無しさん:2023/11/28(火) 00:37:23.98 ID:dISnZSIc.net
2で通るはずだけどなぁ・・・ヘッダインクルードしてないとか?はさすがに無いか
あとC++17以降ならstatic constexprにすれば暗黙的にinline変数(定数)になるのでなお通るはず(宣言と同時に=ヘッダで定義できる)

683 :デフォルトの名無しさん:2023/11/28(火) 01:08:09.85 ID:dISnZSIc.net
あ、ごめん2で通るはずってのはcpp側がクラス名::TABLEの場合

684 :デフォルトの名無しさん:2023/11/28(火) 06:02:30.27 ID:fb4KLmhh.net
2、staticメンバにする方法。
.h
static const int TABLE[3]={1,2,3};
.cpp
extern const int TABLE[3];

もれはやらんけど

685 :デフォルトの名無しさん:2023/11/28(火) 06:13:38.37 ID:fb4KLmhh.net
あ、ごめん逆だった
.cpp
static const int TABLE[3]={1,2,3};
.h
extern const int TABLE[3];

686 :デフォルトの名無しさん:2023/11/28(火) 10:21:56.36 ID:tbacT9e+.net
>>681
これは通るだろ? コンパイラは何よ?

687 :はちみつ餃子 ◆8X2XSCHEME :2023/11/28(火) 10:25:57.66 ID:mRTkdYl9.net
>>681
出来なかったというコードをそのまま提示して欲しい。
状況がよくわからないのに想像で対処法を考えてもしょうがない。
コードがちょっと長くなるなら
codetter とか wandbox とか ideone とかを使って。

688 :デフォルトの名無しさん:2023/11/28(火) 10:27:57.27 ID:vcMwjchf.net
クラス内の定数を外部に生出しとかしないから
enunとかで宣言はするけど
何番目が欲しいとかはサービス関数作るしなぁ

689 :デフォルトの名無しさん:2023/11/28(火) 10:30:15.59 ID:vcMwjchf.net
つか、static宣言の内部でしか使わないものを何でヘッダーファイルに書くの?

690 :デフォルトの名無しさん:2023/11/28(火) 10:32:49.40 ID:vcMwjchf.net
ヘッダーファイルはクラスコードの名刺みたいなもんで
外部にこう言う事が出来ますよってPRする為のファイルなんだから、普通は内部で完結してるものは書かないよ

691 :デフォルトの名無しさん:2023/11/28(火) 10:35:09.02 ID:vcMwjchf.net
マジックナンバー避ける為に#defineするとかも、cpp側の先頭に書くと、全ビルドしなくて済むしな

692 :デフォルトの名無しさん:2023/11/28(火) 11:07:40.67 ID:t7+ip2Xg.net
>>689
staticには複数の意味がある

>>680 の発想は h に static 描いてみたら「たまたま」エラーが消えたら ok みたいなやり方なんだろ

693 :デフォルトの名無しさん:2023/11/28(火) 11:35:51.07 ID:vcMwjchf.net
>>692
staticより「内部でしか使わない」って話の方を拾ってね

694 :デフォルトの名無しさん:2023/11/28(火) 12:43:41.53 ID:dISnZSIc.net
>>693
質問者は「クラス内からのみ参照する」って言ってただろ

695 :デフォルトの名無しさん:2023/11/28(火) 18:17:05.00 ID:vcMwjchf.net
>>694
それならヘッダーファイルに書く必要無いやんけw

696 :デフォルトの名無しさん:2023/11/28(火) 18:50:50.78 ID:dISnZSIc.net
そら綺麗に一つのcppに全部そのクラスの実装を切り分けてるならcpp内にstaticでいいだろうけどね

697 :デフォルトの名無しさん:2023/11/28(火) 20:09:09.84 ID:vcMwjchf.net
そんな巨大なクラスは設計が間違ってないか?

698 :デフォルトの名無しさん:2023/11/28(火) 20:12:44.23 ID:bqHRuT95.net
>>677
> 「ダブルポインタ」ってのも可笑しな使われ方してることが数多く観測される

それなw
初心者ほどこの用語を使ってるように見える
初心者が集まるところでこれを流布してるやつがおるんやろな
ポインタへのポインタっていうスケーラブルな定義が理解できてなくて
アスタリスクいっこのポインタと、二個のぽいんたがある!って感じなんやろな

699 :はちみつ餃子 ◆8X2XSCHEME :2023/11/28(火) 20:20:10.37 ID:mRTkdYl9.net
>>697
この >>696 の言は逆のことを言ってると思う。
ひとつの翻訳単位にたくさんのクラス (の実装部分) を書くこともあるから
ファイルスコープにしたらスコープの範囲が広すぎる (制限にならん) やんけと言ってるように読める。

700 :デフォルトの名無しさん:2023/11/28(火) 20:27:35.33 ID:dISnZSIc.net
>>697
巨大とかじゃなくて、あんたの考えてるであろう1ヘッダに1ソースってのも指針としてはもちろん良いんだけど(そして質問者のケースに合ってるならいいけど)
例えばクラステンプレートになると、ソースに実装を書けないからヘッダのどこか(ヘッダからインクルードしてユーザーに見え辛い場所には出来るが)で実装を書くことになる
そうなるとその実装からソースファイル内のstaticな値など見えるわけがないだろ

701 :デフォルトの名無しさん:2023/11/28(火) 20:29:47.21 ID:dISnZSIc.net
>>699
もちろんそれもある

702 :デフォルトの名無しさん:2023/11/28(火) 20:57:18.00 ID:dISnZSIc.net
まぁどれを選ぶかは本人の都合だけど、クラス定義の中にprivateで書くのが自然っちゃ自然な希ガス

703 :デフォルトの名無しさん:2023/11/28(火) 21:00:29.03 ID:HOP5xTTo.net
>例えばクラステンプレートになると、ソースに実装を書けないから

C++の設計ミスだな
特にテンプレ

704 :デフォルトの名無しさん:2023/11/28(火) 21:55:43.79 ID:vcMwjchf.net
テンプレートは単なる#defineだからなぁ
あんなもん#defineでの置き換えによる副作用を引き起こす悪習の最たるもんだよ

705 :はちみつ餃子 :2023/11/28(火) 22:43:12.61 ID:mRTkdYl9.net
一応はモジュールの概念の導入でちょっと良くなっているはずだが皆でこぞって移行するってほどには全然なってないからそこまで魅力的とは思われてないんやろね。
従来のスタイルと共存できるようにするのは C++ の立場では当然ではあるものの、悪い部分も捨てきれないことになりがち。
コンパイラのサポートもあまり熱心ではない(?)ような雰囲気だからそこも不安だし。

706 :デフォルトの名無しさん:2023/11/28(火) 23:00:59.77 ID:5UazaCro.net
どうも>>680です。
2のクラス名あり版でビルド通りました。

-sample.h
class sample_1 {
int a;
static const int TBL[3];
public:
sample_1();
};

-sample.cpp
#include "sample.h"
#include <iostream>

const int sample_1::TBL[3] = {1,2,3};

sample_1::sample_1() {
a = 2;
std::cout << TBL[a] << std::endl;
}

-main.cpp
#include <iostream>
#include "sample.h"

int main() {

sample_1 sa;
return 0;
}

707 :デフォルトの名無しさん:2023/11/28(火) 23:06:12.31 ID:5UazaCro.net
sample.hにTBL宣言なしで、

sample.cpp
#include "sample.h"
#include <iostream>

static const int TBL[3] = {1,2,3};

sample_1::sample_1() {
a = 2;
std::cout << TBL[a] << std::endl;
}

でもOKでした。こちらのstaticはC式の使い方ですね。

私はTBLが.hに現れない上の書き方がいいと思いますが、これを最適としてよさそうですか。

708 :デフォルトの名無しさん:2023/11/28(火) 23:19:21.29 ID:dISnZSIc.net
解決おめ、自分の用途に合うと感じるならそれがベストと思うよ

709 :デフォルトの名無しさん:2023/11/29(水) 06:23:02.71 ID:n75oaT1g.net
h に static 描くと単に相互干渉しないってだけで
インスタンスは造られまくって無駄リソース出まくるんじゃね

302 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver.24052200