簡體   English   中英

我現在應該使用C ++ 11 lambdas嗎?

[英]Should I use C++11 lambdas now?

這是我的困境:我真的很喜歡lambda,並且一直在使用Boost.Fusion和Phoenix。 它們非常成熟,可以很好地適應許多編譯器。

C ++ 11 lambdas怎么樣? 它們非常好用,然后更容易使用,然后提升替代品(沒有更多的仿函數!)。 最近的ICC和GCC編譯器支持它們。 但是仍然有很多ICC 9.x和GCC 4.1及以下系統,更不用說XL和Sun編譯器了。 這些編譯器是否提供lambda支持?

我傾向於認為也許我應該等待使用C ++ 11功能,以免舊系統拒絕代碼。 你怎么看? 等到較舊的編譯器逐漸消失或者只是這樣做?

您是否需要能夠使用不支持C ++ 11 lambdas的編譯器編譯代碼?

如果是這樣,那么你就不能使用它們(顯然)。 否則,沒有太多理由不使用它們。

在C ++ 11中對lambda表達式的規范幾乎沒有變化,因此現在使用它們幾乎沒有風險。 當然會偶爾出現編譯器錯誤,但大多數情況下這些錯誤很少。

我所知道的唯一與lambda相關的主要特性是支持lambda表達式的多個編譯器的最新版本不支持,這是去年三月添加的一個,它允許無捕獲的lambda被隱式轉換為函數指針。 Visual C ++ 2010和Intel C ++ 11.1不支持(我沒有更高版本的英特爾C ++用於測試,對不起)。 但是,Visual C ++ 11確實支持隱式轉換。

你的目標是多個編譯器嗎? 那就不要。 如果您確切地知道您正在瞄准哪些編譯器,並且他們以相同的方式處理語法,那么繼續使用新功能!

我的觀點是,如果你正在處理庫代碼,你可能應該等待。 我的意思是,如果你想將一個庫捆綁在一起用於開源分發或者在商業跨平台包中使用,那么你很難控制lambda的編譯器支持是什么以及它將如何表現。 幸運的是,lambda表達式,無論多么好,主要是關於語法糖。 它們不提供比傳統仿函數更多的功能,它們只是使它更好,更局部化(當然,我可能錯了,我對lambdas的使用知識非常淺)。 但是,通常情況下,圖書館意味着隱藏實施的丑陋。 如果您需要在不支持lambda的編譯器上使這個庫可用,那么無論如何都必須提供替代的可移植實現。 因此,除非在庫中使用lambdas有明顯的好處(無論是在效率(編譯時間或運行時間)還是在用戶體驗中(例如,如果您使用lambdas來更輕松或更直觀地使用庫) ),這可能不值得努力。

但是,對於用戶端代碼,您可以更輕松地控制軟件的目標平台和/或編譯器。 在這種情況下,如果您預期使用的所有編譯器都支持lambdas ..那么就瘋了!

現在的哲學觀點是,人們必須遵守標准。 這當然包括制作編譯器的人,也包括使用它們的人。 當人們開始編寫需要lambda支持的好庫和/或軟件時,想要使用它們的人會開始向編譯器制造商抱怨添加支持,這反過來會激勵人們使用lambdas ..球也是如此滾動。

最后,通過判斷這個新標准引起的嗡嗡聲以及等待它發布時的興奮程度,我認為程序員將很快將這個標准作為“標准”,編譯器制造商將不得不效仿活着。

在你自己的代碼中,絕對要去吧。 事實上,這是一個很好的主意。

對於工作,stackoverflow不是正確的問題。 除非你是工作地點的決策者,否則你的編譯器會知道你在說什么。 在這種情況下,我鼓勵你做得很棒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM