[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] ポインタと参照
前橋です。
別のMLで散々書いてるネタですみません。(_o_)
水野さん:
>”私はある人にJavaにポインターはありません。
>しかし、newで返ってくる値はいったい何でしょう?”と言われました。
遠藤さん:
>それは「参照」です。でも C++ の参照とは違います。決してポイ
>ンターではありません。
・Cには、「ポインタ」が存在する。「参照」はない。
・C++には、「参照」と「ポインタ」が存在する。それは別のものである。
・Javaには、C/C++における「ポインタ」が存在するが、それを
「参照」と呼んでいる。
と私は認識してますが...
私は、「参照」という言葉の厳密な定義を知らないので、その辺は
ぜひ詳しい方の教えを請いたいです。が、フツーのCプログラマか
ら見れば、Javaの「参照」って、まぎれもなくポインタに見えます。
少なくとも、
「Javaにはポインタがないから簡単だ」
と言われると、私は拒否反応を示してしまいます。
CのポインタとJavaのポインタとの違いというと、
(1)Javaは、プリミティブのポインタをとることができない。
(2)Javaは、オブジェクトと配列については、ポインタしかない。
(3)Javaには、ポインタ演算はない。
(4)Javaには、Cにおける「ポインタと配列の間の微妙な関係」はない。
Cで「ポインタが難しい」とよく言われるのは、実は原因は(4)であ
ると思うので、その点において Java が Cより簡単なのは否定しま
せんけれども。
(1)と(2)って、どうもGCの実装を簡単にするためにこうしたように
しか見えないのですが... 実際の所どうなんでしょう?
オブジェクトの実体をスタック上に取れるようにすると、そこでコ
ンストラクタを呼ばなければならないので、処理系が複雑になると
いうのもありそうですが。
>それが証拠に、有名な swap() 関数問題があります。
>
>【問題】
>Java で swap() 関数を書いてください。
...
># 問題出してる本人も答えは分からん (*_*)
私にも分からんです。
C に慣れた私としては、C++の参照型は、どうも好かんです。コー
ディングをだーっと読んでって、いつ変数の値がぶち壊される可能
性があるのかをつかみにくいと思います。
演算子のオーバーロードも好かんです。
templateは欲しいですが。
------------------------------------------------------------
前橋 和弥 maebashi@xxxxxxxxxx
中部ソフトエンジニアリング(株)
〒450 名古屋市中村区名駅4-10-25(名駅IMAIビル 5F)
Tel:(052)583-4511(代) 内線 252 Fax:(052)583-4566
------------------------------------------------------------