2011-12-20 26 views
0
//this returns a boost::ptr_vector<Ordre>  
auto& vec = ptf.listeOrdre().liste(); 

auto it = std::find_if(vec.begin(), vec.end(), 
     [message](Ordre& ordre){return ordre.id() == message->id();} 
); 

if(it == vec.end()) 
{ 
    return; 
} 

Ordre& ordre = *it; 

我有一個關於「&」疑問或「*」我應該在拉姆達參數和代碼的最後一行使用。引用或指針與符號的boost :: ptr_vector

有人看到有什麼問題嗎?

我在生產崩潰,我懷疑這個代碼

感謝

+0

您不應該通過引用將消息傳遞給Lambda嗎? – mark 2011-12-20 09:00:58

+0

如果ptr_vector返回指針而不是引用,它根本不會編譯。 - 也許'liste()'返回一個局部變量的引用? – visitor 2011-12-20 09:04:12

+0

@mark:我不知道。你爲什麼認爲我應該通過referenec的消息? – Guillaume07 2011-12-20 09:07:38

回答

1

最後一行看起來是正確的。

一個可能的錯誤可能與ptf.listeOrdre()。如果它返回一個值,它將被複制。那麼vec將具有對臨時對象的引用。

lambda的參數應該是const&,但我懷疑這是問題所在。

除此之外,這段代碼沒有任何問題。

+0

如果'ptf.listeOrdre()'返回一個值,那麼'auto&vec = ptf.listeOrdre()。liste();'將無法編譯,因爲將非const的左值引用綁定到臨時對象是非法的。 – ildjarn 2011-12-20 18:39:49

+0

@ildjarn。你很困惑。如果'liste()'返回一個值,編譯器會抱怨。但是你可以在臨時調用非const函數。如果'listOrdre()'返回一個值,會發生什麼情況。看到這裏:[ideone.com/gpUNA](http://ideone.com/gpUNA) – 2011-12-20 20:15:59

+0

你是對的,我誤讀了。我想說的是,如果'ptf.listeOrdre()。liste()'返回值,那麼'auto&vec = ptf.listeOrdre()。liste();'將無法編譯;但是當然,你在談論'ptf.listeOrdre()',而不是'ptf.listeOrdre()。liste()'。對不起,噪音。 : - ] – ildjarn 2011-12-20 20:43:45