参照渡しの関数に(実質)定数を渡すとき
参照渡しで使っている関数があります。
値渡しなら引数のところにコンストラクタを書けますが、参照渡しの場合はこれができません。
void func1( Hoge & hoge )
{
}
void func2( Hoge hoge )
{
}
int main()
{
Hoge v( 123 ); // 普通にインスタンスを生成.
func1( v ); // 普通にOK.
//func1( Hoge(123) );// できない.
func2( v ); // 普通にOK.
func2( Hoge(123) ); // できる.
}
この違いについて(日本語で)調べていたのですがわかんないですね、やっぱり。
考察
考えられることはライフタイム問題でしょうか。
例えば
func1( *(new Hoge(123) );
これはOKなのです。スタックから参照すると破棄の問題が出る、とかそういうことなのでしょうか。
しかし手前でインスタンスを生成し変数名をつけても同じことです。
ちゃんと規格を読めば判るのかな....