C++相談室 part145

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2019/09/13(金) 17:13:24.60ID:/ygW08Jq
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part144
https://mevius.5ch.net/test/read.cgi/tech/1563769115/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://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/ (日本語)

----- テンプレ ここまで -----
2019/09/13(金) 21:32:39.97ID:yAkItK0j
前スレ1000>
>vtableがあればdynamic_castもできるのに何でダウンキャストなんだ?

dynamic_castはたいていダウンキャストに使うし、逆にvtableとdynamic_castは関係ないだろ。
2019/09/13(金) 21:40:45.55ID:/ygW08Jq
> vtableとdynamic_castは関係ないだろ。

おまえさん、そもそもdynamic_castとは何か理解しているか?
2019/09/13(金) 21:41:31.76ID:/ygW08Jq
あ、ID出るんだったな
「スレ主」としての発言ではないんで気にしないでくれ
2019/09/13(金) 22:48:38.62ID:ZW8mwhnp
整理すると
安全にダウンキャストするにはdynamic_castを使うし
その際vtableが必要
そんだけ
6デフォルトの名無しさん
垢版 |
2019/09/13(金) 22:49:53.22ID:ZW8mwhnp
ちなみにdynamic_castでアップキャストする場合はvtable要らね
どうでもいいが
2019/09/14(土) 01:51:42.11ID:2JV3tdJj
このvtable言いたいだけ感
2019/09/14(土) 02:09:30.09ID:SgsUVSB1
vtable言いたいだけちゃうんかと
2019/09/14(土) 02:29:08.06ID:plkfGFM5
vtable iitai dake.
2019/09/14(土) 07:29:57.19ID:keXkMGsc
dynamic castでアップキャストする事あるの?
2019/09/14(土) 09:31:35.63ID:MJsGg5EL
ない
2019/09/14(土) 11:41:42.14ID:Hd+E1riT
そもそもアップキャストはリスコフの置換原則が成り立つクラスになってんなら何もしなくも勝手にできる
2019/09/14(土) 11:56:51.87ID:JExEJ5Ds
SOLIDなんて馬鹿が意識してるわけねーだろw
2019/09/14(土) 14:12:14.01ID:2JV3tdJj
今まで仕事でRTTI有効だったプロジェクトはひとつもないわ
2019/09/14(土) 16:26:48.85ID:Hd+E1riT
そりゃあサイズ削減しなきゃいけないからじゃね?
2019/09/14(土) 17:28:56.46ID:KFCQQ8F2
サイズ以前の問題じゃないの
2019/09/14(土) 17:57:41.80ID:JExEJ5Ds
バッチ処理系統の仕事ならポリモルフィズムなんて糞の役にも立たんどころか
かえって有害だわ。
2019/09/14(土) 18:14:18.81ID:MJsGg5EL
COBOLでもEVALUATE文なんて普通に出てくるだろ
力技でダッセーけどあれもポリモだぞ
2019/09/14(土) 18:26:33.88ID:JExEJ5Ds
そういうカスなことやってるからメンテ不能になるんだよ。。
2019/09/14(土) 19:17:35.55ID:qjGOgUak
rttiに使う必要がでた時点でc++はミスチョイス
もちろん趣味ならご自由に
2019/09/14(土) 19:52:02.94ID:iEVwPiY+
RTTI嫌ってるけど実際どの程度パフォーマンスに影響するの
2019/09/14(土) 20:10:10.91ID:MJsGg5EL
正直、初めてポリモの話を聞いたときは
混ぜちまってから後で選別なんてアホだろって思った
2019/09/14(土) 20:36:36.84ID:BTqGkHHG
まあ結局コールバックだからな
2019/09/14(土) 20:39:19.28ID:SgsUVSB1
ポリホーモきっしょ
2019/09/15(日) 01:12:05.95ID:+QluEOXC
C++は型の実行時識別をvtblのアドレスでやるからdynamic_castする以上はアップだろうがダウンだろうが対象クラスに仮想関数が一つは含まれないといけない
さもないとゼロコストの原則からクラスにvtblが作られない
ただし、仮想関数であれば良く、必ずしも仮想デストラクタである必要は無い、、、ハズ、、、
2019/09/15(日) 01:37:29.11ID:0kzqJJdX
vtableおじさんまたきたよ
2019/09/15(日) 01:44:54.25ID:+QluEOXC
>>22
ポリモとダウンキャスト(RTTIを使うか否かを問わず)を混同するとは情け
ナサス、
2019/09/15(日) 01:47:31.12ID:+QluEOXC
コールバック関数ならいちいちポリモとかしなくとも無名関数とかで良いやんジャバじゃあるまいし、
2019/09/15(日) 01:59:40.68ID:LMFjfaUx
vtableとvtblでNGしたった(´・ω・`)
30デフォルトの名無しさん
垢版 |
2019/09/15(日) 03:24:46.48ID:2F/PGB+Q
>>28
ラムダをどっこかに登録してコールバックしてもらうとき
自分が死ぬとき登録を解除するのが面倒じゃね?
結局thisとpairで登録する羽目に
だったら初めから仮想関数で良くね?
2019/09/15(日) 04:39:33.80ID:+QluEOXC
コールバック関数を渡す側がコールバックされるより先に死ぬ可能性があるとか
一体何がしたいのかっていうか、
2019/09/15(日) 04:41:18.12ID:+QluEOXC
仮にそうであるとしても死ぬ際に空のコールバック関数に登録し直せば良い
なお関数オブジェクト自体の破棄は関数オブジェクトをコピー渡しなりすれば何の問題も無い
2019/09/15(日) 07:15:57.55ID:o13gcpb2
>>25
ゼロコスト? ああゼロオーバーヘッドのことかw
34デフォルトの名無しさん
垢版 |
2019/09/15(日) 09:03:14.13ID:XPArYK5v
C言語がなんとか使えるようになりました。
今度は、生産性の向上とstringとか面白そうなので、
C++を学習しようと思っています。

おすすめの書籍があったら、教えてください。
ちなみにC言語の理解は、独習Cで勉強しました。
なんだか、独習C++は実用的ではない気がしました。

知りたいのは、C++のstringとかvectorとかです。

それとも、こういう書き込みはだめですか。
35デフォルトの名無しさん
垢版 |
2019/09/15(日) 09:10:08.07ID:XPArYK5v
34です。

宣伝みたいになりましたが、
独習C++の新版が出ていました。
書籍は11月、電子ならすぐに手に入るようです。
期待してみます。

ほかにもあれば教えてください。
2019/09/15(日) 09:16:38.35ID:8KX++KfV
cpprefjp
2019/09/15(日) 09:45:21.89ID:oPlgEsHO
EzoeRyoのgithubに公開しているcppbook
cpprefjp
2019/09/15(日) 09:47:48.80ID:uSEm3H+m
ただで読めるし「江添亮のC++入門」とかでいいんじゃない?
どうしても書籍が良ければ9/20発売みたいだし
2019/09/15(日) 10:08:14.78ID:j54Ms8Tr
どいつもこいつも嵌める気しかねーのか。。
せめてロベールとかビャーネのやつを紹介しろよ。
2019/09/15(日) 10:14:24.35ID:uK9KHo8O
>>34
もちろんこういう書き込みは駄目だね
まず言語を学ぶ時点で実用性がない
学ぶならフレームワークだね
それにどうせ金にならないんだから、実用性なんて最初ならない
41デフォルトの名無しさん
垢版 |
2019/09/15(日) 10:29:15.30ID:Fzt4Iz1L
ビャーネはまだしもロベール古くない?
2019/09/15(日) 10:30:20.14ID:+TjQqAK6
いまさら03以前の本を勧めるのはちょっと…
2019/09/15(日) 10:35:30.95ID:Pt8t6mL1
C++で生産性は向上しない
学習動機の根本が間違ってる
2019/09/15(日) 10:37:36.53ID:gb0f216/
>>35
>書籍は11月、電子ならすぐに手に入るようです。
電子キンドル版もやはり11月まで入手できないとのことでした
2019/09/15(日) 10:47:37.02ID:j54Ms8Tr
cやったばっかの人に江添とか薦めるくらいならc++03のとこから地道に教える方を選択するわ。
あんな糞本でc++なんかいじられると目も当てられん結果になる。
46デフォルトの名無しさん
垢版 |
2019/09/15(日) 10:49:41.53ID:Fzt4Iz1L
もちろんC++11,14,17,20と教えていくんだろうな?
今時C++03なんて使ってられんぞ
2019/09/15(日) 10:56:43.80ID:+TjQqAK6
今となっては「auto_ptrはコンテナに入れるな」だの「vectorのメモリ領域が連続してると仮定するな」だのを
初心者に教える方が有害だと思う
2019/09/15(日) 10:57:27.95ID:I9cvwq9U
基礎が全く出来てない単発だらけのこんなとこで聞くのが間違い
49デフォルトの名無しさん
垢版 |
2019/09/15(日) 12:29:28.22ID:qCqOeXfn
ビャーネを勧めるとかw

否定が多いスレ

猫とかやさしいでも、まずは読んどけ。
2019/09/15(日) 13:03:00.40ID:o13gcpb2
>>34
最も大事なのは本人のやる気だ
モノになるか否かを本のせいにするようではそれがない

俺自身の経験から言うと
変にかみ砕いたバカ用の本や
筆者の思い込みを熱く語っている本よりも
ドライなやつがいい
具体的には禿の本や規格票が俺にとってのそれだった

必要な情報は客観的事実でどっかの馬の骨の主張じゃない
解らんところをどう攻めるかも自分の頭で考えるのが大事だ
2019/09/15(日) 13:17:14.19ID:d26DY9ov
>>34
stringとかをライトに使いたいのならサンプルコード探して真似るだけでもいいかと
ただ、stringやvectorがどういう仕組みで出来ているのかはいずれ理解する必要出てくるから
独習みたいな本を手元に置いといた方がいい(>>47みたいに古い本だと一部仕様が違ってたりするけど
2019/09/15(日) 15:21:24.21ID:2F/PGB+Q
言っちゃなんだが、実際使ってみるっつーか
何かソフト書いて覚えるしかないと思うよ
参考書はネットに転がってる文献で十分でしょ
2019/09/15(日) 15:29:29.02ID:WnktybSj
プログラミング勉強する前にコンピュータアーキテクチャ勉強しろ
2019/09/15(日) 15:30:29.64ID:w00J0OPy
https://en.cppreference.com/w/cpp/language/namespace


using namespace ns_name;      //(5)

という形式の 「using-directive (using 指令)」の説明に

5) using-directive: From the point of view of unqualified name lookup of
any name after a using-directive and until the end of the scope in which
it appears, every name from ns_name is visible as if it were declared
in the nearest enclosing namespace which contains both the using-directive
and ns_name.

とあるのですが、

as if it were declared in the nearest enclosing namespace which contains
both the using-directive and ns_name.

の部分の正確な意味が分かりません。個人的には (5) の ns_name までを含めた行全体が、
「using-directive」であるという理解なのですが。

as if it were declared in the nearest enclosing namespace which contains the using-directive.

であるなら分かりますが。どなたか分かる人にご教授いただければ幸いです。
2019/09/15(日) 15:53:13.28ID:58rKn0L9
using directiveにはnamespace以外にも用途があるからと思われ
5654
垢版 |
2019/09/15(日) 15:59:33.27ID:w00J0OPy
>>54
さっき、名前探索の「優先順位」に違いが出てくるからかもしれないと気付きました。
using-directive を書いた namespace よりも、その親や先祖となっている
namespace で名前が宣言されているかのよに振舞うということは、
その分、名前探索では優先順位が少し低くなります。このことによって
同名の名前が内側に宣言されていた場合、振る舞いが変わってきそうです。
2019/09/15(日) 16:52:00.99ID:LMFjfaUx
>>39
ロヴェールはウンコ
58デフォルトの名無しさん
垢版 |
2019/09/15(日) 18:52:44.08ID:XPArYK5v
34です。
みなさん、ありがとうございました。
詳しい人多いですね。

stringとかを使えば、pythonやC#みたいに
使えるかなと思ったものです。
2019/09/15(日) 21:18:39.85ID:zWVpxi69
C覚えたんならC++やらずに他の言語やってもいいんじゃね。と思った。
2019/09/15(日) 22:33:44.86ID:2F/PGB+Q
他の言語なんかやめとけ
C++かそれが嫌ならRustにしとけ
ただRustは難しいからC++でいいだろう
2019/09/16(月) 11:16:31.34ID:ViJ7kb/C
>>57
残念ながらc++に関してはそのうんこを超える入門書がないだわ。
62デフォルトの名無しさん
垢版 |
2019/09/16(月) 18:51:38.35ID:JVpNk5dm
今時本で勉強しているやつは時代遅れ。
情報が更新されるcpprefjp,cppreference等にかなうものはないのだ。
2019/09/16(月) 19:14:58.26ID:GDraKDQQ
辞書と教科書は違う
2019/09/16(月) 19:35:00.11ID:GUsgf22q
辞書がメインだよ
どっかの馬の骨はこう見ているというのは
あまり1つに囚われずに数多く見聞きして
誰もが口を揃えるのは何かを参考にする程度だ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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