真面目なC++談義が闇プログラマ専用C++の仕様策定に変わった件

castに関する真面目なC++談義がいつの間にか闇プログラマ専用C++の仕様策定会議に変わってしまいました。一体全体、何が原因でこうなったのか恐ろしい限りです。やはりC++闇の軍団なだけあります。
6
くっくっkura 🇯🇵🦀 @PG_kura

「C++もキャストがあるため型安全な言語ではありませんが、使用するキャストを dynamic_castに限定することで、Javaのように型安全になります。」・・・はい? RT @bleis: 型について。後で読む。 / 「型」に関して http://htn.to/vWM3jq

2010-09-15 10:35:05
相沢陽菜 @fetus_hina

「使用するキャストを dynamic_castに限定する」 えー

2010-09-15 10:38:35
めるぽん.am @melponn

そういえば VC8 ぐらい以降の場合、dynamic_cast<Base*>(derived) と書いたときは static_cast と同じコードが生成されるのは確認したことがある

2010-09-15 10:44:04
相沢陽菜 @fetus_hina

なぜ const_cast の説明は「const を外す」と書かれていることが多いのか。いや、const/volatile つける目的で使ったことたぶん無いけど

2010-09-15 10:46:00
普通のC++使い、銀天すばる @SubaruG

const_cast で cv を「つけない」ことも可能なはず。

2010-09-15 10:49:14
くっくっkura 🇯🇵🦀 @PG_kura

そういえばキャスト可能性をテストしたい場合は dynamic_cast、それ以外では polymorphic_cast を使おう、という記事を昨夜読んだんだった。

2010-09-15 10:51:25
めるぽん.am @melponn

dynamic_cast って仮想関数が無い場合ってどうなるんだっけ・・・

2010-09-15 10:54:27
めるぽん.am @melponn

dynamic_cast のテストをやってみようかと思ったけどそもそもちゃんとした仕様を知らないのでまず仕様を調べてからやらないととか思ったけどそもそも仕事が(ry

2010-09-15 11:07:30
普通のC++使い、銀天すばる @SubaruG

お前はconst_castを「const/volatileを外す/付ける」用途でしか使えないと思っているようだが…別になくても使える。 http://ideone.com/7MnYF

2010-09-15 11:07:31
普通のC++使い、銀天すばる @SubaruG

というか const_cast って boost::implicit_cast + cv を外す機能、だよね。大雑把に言えば。

2010-09-15 11:09:14
普通のC++使い、銀天すばる @SubaruG

関係ないけど boost::implicit_cast はもっと短い名前で標準ライブラリに入るべきだと思う。 as とか。

2010-09-15 11:10:12
普通のC++使い、銀天すばる @SubaruG

cast って名前で俺ライブラリに加えたけど、正直 cast でも長いのよ。

2010-09-15 11:10:50
zak @zakkas783

@melponn あ、補足… down-castがある場合失敗します。void* はどうでしたっけ…。VC8さんには怒られたような気がします。

2010-09-15 11:13:34
めるぽん.am @melponn

const_cast なんて使わなくても const なんて無かったことにできる!ってこのネタ何回目だ http://ideone.com/x2Mgu

2010-09-15 11:14:05
めるぽん.am @melponn

VC で実際に dynamic_cast を行うのは __RTDynamicCast って関数なんだけど、Wine のコードを見たときは結構簡単だなーとか思ったけど、VC の処理をアセンブラで追ってくとよく分からなくなったので諦めました。

2010-09-15 11:18:20
zak @zakkas783

@melponn 追試結果: void* へのdynamic_castはcast元がpolymorphicでないとcomplie-errorっぽいですね。>VC8 gcc4.3

2010-09-15 11:23:15
めるぽん.am @melponn

まあ dynamic_cast なんて誰も使わないから必要無いですよね

2010-09-15 11:23:52
くっくっkura 🇯🇵🦀 @PG_kura

ビクッ RT @melponn: まあ dynamic_cast なんて誰も使わないから必要無いですよね

2010-09-15 11:24:25
普通のC++使い、銀天すばる @SubaruG

std::addressof「・・・。」 RT @takeshik: AddressOf とか喧嘩売ってる

2010-09-15 11:29:01
普通のC++使い、銀天すばる @SubaruG

ポインタではなく参照を使いましょう。 RT @nyaocat: new は失敗した時に例外を投げるのに dynamic_cast は失敗した時に null を返すのはおかしい。気がする。 boost::polymorphic_cast 使えば良いだけだけど

2010-09-15 11:29:30
くっくっkura 🇯🇵🦀 @PG_kura

dynamic_cast は書くだけで何故か const_cast より強い罪悪感を感じて、その夜はほぼ間違いなくうなされる呪いの一種。

2010-09-15 11:29:36
めるぽん.am @melponn

よく考えるとそもそも RTTI とか無効にしてますし・・・

2010-09-15 11:29:39
普通のC++使い、銀天すばる @SubaruG

参照を使った場合は失敗時に std::bad_cast が投げられます。

2010-09-15 11:29:45
普通のC++使い、銀天すばる @SubaruG

ポインタを使っていいのはライブラリの中だけだよね。

2010-09-15 11:30:18
1 ・・ 4 次へ