真面目なC++談義が闇プログラマ専用C++の仕様策定に変わった件
- studiokingyo
- 15024
- 0
- 5
- 0
「C++もキャストがあるため型安全な言語ではありませんが、使用するキャストを dynamic_castに限定することで、Javaのように型安全になります。」・・・はい? RT @bleis: 型について。後で読む。 / 「型」に関して http://htn.to/vWM3jq
2010-09-15 10:35:05そういえば VC8 ぐらい以降の場合、dynamic_cast<Base*>(derived) と書いたときは static_cast と同じコードが生成されるのは確認したことがある
2010-09-15 10:44:04なぜ const_cast の説明は「const を外す」と書かれていることが多いのか。いや、const/volatile つける目的で使ったことたぶん無いけど
2010-09-15 10:46:00そういえばキャスト可能性をテストしたい場合は dynamic_cast、それ以外では polymorphic_cast を使おう、という記事を昨夜読んだんだった。
2010-09-15 10:51:25dynamic_cast のテストをやってみようかと思ったけどそもそもちゃんとした仕様を知らないのでまず仕様を調べてからやらないととか思ったけどそもそも仕事が(ry
2010-09-15 11:07:30お前はconst_castを「const/volatileを外す/付ける」用途でしか使えないと思っているようだが…別になくても使える。 http://ideone.com/7MnYF
2010-09-15 11:07:31というか const_cast って boost::implicit_cast + cv を外す機能、だよね。大雑把に言えば。
2010-09-15 11:09:14関係ないけど boost::implicit_cast はもっと短い名前で標準ライブラリに入るべきだと思う。 as とか。
2010-09-15 11:10:12@melponn あ、補足… down-castがある場合失敗します。void* はどうでしたっけ…。VC8さんには怒られたような気がします。
2010-09-15 11:13:34const_cast なんて使わなくても const なんて無かったことにできる!ってこのネタ何回目だ http://ideone.com/x2Mgu
2010-09-15 11:14:05VC で実際に dynamic_cast を行うのは __RTDynamicCast って関数なんだけど、Wine のコードを見たときは結構簡単だなーとか思ったけど、VC の処理をアセンブラで追ってくとよく分からなくなったので諦めました。
2010-09-15 11:18:20@melponn 追試結果: void* へのdynamic_castはcast元がpolymorphicでないとcomplie-errorっぽいですね。>VC8 gcc4.3
2010-09-15 11:23:15ポインタではなく参照を使いましょう。 RT @nyaocat: new は失敗した時に例外を投げるのに dynamic_cast は失敗した時に null を返すのはおかしい。気がする。 boost::polymorphic_cast 使えば良いだけだけど
2010-09-15 11:29:30dynamic_cast は書くだけで何故か const_cast より強い罪悪感を感じて、その夜はほぼ間違いなくうなされる呪いの一種。
2010-09-15 11:29:36