簡體   English   中英

返回類型在C ++中選擇

[英]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.

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