2013-11-14 97 views
0

如果我有一個返回值,我使用訪問其他對象的指針的成員函數...返回const int的*和回訪const int的*參考

什麼是優化我的代碼的最佳方式?我應該返回const int*還是const int*&

編輯。我的意思是:返回指針是否涉及副本?會返回一個對編譯器易於優化的指針的引用嗎?我不返回的值賦給任意變量:

my_object.get_ptr()->function(); 
+0

它只是整數。您想要優化的開銷是多少? 'const int *'很好很簡單 – theAlias

+0

這些是非常不同的類型。在一種情況下,它是一個指向「int」的指針,您不能修改權限。在另一種情況下,讀取或修改其他地方存儲的指針指向'int'的指針是正確的,即其他地方的存儲器無權修改。幾乎沒有什麼情況下這些選擇之間的差異是「哪個更快」。這就好比問:「修剪指甲的哪個地方更好,火箭船還是潛艇?」 – Yakk

+0

忘記優化,強調健壯性,正確性和質量。您的優化類型是「微優化」,與設計或更大的優化相比,優化的影響可以忽略不計。在擔心這些優化之前,請使用分析器。 –

回答

1

這些信息我不知道怎麼會是一個優化兩種方式。我會選擇讓你的代碼更易於理解和修正的方式。看看下面的內容。 http://markgodwin.blogspot.com/2009/08/c-reference-to-pointer.html

很明顯,有一段時間必須使用指針的引用(反之亦然)才能使程序正確!但是,在這種情況下,在按值傳遞和按引用傳遞之間進行選擇並不是一個真正的優化問題。哪種方式會導致你期望的行爲?

+0

+1提到正確性和可讀性。太多人花費太多時間進行微觀優化,這對性能和價值回報的影響可以忽略不計。 –

+0

我的對象與迭代器類似(但不完全)。這就是爲什麼優化不必要的副本是相關的。 – jbgs

+0

在我鏈接的網站內的示例中,您應該注意,通過引用傳遞指針也會導致內存泄漏。第一個例子實際上是要泄漏內存。你需要考慮對指針的引用實際上是什麼。指針和對指針的引用是不同類型的東西。因此,將此視爲優化是不正確的。 – shawn1874