頭DIMな機械伯爵です。
※タイトルは、中部地方限定の中部電力のCMのパロ・・・
> これはどういうケースのときに
> 明示的キャストをしないといけないのでしょうか?
>
> 手元にある「プログラミング言語C++(第2版)」の
> 「r.4.7 リファレンス変換」と「r.10 派生クラス」を読むと、
> クラスへのリファレンスは曖昧でなければアクセス可能な
> 基底クラスへのリファレンスへと暗黙に変換してもよい、と
> 説明されているので、明示的なキャストがないといけない場合が
> 思いつかないのです。
「リファレンス(参照)」なら暗示的にキャストできます。
でも、C++では「クラスインスタンスそのもの」が生成できるんです。
※newキーワードもmallocも使わないでクラスインスタンスを生成できることが、
もしかしたら忘れられているのかもしれませんが・・・
JavaでもPythonでもRubyでも、C++以降の言語は、参照でないオブジェクト
などに何の意味もないと考えて、そんなことは出来ないようになっていますが、
C言語の延長のC++では、実はまだ出来るんです。
参照(リファレンス・・・あるいは誤解を覚悟で言うならポインタ)と、参照
でないものの違いはなかなか難しいのですが、とりあえずC++では、参照を増やして
もオブジェクトの占めるメモリは増えず、アクセスできるポイントだけが増えますが、
実体を増やすと、別のメモリスペースにオブジェクトがクローンされます。
ここらへんの事情がわかると、あらためて新しい言語のありがたさが分かります。
機械伯爵