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

C++ 在C+中使用指针或引用作为函数的返回类型是否有经验法则+;?,c++,pointers,reference,function-pointers,C++,Pointers,Reference,Function Pointers,先发N00b警报。当我不理解其中的基本逻辑时,我讨厌做某事。所以,最近我开始使用C++,我仍然试图掌握指针和引用的概念。此外,它们还可以用作函数的返回类型 因此,对于何时、何地以及为什么应该使用指针和引用,我们给出了一个很好的解释。作为函数的返回类型,同样的解释对它们有效吗?是的,有 通过引用: 通过引用返回通过引用传递到函数中的值。请注意,不能通过引用返回在函数中创建的局部变量,一旦函数返回,该局部变量将超出范围 地址: 按地址返回按地址传递到函数中的变量。请注意,不能按地址返回在函数中创建的

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

因此,对于何时、何地以及为什么应该使用指针和引用,我们给出了一个很好的解释。作为函数的返回类型,同样的解释对它们有效吗?

是的,有

通过引用: 通过引用返回通过引用传递到函数中的值。请注意,不能通过引用返回在函数中创建的局部变量,一旦函数返回,该局部变量将超出范围

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


把返回看作是硬币经过的另一面。

不同之处在于引用和指针之间的区别一般来说,它们是两种不同的东西,用于不同的用途。 指针实际上是内存中某个对象的地址(因此它所指向的内容可以更改),引用可以在引擎盖下以相同的方式实现(通常是这样),但它的目的是隐藏内存寻址,而不会失去指向现有对象而不是复制它们的经济性

指针具有与其概念上的内存接近度相关的特性(指针算术实际上是遍历存储的数据),并且可以用来忽略许多适用于其他地方的规则,引用在任何地方都不是那么容易修改的,但提供了更多的安全性和相对稳定性保证

老实说,我不喜欢这些东西的经验法则,特别是指针在错误的地方或手中会有多致命,但如果你绝对必须这样做的话:作为一个noob,只要你有选择,就使用引用是合理的,这可能是一个更安全的赌注。只有当您希望对内存中的多个项目使用单个动态访问器时,或者在某些情况下,指针在初学者级别上才变得有点强制性

如果您绑定到某个API,因此在以何种形式传递的内容方面为您设置了一些内容,那么您很可能希望坚持使用交给您的任何内容(指针保留指针,并作为指针返回,对于引用也是如此)

一般来说,当我听到同一句话中的NOOB、函数和返回指针时,我就关心这个人的安全性:正如前面所说的,C++中的作用域是,函数内创建的东西在返回后会被破坏,而在这些情况下,你可能会用REFS或普通拷贝获得编译器警告或明显的错误,如果您开始执行指针技巧,那么它就会出现可怕的错误,错误可能会从它们产生的地方漫延很远。仍然有可能用参考文献把事情搞得一团糟,但在我看来,远比不上这容易


我仍然鼓励您深入研究一些事情,并通过查看力所能及的代码而不是试图收集经验法则来更好地理解各种用途和一些实现。在我的帖子中有太多的过度简化和省略,这并不好笑,但我似乎无法表达出更好的内容。

这在很大程度上取决于情况和函数的作用。在某些情况下,您必须返回引用,而在另一种情况下,您不能。如果要返回指针或引用,则不能返回指向将消失的对象的指针/引用(例如局部非静态变量)。也许最好的规则是“按值返回”是默认值,但某些运算符在默认情况下应返回引用(例如
ostream&operator)