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
將涉及到一個無效的臨時C
對象,當它擊中線2臨時對象被破壞後爲什麼不崩潰
//更新
我想爲什麼我對這個問題的關心更新此OP來說明原因。
這裏是C++模板代碼片段:完全指南
// 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;
}
未定義的行爲? – juanchopanza 2013-02-20 20:23:35
@juanchopanza,'const&'不讓它活着嗎? – hmjd 2013-02-20 20:24:13
@hmjd:臨時存在直到它們被創建的完整表達式的末尾,在這種情況下是'F(C())';在'F'返回後,對象已經死亡。 'const C&c = C();',另一方面,它的生命期會延長。 – ildjarn 2013-02-20 20:25:33