作者: 機械伯爵
日時: 2002/3/31(00:14)
 頭DIMな機械伯爵です。

※タイトルは、中部地方限定の中部電力のCMのパロ・・・

> これはどういうケースのときに
> 明示的キャストをしないといけないのでしょうか?
> 
> 手元にある「プログラミング言語C++(第2版)」の
> 「r.4.7 リファレンス変換」と「r.10 派生クラス」を読むと、
> クラスへのリファレンスは曖昧でなければアクセス可能な
> 基底クラスへのリファレンスへと暗黙に変換してもよい、と
> 説明されているので、明示的なキャストがないといけない場合が
> 思いつかないのです。

 「リファレンス(参照)」なら暗示的にキャストできます。

 でも、C++では「クラスインスタンスそのもの」が生成できるんです。

※newキーワードもmallocも使わないでクラスインスタンスを生成できることが、
 もしかしたら忘れられているのかもしれませんが・・・

 JavaでもPythonでもRubyでも、C++以降の言語は、参照でないオブジェクト
などに何の意味もないと考えて、そんなことは出来ないようになっていますが、
C言語の延長のC++では、実はまだ出来るんです。

 参照(リファレンス・・・あるいは誤解を覚悟で言うならポインタ)と、参照
でないものの違いはなかなか難しいのですが、とりあえずC++では、参照を増やして
もオブジェクトの占めるメモリは増えず、アクセスできるポイントだけが増えますが、
実体を増やすと、別のメモリスペースにオブジェクトがクローンされます。

 ここらへんの事情がわかると、あらためて新しい言語のありがたさが分かります。

   機械伯爵