memo/20120828
created 2012-08-28 modified 2012-08-28
C++ の 参照型って一体何なのさ?
void func(Hoge& hoge) { ... }
C++の 参照型 とは何なのか:
- 内部動作はポインタ
- ただしNullが入らない
- 字面上はポインタじゃない変数のように扱う
(C++ では「メソッド」というのはなくて「メンバ関数」「静的メンバ関数」と呼ぶのが正しいです)
で、C++11 では
右辺値参照というのが増えて
Hoge&& hoge;と書くそうな。
現実的な使い方をお勉強中&脳ミソ再構築中です。
と、書いたのですが、「ポリモーフィズムできます」と突っ込みを頂きました。
もちょっと確認します。orz
確認しました!
参照は、多相性に関してはポインタと同じです!
すいません。ウソつきました。
ということで正しいことを書くと...
C++言語の設計ポリシーに
C++は、コストがかかることは、するのかしないのか、いつするのか、プログラマが選べる言語とするがあり、
ポリモーフィズムは仮想関数テーブルを引くというコストがかかる。と、決めた。
やりたい場合はポインタ表記 または参照表記 のシンタックスを使う(ことでプログラマが明示可能とする)
変数.メンバ関数(); //多相性をサポートしない 参照型の変数.メンバ関数(); //多相性をサポートする ポインタ変数->メンバ関数(); //多相性をサポートする
ならウソではないですね。
多相性に関してはポインタによる表記と参照による表記は同じですね。
以下、私が間違って記憶していた情報を正確な情報で訂正するために必要な範囲で引用。
スタンレーリップマン氏「C++オブジェクトモデル」
19ページ、21ページ、26ページに明記されています。
一体なぜ勘違いしてしまったのか謎ですが…
ということで。ごめんなさい。
// AKIRAさん、タイムリーツッコミ(適時指摘)ありがとうございました。