2010-05-29 67 views
21

例如,「如果複製成本昂貴,請勿按值返回對象」(不能始終使用RVO)。這個建議可能因爲右值引用而改變。C++ 11會改變哪些好的編程習慣?

關於存儲指向對象的指針集合的說法也是一樣,因爲將它們按值複製到集合中太昂貴;這個原因可能不再有效。

或者可能不鼓勵使用枚舉來支持「枚舉類」。

還有哪些其他實踐或技巧會改變?

+1

有多個不同的正確答案的問題應該是社區wiki – 2010-05-29 13:11:40

+2

@Jon - 我意識到你是新的,但該網站的一個方面是接受你的答案讓未來的搜索者知道哪一個解決了你的問題。如果有一個最能回答您問題的答案,請使用答案旁邊的複選標記將其選爲接受的答案。 – tvanfosson 2010-05-29 13:13:01

+8

@tvanfosson - 我現在已經接受了一個答案。我擔心的是,標記答案並不能完全解決接受的問題會阻止進一步的答案。無論如何,這是元。 – Jon 2010-05-29 13:25:20

回答

12

我想到的是C++編寫的一個功能般的風格,因爲將變得更加普遍:

  • Lambda表達式使使用標準庫算法更容易
  • 移動語義使得返回標準庫或其他RAII容器對象明顯便宜
+0

關於移動語義:或任何「資源所有者」類。我們甚至可以立即返回鎖:) – 2010-05-29 15:17:48

+0

@Matthieu:對;我的意思是「RAII容器」意義上的「容器」,而不是「標準庫容器」意義上的意思;我已經添加了語言來澄清。謝謝! – 2010-05-29 15:27:56

+0

我認爲這是最好的答案;但我懷疑這可以擴展爲C++ 0x變得更普遍。 – Jon 2010-06-03 01:24:36

6

使用lambda表達式改進了代碼局部性。

4

左值參考不是RVONRVO的替代品。以價值回報大件事情仍然很愚蠢 - 當班級實際上很小並且擁有堆內存時,它就不那麼愚蠢了。通過引用返回值仍然是最佳做法,imo。

作爲原始結構體/類的函數對象將被棄用,以支持lambdas。

說實話,我真的不能想太多。 C++ 0x似乎使現有代碼更簡單,而不是實際改變它。

+0

「C++ 0x似乎使現有代碼更簡單,而不是實際改變它。」究竟。大師說:「源代碼復興不重構」 – AraK 2010-05-29 13:42:26