プロが教える店舗&オフィスのセキュリティ対策術

型をキャストみたいに変換するようなものとはわかりますけど、
だったら、このような面倒なことしなくても毎回キャストすればいいんじゃないかなと思います。
書籍を見ても理解が出来ません。
でも、実際に存在する限り何か利点があることは確か。
ならばその利点と使い方とは何でしょうか?

A 回答 (4件)

たとえば、Complex(複素数)のような、2つの数(たとえばreとim)を持つようなクラスを定義したとして、それをdouble型に変換したいとき、reとimどちらをdoubleにすればよいでしょうか?


変換関数では、これを、
reをdoubleとする、とか、
re+imをdoubleとする、とか、
sqrt(re*re+im*im)をdoubleとする、とか、
atan2(im,re)をdoubleとする、とか、
クラスのメンバ変数関係なく0とする、とか、
いろいろと自由に定義することが出来ます。
キャストではこれが出来ません。
これが違いで、利点です。
    • good
    • 0

毎回キャストする方が明らかに面倒だと思うのですが、


どのようなコードを書いて、どこが面倒だと思ってますか?



結局必要に応じて変換関数が呼ばれるのは一緒です。
プログラマが"むやみにキャストする"と、
コンパイラのチェックを抑制する可能性/危険性があげかねません。
変換先の型も、自分で調べなければなりませんし、
コンパイラが判断に迷う/判断を間違わない限り、
任せる方が楽でしょう。

人間が書けば書くほど、ミスの可能性も増えるので、
ルールだけ関数で定義した方が安全だとも思います。

# キャストなんて書かないに越したことがない、ってのがC++の基本だと思います。
# (APIなどの)C言語との連携部分など仕方ないケースは別として、
# 基本的にキャストを多用せざるを得ないのは汚い設計の現われでは。
    • good
    • 0

決まりきった説明をしても、本と大差ない内容になってしまうと思うので...



> だったら、このような面倒なことしなくても毎回キャストすればいいんじゃないかなと思います。

具体的にはどのようにすればよいと思っていますか?その内容を補足してみてください。
    • good
    • 0

変換コンストラクタと変換関数は、キャストの実体を定義するものです。


特に、C++ではクラスを扱うので、プログラマサイドが定義しない限り、処理系には「適切なキャスト」がそもそも判断できませんから。

たとえば、int -> string に変換する際に、
・int の値を、10進数で文字列表現したもの
・int の値を単純に文字コードと見て文字列にしたもの
のどちらでキャストして欲しいかは、プログラマの都合によります。
もっと、複雑なクラスであれば、なおさらです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!