在C++中使用指针或引用作为函数的返回类型是否有经验法则
Is there a rule of thumb on using pointers or references as return types of functions in C++?
N00b 首先发出警报。当我不理解其中的基本逻辑时,我讨厌做某事。所以,最近我开始使用C++,我仍然试图掌握指针和引用的概念。此外,它们用作函数的返回类型。
因此,这里解释了何时,何地以及为什么应该使用指针和引用的良好解释。与函数的返回类型相同的解释是否对它们有效?
区别在于引用和指针之间的区别,它们通常是用于不同用途的两个不同的东西。指针实际上是内存中某些东西的地址(因此它指向的内容可以更改),引用可能在后台以相同的方式实现(并且通常是),但它旨在掩盖内存寻址,而不会失去指向现有对象而不是复制它们的经济性。
指针具有与它们与内存的名义接近性相关的功能(指针算术,从字面上遍历存储的数据),并且可用于忽略许多适用于其他地方的规则,引用在任何地方都不具有延展性,但提供了更多的安全性和相对恒定性保证。
老实说,我不喜欢这些事情的经验法则,尤其是指针,因为它们在错误的地方或手中是多么致命,但如果你绝对必须: 作为一个菜鸟,只要你有选择,只要合理,使用引用可能是一个更安全的选择。 只有当您希望对多个项目使用单个动态访问器时,指针在初学者级别才变得有些强制性在内存中,或在某些多态性情况下。
如果您绑定到某个 API,因此根据以何种形式传递的内容为您设置了内容,那么您很可能希望坚持交给您的任何内容(指针保持指针并按原样返回,对于 refs)。
一般来说,当我在同一句话中听到菜鸟、功能和返回指针时,我会担心那个人的安全:)如前所述,请记住 C++ 中的范围,在函数内部创建的内容一旦返回就会被销毁,虽然在这些情况下使用 refs 或普通副本可能会收到编译器警告或明显错误,但如果您开始执行指针技巧,那就是它出现严重错误的时候,错误可能会远离它们的来源。仍然有可能用参考资料把事情弄得一团糟,但通过一个很长的镜头IMO来说,这并不容易。
我仍然鼓励你研究事物,并尝试通过查看你触手可及的代码来更好地了解各种用途和一些实现,而不是试图收集经验法则。我的帖子中有太多的过度简化和遗漏,这并不好笑,但我似乎无法表达出更好的内容。
是的,有。
参考:按引用返回已通过引用传递到函数中的值。请注意,不能通过引用返回在函数中创建的局部变量,一旦函数返回,该变量将超出范围。
按地址:按地址返回已按地址传递到函数中的变量。请注意,不能按地址返回在函数中创建的局部变量,一旦程序退出函数,该变量将超出范围。
想想返回硬币的另一面。
- 检查函数返回类型是否与STL容器类型值相同
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 在 c++ 中将函数返回类型指定为模板参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 如何避免模板函数返回类型重复?
- 从类型bankAccount的返回值到函数返回类型int没有可行的转换
- 为什么在某些情况下从函数返回类型中删除 cv 限定符?
- 模板类内模板类的函数返回类型
- 为什么函数返回类型中不允许参数推导?
- 函数返回类型之前的"define"
- C++推断要隐式调用的模板函数返回类型
- 具有不同模板参数的函数返回类型
- 当函数返回类型为父类时,如何返回子类的对象?
- C++:在原型中声明"auto"函数返回类型仍然会导致在扣除错误之前使用"auto&quo
- C++14 'auto'能够获取函数返回类型,我们还需要 std::result_of<> 吗?
- 函数返回类型中的模板类型推断
- 嵌套模板类返回类型在 C++ 中的头文件中函数返回类型的语法
- C++重写 void 函数返回类型会导致生成失败
- 从函数内部推断函数返回类型
- C++嵌套类函数返回类型和命名空间