考慮一下:常量參數壽命在C++
void l(Event const& e)
{
KeyEvent& k = (KeyEvent&)e;
std::cout<<k.action<<" "<<k.keyCode;
}
void k(Event const& e)
{
KeyEvent& k = (KeyEvent&)e;
std::cout<<k.action<<" "<<k.keyCode;
}
void t(Event const& e)
{
l(e);
k(e);
}
int main(int argc, char* argv[])
{
t(KeyEvent(1,1));
}
何時該KeyEvent對象從內存中釋放(範圍結束還是我不得不刪除後它)?如果這個KeyEvent實際上被傳遞了很多,我可以肯定它會保持有效,直到使用它的最後一個函數結束爲止。
@ildjarn:哪裏是未定義的行爲?這就像'static_cast'一樣,只要目標類型匹配對象的運行時類型,它就可以向下轉換。它的確如此...... – 2012-04-28 03:44:45
@Ben:它也像一個'const_cast'一樣,拋棄了臨時性的常量。 – ildjarn 2012-04-28 03:45:40
@ildjarn:臨時不是'const',所以也是允許的。 – 2012-04-28 03:46:06