返回引用与返回值 C++ 之间的区别

2024-02-27

关于为什么有必要从函数返回引用的问题。

如果我们替换以下代码,其行为完全相同int& with int在第 9 行和第 16 行。

在我的示例代码中,返回引用与值并不重要吗?在什么样的例子中它会开始变得重要?

在我看来,我们无法返回函数局部变量的引用,因为局部变量将超出调用者的范围。因此,只有返回调用者可以看到(在范围内)的变量的引用才有意义,但是如果函数的调用者可以看到该变量,则不需要返回它(?)(或者这是返回这样做是为了保持代码整洁?)

相关链接:返回参考文献是个好主意吗? https://stackoverflow.com/questions/13077979/is-returning-a-reference-ever-a-good-idea

#include <iostream>
using namespace std;

class myClass{
private:
    int val;
public:
    myClass(int);
    int& GetVal();
};

myClass::myClass(int x){
    val = x;
}

int& myClass::GetVal(){
    return val;
}

int main()
{
    myClass myObj(666);
    cout << myObj.GetVal() << endl;
    system("pause");
    return 0;
}

不同之处在于,当您返回引用时,您可以分配给结果GetVal():

myObj.GetVal() = 42;

您还可以保留返回的引用,并使用它来修改myObj.val later.

If GetVal()要返回val从价值来看,这一切都是不可能的。

这是否是可取的,或者确实是好的设计,完全是一个不同的问题。

请注意,您的示例与中的代码非常不同链接问题 https://stackoverflow.com/questions/13077979/is-returning-a-reference-ever-a-good-idea——该代码返回无效引用,这无疑是一个坏主意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

返回引用与返回值 C++ 之间的区别 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 重载<<的返回值

    include
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 创建 PHP 登录页面的最佳方法是什么?

    我对 PHP 相当陌生 正在寻找一些有关如何在 PHP 中实现身份验证的最佳实践 我是 Adob e 的传播者 令我烦恼的一件事是人们使用 Flex Flash 作为登录屏幕 因此 我想写一篇博客文章 示例 介绍如何使用 HTML PHP
  • Material Design 的 Side-Menu.Android 中的活动意图

    in https github com Yalantis Side Menu Android https github com Yalantis Side Menu Android 请帮我 当我单击侧面菜单中的每个项目时 如何转到命令 意图
  • Laravel getQueryLog 显示行查询已执行

    正如标题所说 我想知道是否有办法获得getQueryLog函数显示查询行 var dump DB getQueryLog 你不能这样做getQueryLog 但您可以监听查询 生成回溯并最终提取行号 routes php Event lis
  • 如何从点文件中提取子图

    我有一个由名为egypt的软件生成的点文件 点文件包含许多节点和边 如果我用这个点文件画图 由于节点太多 很难看清图片 而我需要的只是从一个节点开始的子图 不需要全图 有没有办法使用这个点文件从指定节点 例如start node 绘制子图
  • 避免注册表 Wow6432Node 重定向

    我尝试在 c 中使用 Microsoft Win32 RegistryKey 插入一些简单的注册表项 但路径会自动更改为 HKEY LOCAL MACHINE SOFTWARE Test to HKEY LOCAL MACHINE SOFT
  • 通过排列两个变量添加计数器列(dplyr)

    我到处寻找了一段时间 但找不到适合我情况的任何解决方案 我有一个数据框 其中混合有 ID 和 VAR 下面我尝试复制一个示例 require dplyr seed 123 N lt 3 T lt 4 id lt rep letters 1
  • 根据控制器操作切换 Devise 身份验证模块

    我有一个 Rails 站点 使用Devise https github com plataformatec devise用于身份验证 我有一页 PhotosController create 需要在没有 cookie 的情况下对用户进行身份
  • 将 CMake 项目导入 Eclipse CDT

    我有一个土生土长的CMake http en wikipedia org wiki CMake项目 我想使用Eclipse http en wikipedia org wiki Eclipse 28software 29IDE 使用它 通过
  • Codeigniter - 使用多个数据库

    数据库 php db default hostname 192 168 2 104 db default username webuser db default password db default database vad db def
  • 如何在运行时更改 slf4j 级别?

    我使用 SLF4j 作为我的日志框架 由 log4j 支持 我的问题是我正在寻找一种在运行时更改记录器的日志记录级别的方法 据我了解 slf4j 不允许直接通过其自己的 API 执行此操作 因此 我必须直接访问日志记录提供程序 我个人认为这
  • 当 AppBar 下没有滚动内容时如何禁用 AppBar 阴影

    在 app bar dart 文件中提到海拔控制应用栏下方阴影的大小 默认情况下 如果应用栏下方没有滚动内容 则不会绘制阴影 这是我的代码 Scaffold appBar AppBar brightness Brightness light
  • jTemplates:变量中的 html

    我想在 jTemplate 变量中包含一些 html 例如 td class numeric T total price td 其中总价格是 12 span 00 span 有什么方法可以让 span 显示为 html 吗 我得到它 mhi
  • C++ 中的对象序列化

    我想序列化 反序列化一些结构化数据 以便通过网络将其发送char buffer 更准确地说 假设我有一条消息类型struct Message struct Message Header header Address address size
  • 删除月份中某天的前导“0” SimpleDateFormat

    2012年1月4日的 0 可以去掉吗 我目前正在使用以下 Java 来获取日期格式 例如 Monday January 04 2012 我希望它看起来像 Monday January 4 2012 Date anotherCurDate n
  • 使用 cython 简单包装 C 代码

    我有许多 C 函数 我想从 python 调用它们 cython 似乎是可行的方法 但我无法真正找到具体如何完成此操作的示例 我的 C 函数如下所示 void calculate daily char db name int grid id
  • 如何在NodeJS中获取UTC日期对象? [复制]

    这个问题在这里已经有答案了 我想获取 UTC 中的当前日期对象 我尝试使用new Date Date now 等等 但他们返回当地时间 如何获取 UTC 日期对象 我想要 Date 对象 而不是字符串表示形式 只需使用new Date ne
  • Jetpack Compose dev06 setContent() 不起作用?

    更新到 dev06 并运行应用程序时 出现以下错误 java lang NoSuchMethodError No static method setContent Landroid app Activity Lkotlin jvm func
  • Android Spinner:获取所选项目更改事件

    当所选项目发生更改时 如何设置 Spinner 的事件侦听器 基本上我想做的事情与此类似 spinner1 onSelectionChange handleSelectionChange void handleSelectionChange
  • 如何在 Ubuntu 上的 NetBeans 中设置 zend 自动完成

    我在 Ubuntu 11 04 上的 NetBeans 7 1 中设置 Zend 自动完成代码时陷入困境 一点帮助就太好了 我在工具 gt 选项 gt PHP gt Zend中设置 usr bin zf sh 作为 Zend 脚本 按下 注
  • 返回引用与返回值 C++ 之间的区别

    关于为什么有必要从函数返回引用的问题 如果我们替换以下代码 其行为完全相同int with int在第 9 行和第 16 行 在我的示例代码中 返回引用与值并不重要吗 在什么样的例子中它会开始变得重要 在我看来 我们无法返回函数局部变量的引