1 名前:デフォルトの名無しさん [2022/02/19(土) 11:56:42.14 ID:kSnJ/KwP.net] 前スレ C++相談室 part158 https://mevius.5ch.net/test/read.cgi/tech/1636969758/
202 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 11:59:24.66 ID:169sj97j.net] でもポインタで簡単に書き換えられるじゃん
203 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 12:14:57.98 ID:mK/IikxE.net] 意図的にconst外さなきゃconstのままだよ 何も考えずconst外すバカのことなんて知らん
204 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 18:43:59.10 ID:xX3MCg4u.net] constが役にたった場面にあったことがない。 自分で書き換えといて「書き換わるかもしれない!!」とかどんだけ適当にコード書いてんだか。
205 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 19:05:22.20 ID:kxjR7eze.net] constは積極的に使うことでI/Fを分かりやすくしたりできるね 書き換えない想定を明示的にして最適化しやすくする効果もある 意味的に正しいことが保証できないときにconstを使うと泣くこともあるけどw
206 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 19:11:03.22 ID:xX3MCg4u.net] >>202 const使ったらコンパイラはどういった最適化するんだ?
207 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 19:12:37.70 ID:pF12AA3R.net] constとprivateはテストの邪魔でしかない 使ってる奴は例外なく低脳
208 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 19:27:49.01 ID:RMWkUPMB.net] privateはインテリセンスがすっきりしていいじゃん
209 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 19:38:04.25 ID:kxjR7eze.net] >>203 実際にやってみろ >>204 サンプル説明以外で可視性やconst使ってない馬鹿はエアプ
210 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 19:43:16.35 ID:xX3MCg4u.net] 自分で言い出しといて急にキレられてもな。
211 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 19:48:21.44 ID:kxjR7eze.net] >>207 キレる?お前が調べもせずに聞いてくるから当たり前のことを言っただけだが
212 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 19:52:14.27 ID:pF12AA3R.net] >>206 エアプは君だよ 製品レベルの緻密なテストセットをきちんと書き上げるためにはconstなしのオールpublicしかあり得ん テストケースで様々な状態を作りだして動作確認するためには、全てを必要に応じて自由に書き換えられることが不可欠というもの 書き換え不可だのクラス専用だのの決め事は命名規則で担保するんだぞ
213 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 19:58:35.87 ID:46L8HXzx.net] IFのシグネチャにconstついてないといちいち仕様書読まなきゃいけないから面倒くね? char* token(char* str)とかあったら破壊的かどうか判別できん
214 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:00:20.50 ID:gDL/lDyA.net] >>209 struct最強伝説キタコレ
215 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:04:09.41 ID:Ttq2k6xT.net] >>211 staticおじさんの生まれ変わりだろw
216 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:04:09.42 ID:kxjR7eze.net] >>209 https://github.com/trending/c++ この辺のプロジェクトのソースでもいいし、chromiumのソースでもいいし、見てみたら? 製品レベルのコード見せてみろよ
217 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:07:48.92 ID:xX3MCg4u.net] const使ったらどんな最適化するんだろう? 言った本人はキレて答えてくれないし。
218 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:12:00.77 ID:kxjR7eze.net] >>214 お前が1+1=って言ったら俺はお前のためにわざわざ2と言う必要があんのか? 自分で調べたことの事実を示せw
219 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:14:10.16 ID:aDhOSI3t.net] Rustは何も指定しないとimmutable(不変)にしちゃったから、そういう点でもわかりやすく、かつ、テストやデバッグも少数のmutableなものだけ対象にすればよくなってるね
220 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:15:39.58 ID:xX3MCg4u.net] >>215 全く必要ない。 キミは自分で言い出しといて逃げる人とよく分かったから他の人に質問してるだけ。 キミはスルーしてくれていいよ。
221 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:16:05.93 ID:kxjR7eze.net] >>216 Rustは無関係なので巣に帰れ
222 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:32:18.12 ID:6k09Uwld.net] constを使うのがいいことがよく分かった
223 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:39:24.80 ID:xX3MCg4u.net] constウイルスと言わざ
224 名前:るをえないアホ仕様 [] [ここ壊れてます]
225 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:57:38.37 ID:QBj91W6D.net] だからさ、釣り針が太すぎるんだよな
226 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 21:25:13.93 ID:4EL5U7Bc.net] constついてないコードは九分九厘ごみ 絶対に自分一人で書き上げて絶対に一生涯外に出さない保証があるなら付けなくても良い
227 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 21:34:50.33 ID:6k09Uwld.net] 本に載るほどの支持を覆すほどの権威と実例があるわけもなく
228 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 22:44:59.40 ID:RMWkUPMB.net] メンバ関数のconst修飾とか関数の引数のconstとかはわかるけど関数内部のローカル変数にconst付けるのはよくわからんな
229 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 22:51:54.69 ID:a/ksSb5+.net] const お会いしたらお茶しませんか?
230 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 23:04:47.69 ID:aDhOSI3t.net] >>224 コードが読みやすくなるし間違って書き換わることもないから どの言語でもconstやそれ相当で宣言するのが最近は一般的 JavaScriptですらconstにするのが常識となった
231 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 23:07:46.96 ID:vOr560R7.net] ここ数年constをつけて再代入しないのが当然になってますってjavascriptの専門家に言われて殴りたくなりました
232 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 23:13:07.22 ID:aDhOSI3t.net] JavaScript程度はブラウザのカスタマイズしたり含めて誰でも使える言語だろ まさかC++しか使えない新人かね
233 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 00:15:34.77 ID:VmHIkvc0.net] Pythonにはconstもprivateもない 大文字だけの名前はconst、アンダースコア始まりの名前はprivateという規約があるだけ でもそれでみんな勝手に書き換えるべきでないと了解されてて完全に成立してる とはいえ言語機能ではないのでテストとかでの必要に応じて規約を無視して値を変えることもできる こういう実例を見るとわざわざコンパイラ機能として書き換え禁を強要してるconstやprivateは偏執的過ぎると思う
234 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 00:23:17.69 ID:xDf2Ellb.net] 小さいオブジェクトにconst付けるとアドレスが割り振られて最適化が阻害されるみたいな話は聞いたな
235 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 01:13:30.79 ID:fRC8OZTs.net] 日付が変わってまた湧いてるw >>229 pythonみたいなゆるゆる言語と比較してconst/privateがないとかw >>230 その話URLで示してw
236 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 01:14:41.41 ID:TNmFLFGs.net] ここまでconstつけると最適化されるという例はなし。
237 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 01:39:20.96 ID:fRC8OZTs.net] ここまで何を調べたかの記述なしw
238 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 04:01:53.50 ID:L9ZaKHY5.net] move、右辺値参照、各種オペレータなどフルセットで対応するライブラリ的なクラスならconst対応した方が良いけど、 末端のアプリケーションにまで全部律儀にconst付けるのは面倒くさいだけだわな
239 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 04:13:27.79 ID:fRC8OZTs.net] そんなしょうもないものならわざわざC++で組むなよw 発想がアホの極みw
240 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 06:30:02.19 ID:BX4iLvdt.net] Rustなどは無指定デフォルト時がC++でのconst状態になってるよな 楽でいいよな
241 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 07:05:16.24 ID:fRC8OZTs.net] >>236 Rustの話はRustスレで
242 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 08:03:06.09 ID:w5NWCXyu.net] 話題に沿ってるんだし少しくらいなら良いと思うけどね。アレルギーかよ
243 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 08:11:23.88 ID:fRC8OZTs.net] Goスレ見てると対岸の火事とは思えないw Rustスレは静かなのに、そこで議論できない馬鹿がずっと他言語スレでRustのヘイトを稼いでるからなw Rustくらいみんな知ってると言うのにw ってわけで、特に今は各言語固有スレではその言語の話だけってことw
244 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 10:47:22.97 ID:w5NWCXyu.net] 他所のスレのことは知らんけどこれをヘイト稼ぎと受け取るのは捻くれな気がするけどね Rustのことも自分が知ってるからってみんな知ってるとかイキるのも良くない 知らない人だって当然いるだろうに
245 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 11:00:37.71 ID:fRC8OZTs.net] ヘイト稼ぎと解釈しない方が捻くれてるだろw 今どきC++やっててRust(やそれ以外の言語)知らん方がレアだし、その程度のやつは何を言われても仕方ない
246 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 11:24:01.42 ID:Cjy1TnYX.net] その程度とか言い出した パソコンの大先生かな?w
247 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 11:56:13.77 ID:w5NWCXyu.net] 誰でも最初は初心者なんだけどね ここオンラインの匿名掲示板なの忘れてない? 勝手に自分基準のレベルを周りに押し付けられてもね そういうのは自分の納得できる閉じたコミュニティでやればいいと思う
248 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 13:03:43.12 ID:d8NXRVNx.net] いや、悪いけど>>241 はレベル低いと思うよ・・・w
249 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 13:14:24.08 ID:qsPBexON.net] 自動販売機のタバコじゃないんだけどね もっと高級なのね
250 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 15:44:44.33 ID:xDf2Ellb.net] Rustってまだ言語マニアくらいしか使ってなくね そもそも案件が少なすぎるしRsutでしか提供されていないライブラリやフレームワークやSDKなんて聞いたことないし 俺が知らないだけで実はコッソリ出現してるのか???
251 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 22:06:22.23 ID:aW9KNPN/.net] 実際こうやってアレルギー反応(スレが荒れる)起こすからよその話はよそでやれってことだな
252 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 22:11:54.75 ID:fRC8OZTs.net] 荒れてねーよw
253 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 22:19:40.75 ID:4mZJSMD8.net] >>246 色んな分野でRustがC++の立ち位置を侵食していってるよ 例えばブラウザ内だけでなく今は色んな所で使われるようになったWebAssembly(WASM) WASMでプログラミングするための記述言語は当初C++が先行していたけど今はRustが逆転してトップになっているね
254 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 22:27:10.15 ID:I1qWxMaG.net] constさいこー 固定文字列リテラルとか const char* const s = "Hello World!\n"; やし 関数の仮引数は関数内で絶対変えないことにして void foo(const char* const p); // 宣言 void foo(const char* const p_) { // 定義 const char* p = p_; // 関数内で値を変える場合 } と書いてしまうま
255 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 22:27:29.83 ID:I1qWxMaG.net] だいたい https://mevius.5ch.net/test/read.cgi/tech/1524746903/652 https://mevius.5ch.net/test/read.cgi/tech/1524746903/659 と質問したら https://mevius.5ch.net/test/read.cgi/tech/1524746903/661 やそうやし\(^o^)/
256 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 22:46:27.37 ID:I1qWxMaG.net] テストのときにprivateメンバを弄りたいケースは確かにあって そういう場合は次のどれかかが多いう気がする印象だが知らん ※個人の感想です 1. 長ったらしい接頭辞がついた名前のテスト用メソッドを設けてその中にテストコードを書く リリースコードでもそのままだが呼ばれないからリンクはされない 2. 長ったらしい接頭辞がついた名前の構造体として実装して細かいテストしてclassでwrapしてリリース 3. 長ったらしい接頭辞がついた名前の普通の関数として書いて細かいテストしてそれをclassから呼ぶ
257 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 22:47:36.31 ID:fRC8OZTs.net] >>249-251 こういうのが荒れてる状態
258 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 22:48:11.64 ID:fRC8OZTs.net] >>252 これもな
259 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:14:01.86 ID:I1qWxMaG.net] だいたいインターフェースにもconstつけちゃう class IFoo { int bar(const int x, const double y, const RECT z) const = 0; double baz(std::string& buf) const = 0; /*...*/ }; とか
260 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:14:57.75 ID:I1qWxMaG.net] virtuarl ~IFoo() { } を忘れたorz (死
261 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:17:36.73 ID:TNmFLFGs.net] 値渡しをconstにして何がしたいん?
262 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:27:30.26 ID:w5NWCXyu.net] 固定ならconstexpr使おうや
263 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:36:20.44 ID:I1qWxMaG.net] >>257 文字通りconstにしたいのですヽ(`ー´)ノ 引数に再代入するのはガイジのやることなので(>>251 で関数定義でそうしたら、作業性のためにそれをコピペして極力弄らずにヘッダファイルにするから 宣言においても値渡しの引数にもconstが付くのでつ∀`;)
264 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:43:30.97 ID:w5NWCXyu.net] まあ非参照型でconstついてなかったらとりあえず ひょっとして関数内で書き換えられるんかと疑ってかかるよね
265 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:44:54.89 ID:I1qWxMaG.net] >>232 IPAコーディング左方ガイド[C++言語編] (p.120) https://www.ipa.go.jp/files/000055043.pdf >M1.11.1 参照しかしない領域は、const 型であることを示 >す宣言を行う。 (中略) >参照するだけで変更しない変数を const 型で宣言することで、その変数を変更しないことを明 >示できる。また、処理系の最適化処理でオブジェクトサイズが小さくなる可能性もある。この >ため、参照しかしない変数は const 型にする。 やそうや;;; 具体的には知らん
266 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:45:14.56 ID:nPeFYJEF.net] 引数に再代入するかどうかは呼び出し側の与り知らぬところなんで それを公開インターフェースに乗せるのはどうかなぁ。
267 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:45:57.76 ID:BX4iLvdt.net] Rustだと値渡しだけでなく参照渡しも無指定デフォルト時は書き換え不能だよな 書き換えが起こる関数へは指定して可変参照を渡す
268 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:48:32.78 ID:UUNvHcAJ.net] どこぞの馬の骨とも知れないIT後進国ジャップが言う事よりも天下のGoogle様のコーディング規約を真似るほうが無難だぞ そしてGoogleのコーディング規約によると「可能な限りconst付けまくれ」との事 実際にGoogleが公開してるライブラリはCにしろC++にしろ関数の引数から大体const付いてる、ポインタは勿論constバーガーで
269 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:50:44.52 ID:I1qWxMaG.net] >>262 あずかり知らぬことならどうでもいいんじゃ…… コピペした後手作業でconstを消すとかアフォらしい漏れクラスの天才の単金は高いからな やっぱ作る方の作業性優先で、 記憶モードだがVC++のインテリセンスは値渡しのconstは除去して提示してくれるはず……
270 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:58:24.50 ID:nPeFYJEF.net] でもconst書く方の手間は惜しまないんだ
271 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:58:37.20 ID:Cf/OFvAp.net] > 処理系の最適化処理でオブジェクトサイズが小さくなる可能性もある。 > int bar(const int x, これをどうやって小さくするんだ? そもそもconstの値渡しの話だよな。
272 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 00:02:08.66 ID:/TAxLK2K.net] >>264 へぇ〜知らなかったわこれ 流石ゴーグル様やで
273 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 00:02:10.22 ID:o7kRBzLD.net] 引数で明示的に書き換え禁止にしたいということはポインタ渡しか参照渡しだよな。 アドレスしか渡してないのに最適化でオブジェクトサイズが小さくなるというのはどういう意味だろう?
274 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 00:05:12.18 ID:o7kRBzLD.net] > 「可能な限りconst付けまくれ」 自分で設計、コーディングができなくてオープンソースをパクる側の意見だろう。 あくまでパクりすぎて訴えられて負けるググルくんの意見。
275 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 00:07:37.55 ID:KWP91+7v.net] char*ならアドレス渡すより実値渡す方がサイズ小さくて済むとかじゃない?知らんけどね
276 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 00:14:47.59 ID:/TAxLK2K.net] >>269 値渡しだとしても関数内で決して書き換えませんよって意思表示でconst付けるん
277 名前:だわ 使う側はどうでもいいのかも知れないけど少なくてもメンテ側はその方が楽 [] [ここ壊れてます]
278 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 00:39:11.54 ID:GNkMbU6V.net] 実質in宣言だよね
279 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 05:41:24.49 ID:+yReYAPt.net] まだ馬鹿がconst不要とかアホなこと言って荒らしてるのか・・・
280 名前:デフォルトの名無しさん [2022/02/27(日) 07:45:11.01 ID:hjaMvOv0.net] もういっそのこと、constをメンバ関数宣言のデフォルトにして、volatileキーワードをメンバ関数宣言にそえないとメンバ変数の値を変更できないような仕様変更をしたほうがいいくらいだよ
281 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 07:54:46.50 ID:XiobTp3y.net] ラムダ式の値キャプチャはデフォでconstだね constつけたくないときはmutable
282 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 13:50:59.05 ID:i/FBvdzu.net] 勝手な憶測だけどconst付けると即値埋め込み以外にもどの変数をレジスタに入れるかって辺りの最適化が効きやすくなりそうな気はする
283 名前:デフォルトの名無しさん [2022/02/27(日) 14:21:10.71 ID:ai7feBss.net] class ClassA { public: int x, y; ClassA(int n1, int n2) { x = n1, y = n2; } virtual void VirFunc() = 0; }; class ClassB :public ClassA { public: ClassB(int n1 = 0, int n2 = 0) :ClassA(n1, n2) { ; } void VirFunc() { cout << "Disp1:x+y=" << x + y << std::endl; } void Dummy() { ; } }; void check(ClassA* obj) { if (typeid(*obj) == typeid(ClassB)) { static_cast<ClassB*>(obj)->VirFunc(); } } int main() { ClassB objB(10, 20); check(&objB); }
284 名前:デフォルトの名無しさん [2022/02/27(日) 14:21:28.24 ID:ai7feBss.net] クラスの継承やtyoeidで今躓いています。 objにclassBがなんで代入出来てなんでキャストできるのかわかりません。 check関数の中の引数、ClassAのポインタにClassBで実体化したオブジェクトのアドレスを入れると言うことは 継承した部分だけを見ることで同じ型として見ているのですか? だとしたら派生先のクラスでできたメンバ?がどうなるんだろうと言うのもわからなかったりはします。
285 名前:デフォルトの名無しさん [2022/02/27(日) 14:22:00.29 ID:ai7feBss.net] すみませんコードってどう上げれば良いんでしたっけ?
286 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 14:34:30.92 ID:57HjD/n9.net] const の必要性ってこういうときにあると思ってる struct T { int x; int y; T(int _x,int _y):x(_x),y(_y){}}; int test1(T &a){ return a.x*a.y;} int test2(const T &a){ return a.x*a.y;} int main() { T a(10,5); printf("%d",test1(a));//OK printf("%d",test1(T(5,4)));//エラー printf("%d",test2(a)); //OK printf("%d",test2(T(4,6)));//OK }
287 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 14:38:16.26 ID:gvx2nAxT.net] >>279 想像のとおりです なのでメンバーが減るようなキャストはまずい
288 名前:デフォルトの名無しさん [2022/02/27(日) 14:51:04.74 ID:ai7feBss.net] >>282 ありがとうございます。 アップキャストダウンキャストも関わっていたのですね すぐにはわかりませんでした。 たとえばなんですけど派生クラスBは基本クラスAに別の名前を付けてかつBで新たに 加えられたメンバはBから紐づけられていて、これらをセットにして見やすくしたものが 派生クラスBになると言う感じなのです?
289 名前:はちみつ餃子 mailto:sage [2022/02/27(日) 15:01:31.40 ID:ftSqTRxL.net] 派生クラスのオブジェクトには基底クラスのオブジェクトが含まれる。 派生クラスの一部であるようなオブジェクト (基底やデータメンバ) をサブオブジェクトという。
290 名前:デフォルトの名無しさん [2022/02/27(日) 16:18:03.61 ID:ai7feBss.net] >>284 ありがとうございます。 サブオブジェクトがサブオブジェクトと言われることにつながるのですね。
291 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 16:44:15.33 ID:+yReYAPt.net] ダウンキャストは危険で、本来無条件にやっていいものではない なので実行時型チェックをして使っている今回は問題ないだけ なお、static_cast<ClassB*>(obj)->VirFunc()は最近のコンパイラ(gcc11.2)だと 最適化なし時はClassA*として仮想関数呼び出しと同じ方法で呼び出す 最適化あり時はvtableがClassB::VirtFunc()かどうか確認してインライン展開したものが実行される (万一確認失敗したら仮想関数呼び出しと同じ方法で呼び出す)
292 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 17:38:03.37 ID:HuUTW9GQ.net] ダウンキャストをするならstatic_castではなくdynamic_castを使うべき。 見ているobjの実体がclassBじゃないなら失敗してnullptrを返してくれる。 そもそもダウンキャストが必要になること自体良い設計ではないが auto* pb=dynamic_cast<classB*>(pobj); if(pb){ pb->...; }
293 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 17:46:47.65 ID:NpJPdMJB.net] 「キャストはなるべくするな、特にdynamicはコストが高い」と古文書にもあった
294 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 17:54:22.89 ID:+yReYAPt.net] 今回はそれをtypeidでやりたかったんでしょ
295 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 18:02:07.86 ID:HfpUvsK0.net] ダイナミックダイクマ
296 名前:デフォルトの名無しさん [2022/02/27(日) 20:42:58.79 ID:ai7feBss.net] なんかC++が気になるので実践的な情報でもなんでもありがたいです。 C++で食べてる人と話したこともないし・・・
297 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 20:45:27.70 ID:NpJPdMJB.net] 古文書には「#defineではなくconst,enum,inlineを使うといい」ってあるよ
298 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 20:47:31.05 ID:nGlHhzSe.net] 死海文書では「constexpr, enum struct, enum class」を使うことで難を逃れたと書いてある
299 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 20:56:43.39 ID:o7kRBzLD.net] const使えば分かる。#defineのほうがやっぱり便利だわ。
300 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 21:21:58.39 ID:Xl3wWN+O.net] C++のenumは機能が弱いからなあ Rustのenumみたいに任意の型の変数値を格納できるようにしてほしい
301 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 21:31:32.92 ID:nXG/aSfD.net] >>275 >>276 その方針で全ての変数のデフォルトをC++のconst状態にしてしまったのがRustだね 代わりに値が変化する変数にだけミュータブル指定しないといけないけど if-elseもループもブロックも値を返してくれるためほとんどの変数が変化しない
302 名前:デフォルトの名無しさん mailto:sage [2022/02/27(日) 21:36:52.29 ID:o7kRBzLD.net] char*やシンプルな構造体ならconst使うのはメリットあると思うが、 あれこれ機能が詰め込まれるクラスになると不便さ、面倒さのほうが際立つ。 多重継承並にハゲる原因になる。