const参照は一時変数にバインドできる
const参照の関数パラメータに対してデフォルト引数を付けようとして、これってできるんだっけ? と引っかかりました。
例:
void func(const std::vector<int>& param = std::vector<int>());
デフォルト引数となっているstd::vector
はrvalueに評価されるはずなので、そいつへの参照って取れないのでは? という疑問。
しかし、このコードは警告出ずにビルドが通り、期待通りに動作もします。
文法リファレンス本をよく読んでみると、次の記述が見つかりました。
const参照は、一時オブジェクトを参照できるように初期化できる。
(「C++ランゲージクイックリファレンス」 p.43)
というわけで、このコードは大丈夫なようです。
しかしやや気持ち悪い。やっぱりデフォルト引数は使わずに済ませた方が良いかな。