[英]return type choose in C++
在C語言中,我認為沒有引用,因此返回值可以是指針或數據類型本身。 如果它是局部變量,則返回指針沒有任何意義。 如果變量是動態分配的,則只能返回指針。
但是,在C ++中,有一個新的選擇,即引用。 如果我要返回的是局部變量,我想我只能選擇返回自身,因為其他兩個在函數返回之后將沒有其他要引用或指向的地方。 如果我動態分配變量,該返回什么? 指針還是參考? 優點和缺點是什么? 為什么不只返回變量?
一個非常簡單的例子:
class TreeNode
{
//......May be some elements and functions.
}
TreeNode& test()
{
TreeNode* temp = new TreeNode;
return *temp;
}
我沒有返回什么,指針或參考?
如果我動態分配變量,該返回什么?
返回一個指針(根據情況返回常規指針或智能指針)。 不要返回對動態分配對象的引用:最終,您將需要釋放該對象的內存; 您將不得不使用的構造delete &someRef
非常違反直覺。
當從成員函數返回時,返回的引用是適當的,而返回的引用是對成員的引用,或者當您返回對首先傳遞給函數的對象的引用時,返回引用是合適的。
為什么不只返回變量?
這也是一個非常有效的選擇:按值返回使您不必擔心內存管理和對象所有權。 最大的障礙是復制成本。 但是,它們的效率低下常常被嚴重高估,導致過早的優化。
在最終的編譯后的機器代碼中,引用與指針基本上相同。 它只是C ++,為引用定義了一組不同的規則和語法。 將其視為一個指針,在聲明它時只能(必須必須)初始化一次,並且永遠不能為NULL
。 如果返回引用,則基本上是在返回一個指針,但已向調用者發出信號,表明返回值是不能為NULL
的“指針”(引用)。 引用參數與之類似,使用引用函數/方法參數時,您只是將指針傳遞給某物,並且您告訴函數實現此“指針”從不為NULL
。
如果動態分配變量,則可以返回指針或引用。
如果要返回的變量消耗大量內存,則返回指針或引用比變量本身更好。
如果返回引用或指針,則返回變量的地址。
如果返回變量,則返回變量的副本。 對於大變量,存在復制的開銷(尤其是在動態分配時,對於局部變量,編譯器在某些情況下可以優化代碼並避免復制)。
如前所述,引用和指針之間的區別在於語法和規則。 基本上選擇最喜歡的那個。 指針更加明確。 使用指針,您可能還記得必須取消分配動態變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.