class C
{
public:
int True(int i) const
{
return i+2;
}
};
const C& F(const C& c)
{
return c;
}
int main()
{
const C& c = F(C()); // Line 1
cout << boolalpha << c.True(1) << endl; // Line 2
}
質問> 上記のコードが正しい値を出力できるのはなぜですか? c
変数が 2 行目に到達したときに、無効な一時C
オブジェクトを参照すると仮定します。
// アップデート
このOPを更新して、この質問に関心がある理由を説明したいと思います。
以下は、C++ テンプレートのコード スニペットです: The Complete Guide
// maximum of two values of any type
template <typename T>
inline T const& max (T const& a, T const& b)
{
return a < b ? b : a;
}
ご覧のとおり、関数はパスイン パラメータへの参照を返します。代わりに次のバージョンではないのはなぜだろうか:
// maximum of two values of any type
template <typename T>
inline T max (T const& a, T const& b)
{
return a < b ? b : a;
}