我可以寫一個模板函數這樣模板按值傳遞或const引用或...?
template<class T> void f(T x) {...}
或這樣
template<class T> void f(T const& x) {...}
我想,第二個選項可以更優化,因爲它明確地避免了複製,但我懷疑它可以對於某些特定類型T
(例如仿函數?)也失敗。 那麼,什麼時候應該使用第一個選項,何時使用第二個選項?也有這boost::call_traits<T>::param_type
和boost::reference_wrapper
是在我的previous question的答案,但人們不使用它們到處都是,是嗎?這是否有一個經驗法則?謝謝。
冒着看起來很愚蠢的風險,我必須問:一個函子怎麼會失敗? – Beta 2011-02-02 16:22:06
@貝塔:這是一個隨機猜測。如果有人能夠解釋在哪些情況下它實際上可能會失敗,我會感興趣。 – 2011-02-02 16:23:40
你試圖實現什麼?它取決於`f`中的內部代碼。 – 2011-02-02 16:39:44