「配列への参照」を離れて、参照の意義を論じることにしよう。
コピーコンストラクタと代入演算子は、参照でないと文法的に記述するすべがないんだ。
struct mytype {
mytype& operator=(mytype& that);
mytype(const mytype& that);
};
もし参照がなかったとしたら
1. コピーコンストラクタは mytype::mytype(mytype that) { ... } という形式になる。
2. これを関数呼び出しする引数の複写にコピーコンストラクタが使われる
3. 無限ループ
コピーコンストラクタが mytype::mytype(const mytype* that) { ... } であったなら
代入演算子が mytype& mytype::operator=(const mytype* that) { ... } であったなら
mytype a;
mytype b(&a); // これって複写?不自然すぎる
b=&a; // これって代入?不自然すぎる
ということになる。
生成される機械語としては、参照とポインタで同じになる(違うコードになる処理系が思いつかない)
ので、性能的にはどっちを使っても同じだよ。
|