在C中,我认为没有引用,因此返回值可以是指针或数据类型本身。如果它是局部变量,则返回指针没有任何意义。如果动态分配变量,则只能返回指针。
然而,在C ++中,有一个新的选择,参考。如果我想返回的是一个局部变量,我想我只能选择返回自己,因为其他两个在函数返回后没有任何引用或指向。如果我动态分配变量,我该返回什么?指针或参考?优势和劣势是什么?为什么不直接返回变量?
一个非常简单的例子:
class TreeNode
{
//......May be some elements and functions.
}
TreeNode& test()
{
TreeNode* temp = new TreeNode;
return *temp;
}
我不知道返回什么,指针或参考?
答案 0 :(得分:1)
如果我动态分配变量,我该返回什么?
返回指针(常规指针或智能指针,具体取决于具体情况)。不要返回对动态分配对象的引用:最终,您需要释放对象的内存;你必须使用的构造delete &someRef
非常违反直觉。
当您从成员函数返回时,返回引用是合适的,并且您要返回的引用是成员,或者当您返回对首先传递给您的函数的对象的引用时
为什么不直接返回变量?
这也是一个非常有效的选择:按值返回可让您不必担心内存管理和对象所有权。最大的障碍是复制成本。然而,它们的低效率往往被高估,导致过早优化。
答案 1 :(得分:0)
在最终编译的机器代码中,引用基本上与指针相同。它只是C ++,为引用定义了一组不同的规则和语法。可以把它想象成一个指针,当你声明它时它可以(并且必须)只被初始化一次,它永远不会是NULL
。如果你返回一个引用,那么你基本上是返回一个指针但你已经向调用者发出信号,告知返回值是一个不能是NULL
的“指针”(引用)。参考参数是相似的,使用引用函数/方法参数,您只是将指针传递给某个东西,并告诉函数实现该“指针”永远不会是NULL
。
答案 2 :(得分:0)
如果动态分配变量,则可以返回指针或引用。
如果要返回的变量占用大量内存,则最好返回指针或引用而不是变量本身。
答案 3 :(得分:0)
如果返回引用或指针,则返回变量的地址。
如果返回变量,则返回变量的副本。对于大变量,副本有开销(特别是在动态分配时,使用局部变量,编译器可以在某些情况下优化代码并避免复制)。
如前所述,引用和指针之间的区别在于语法和规则。基本上选择你最喜欢哪一个。指针更明确。使用指针,您可能还记得必须释放动态变量。