読者です 読者をやめる 読者になる 読者になる

参照を使うのは何故だろう?

c/c++

ということで、C++FAQから引用。

リファレンスにできることはポインタにもできる。
それなのに、それでもリファレンスを使うのはなぜか。

いくつかの用途で、リファレンスのほうがポインタよりも優れているからだ。
リファレンスが使えるところでポインタを利用するというのは、
指の爪を切るのに糸鋸を使うようなものだ。
たしかに糸鋸を使っても爪を切ることができるだろう。
しかし、精神を集中して慎重にやったほうがよい。
...
オブジェクトのエイリアスで必要とされるものすべてが賄える場合には、
ポインタはオーバースキルで、リファレンスは理想的なものだ。
ポインタは強力だ。そして、どのようなプログラマの道具箱にも格納される価値がある。
しかし、本当に必要な時だけ、ポインタを使うようにすべきだ。
ミニチュアを欲しいだけのユーザに糸鋸を与えるのはやめよう。
できる限りリファレンスを使おう、そして、必然がある場合に限ってポインタを使おう。

C++FAQではリファレンスの説明に9頁ほど割いていて、
具体例はないものの割とお勧め。
トラックバック先でも伸べられているように、
かつまた「constにできるところはconstにすべき」と組み合わせるべきでもあります。
イネスさん - みねこあ
const じゃない参照渡しはするなってばっちゃが言ってた - 好き勝手に・げーあにん?
(constにできないケースもありますけどね、委譲のときとか)
加えて、
id:minekoaさんの言われている、

戻り値については、getter のようなメンバを返すものは const & *1を、関数内で値を作って返すようなものは 値を返します。(この時、return文で直接コンストラクタを使って値を作って返すようすると、最適化されて無駄なコピーコストがかからない、ってのも重要なポイントですよ♪)

イネスさん - みねこあ

戻り値の最適化(RVO (Return Value Optimization))はとっても重要ですね。

C++ FAQ 第2版 - C++プログラミングをきわめるためのQ&A集

C++ FAQ 第2版 - C++プログラミングをきわめるためのQ&A集

  • 作者: マーシャルクライン,マイクギルウ,グレッグロモウ,金沢典子
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/05/15
  • メディア: 単行本
  • 購入: 4人 クリック: 56回
  • この商品を含むブログ (22件) を見る