鑑於原型:重載函數時使用臨時對象作爲參數是否是一種好的做法?
void foo(int i);
void foo(int i, const std::string &s);
實現:
void foo(int i)
{
foo(i, std::string()) ;
//! ^^^^^^^^^^^^^ ^here?
// nothing more.
}
//! ^here?
void foo(int i, const std::string &s)
{
//do something
}
哪裏由std::string()
創建的臨時對象走出去的範圍有多大?以這種方式重載函數是一種很好的做法嗎?
更新:
讓我解釋的情況一點點。作爲練習,我正在嘗試編寫一個類似std::vector
的類,而不使用模板。它唯一的類型是std::string
。班級正文可在another question找到。
在實現resize()
成員函數,我發現std::vector
似乎使用了兩個功能:
所以我不知道我是否應該使用的,而不是單一的一個兩個功能。
如果不理解預期的語義,真的不可能給出一個好的答案。如果兩個'foo'都做同樣的事情,給它們起同樣的名字是有道理的,那麼爲什麼只需要更少的參數就需要調用更多的東西,然後做更多的東西呢?這些東西是微不足道的(日誌?)還是界面的一個可見部分,這樣一個'foo'在外部就可以理解爲不同於另一個? –
隨着編輯,關於生命期的問題沒有多大意義。 – Mat
@DavidSchwartz你好我已經更新了線程。希望它能讓情況更清楚。 –