参照のこと
ん、少なくとも一個抜けてると思うな :)
404 Not Found
ぐは。
すみません。orz
・再代入できない(既にある参照を別の要素を指す参照にすることはできない
ってことかしら……。
加えて、参照を用いると
関数の呼び出しがlvalueになれるのも良い。
これは、参照を返すメンバ関数であるHogeがある場合、
Hoge()=0;
のようなソースコードを赦すが、
これはoperatorの実装に必要不可欠な要素である。
#include <iostream> #include <stdexcept> using namespace std; class Hoge { public: Hoge() {} int& operator[] (unsigned int i) throw(out_of_range); private: int data_[100]; }; int& Hoge::operator[] (unsigned int i) throw(out_of_range) { if (i >= 100) { throw out_of_range("index is out of range!"); } return data_[i]; } int main() { Hoge hoge; hoge[0] = 999; cout << hoge[0] << endl; return 0; }
というコードがある場合、
hoge[0] = 999
は、
hoge.operator[](0) = 999;
ということである。
lvalueになれないとこういうことができないし、
ポインタでも実現できない。
多分あろはさんとかodzさんあたりがびしっと決めてくれるだろう
わくわくてかてか。
C++は C からポインタを受け継ぎました。したがって、重大な互換性の問題を 起こさずにポインタを取り除くことはできませんでした。リファレンスはいくつか の事柄に役に立ちますが、リファレンスをC++に導入した直接の理由は、演算子の オーバーロードをサポートするためでした。 以下に例を示します。
Stroustrup: C++ Style and Technique FAQ 日本語訳
すっぽすっぽ曰く。
また、結合変え(再代入)ができないのは、
Algol68のリファレンスで、懲りたからだそう。
Algol68では、
r1=r2
と書いた場合、
1.r1が参照しているオブジェクトへの代入
2.新しい参照の値をr1に代入(r1の結合変え)
の二つの意味を持つ。(どちらになるかはr2のタイプに依存する
これを避けたかったんだそうだ。
- 作者: Bjarne Stroustrup,ビョーンストラウストラップ,επιστημη,岩谷宏
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/01/19
- メディア: 単行本
- 購入: 2人 クリック: 215回
- この商品を含むブログ (158件) を見る