Hatena::ブログ(Diary)

総合的な学習のお時間 RSSフィード

2009-10-05

[]const参照は一時変数にバインドできる 01:34 const参照は一時変数にバインドできるを含むブックマーク

const参照の関数パラメータに対してデフォルト引数を付けようとして、これってできるんだっけ? と引っかかりました。

例:

void func(const std::vector<int>& param = std::vector<int>());

デフォルト引数となっているstd::vector<int>()はrvalueに評価されるはずなので、そいつへの参照って取れないのでは? という疑問。

しかし、このコードは警告出ずにビルドが通り、期待通りに動作もします。


文法リファレンス本をよく読んでみると、次の記述が見つかりました。

const参照は、一時オブジェクトを参照できるように初期化できる。

(「C++ランゲージクイックリファレンス」 p.43)


というわけで、このコードは大丈夫なようです。

しかしやや気持ち悪い。やっぱりデフォルト引数は使わずに済ませた方が良いかな。

トラックバック - http://d.hatena.ne.jp/tomerun/20091005/1254760448