在C ++中使用指针或引用作为返回类型的函数是否有经验法则?

时间:2015-01-25 13:13:41

标签: c++ pointers reference function-pointers

首先提醒N00b。当我不理解其中的基本逻辑时,我讨厌做某事。所以,最近我开始使用C ++,我仍然试图掌握指针和引用的概念。此外,它们用作返回类型的函数。

所以解释了here关于何时,何地以及为什么应该使用指针和引用的一个很好的解释。相同的解释是否对它们有效,作为函数的返回类型?

2 个答案:

答案 0 :(得分:2)

区别在于引用和指针之间的差异,一般来说,它们是针对不同用途的两种不同的东西。 指针实际上是内存中某些东西的地址(因此它指向的内容可以改变),引用可能在引擎盖下以相同的方式实现(通常是),但它意味着模糊内存寻址不失去指向现有对象的经济而不是复制它们。

指针具有与其与内存的名义接近度相关的特征(指针算法逐字地遍历存储的数据)并且可用于忽略许多适用于其他地方的规则,参考文献在任何地方都不具有可塑性但提供更多的安全性和相对常量保证。

对于这些事情,说实话,我不是粉丝的经验,特别是指针指出他们可能在错误的地方或手中是多么致命,但如果你绝对必须:作为一个使用参考文献的菜鸟只要它合理,如果你有选择可能是一个更安全的赌注。只有当您想要在内存中或在某些多态情况下拥有单个动态访问器时,指针才会在初学者级别变得有些强制。

如果你受某些API的约束,因此根据以什么形式传递的内容为你设置了一些东西,那么你很可能会想要坚持给你的任何东西(指针保持指针并作为这样返回和refs相同)。

一般情况下,当我听到noob,function和返回同一句子中的指针时,我开始关注那个人的安全:)如前所述,记住在C ++中使用作用域,在函数内部创建的东西一旦被破坏就会被破坏返回,虽然你可能会在refs或普通副本的情况下得到编译器警告或明显的错误,但如果你开始执行指针技巧,当它出现可怕的错误时,错误可能会远离它们的起源。它仍然可以通过引用制作一堆东西,但是IMO的镜头很容易。

我仍然鼓励您研究一下并尝试通过查看您所能达到的代码而不是尝试收集经验法则来更好地理解各种用途和一些实现。在我的帖子中有太多的简化和遗漏它并不好笑,但我似乎无法表达出更好的一个。

答案 1 :(得分:1)

是的,有。

参考: 按引用返回通过引用传递给函数的值。请注意,您不能通过引用返回您在函数中创建的局部变量,并且在函数返回后将超出范围。

按地址: 通过地址传递给函数的地址变量返回。请注意,您不能通过地址返回您在函数中创建的局部变量,并且一旦程序退出函数,该局部变量将超出范围。

想想从传球中回来作为硬币的另一面。