返回数组元素时,非常量引用的初始化无效

2023-11-29

我正在编写一个包装动态分配数组的类,并且正在尝试编写operator[] 函数。目前我有:

bool& solution::operator[](unsigned int pos)
{
  if(pos < _size)
  {
    return this->_data[pos];
  }
  else
  {
    return false;
  }
}

但我从 g++ 收到以下错误:

error: invalid initialization of non-const reference of type ‘bool&’ from an rvalue of type ‘bool’

我应该怎么做?我需要 [] 运算符才能修改元素。


这是因为布尔文字false这是一个右值,不能绑定到非常量引用bool&这是的返回类型operator[].

只需更改返回类型bool& to bool,错误就会消失。但这并不能解决你的问题,正如你所说,你想返回参考元素的,以便可以在调用站点上更改元素,然后您必须这样做:

//correct solution
bool& solution::operator[](unsigned int pos)
{
  if(pos > _size)
     throw std::out_of_range("invalid index");
  return this->_data[pos];
}

也就是说,您应该通知调用者无效的索引,以便它知道出了问题。 C++各种异常类是否正是为了这个目的,即通知错误。

当索引无效时尝试返回任何值(false 或 true),只会隐藏问题。问问你自己,如果你返回一个dummy布尔值(您存储在类中),那么调用者会知道索引是否无效吗?不。

//incorrect solution
bool& solution::operator[](unsigned int pos)
{
  if(pos > _size)
     return _dummy; //it hides the problem, no matter if its true or false!
  return this->_data[pos];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

返回数组元素时,非常量引用的初始化无效 的相关文章

  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 更新Android SDK包列表失败

    每次我尝试打开播放器设置时 它都只显示空白 并且控制台中将显示以下错误 我尝试点击此链接 https answers unity com questions 1320634 unable to list target platforms w
  • 将 JSON 反序列化为 C#

    我看到很多简单的 JSON 反序列化示例 但是当涉及到稍微复杂的东西时 就缺乏示例 我正在研究从 GetResponse 的 API 反序列化响应 简单例如 result updated 1 error null Another resul
  • 如何在多个项目上使用 vagrant

    我是 Vagrant 的新手 我正在尝试 PuPHPet 以便让一切正常运行 我可以启动并运行 Debian 盒子并通过 ssh 进入其中 这更多是我不清楚的工作流程 目前我正在将 PuPHPet 配置下载到名为的文件夹中vagrant我可
  • 如何使用 Injector.get(ActivatedRoute) 检索路由参数?

    我是角度新手 我的目标是拥有一个可以通过 详细 组件 显示单个数据对象字段的组件 扩展的 BaseDetailComponent 由于父类的构造函数将接收服务实例和其他参数 因此我无法在构造函数中使用正常的依赖注入 因此 我需要在 Base
  • Chrome 开发工具中的图层组合

    我有简单的过渡动画div元素 为了防止不必要的绘制事件 我对其应用了更高的 z index 和 0 变换 所以这div可能在它自己的层上 但瀑布图显示了每个动画刻度之后可能发生的图层组成事件 我想知道 这是 GPU 页面渲染之前的最后一层组
  • AndroidKeyStore getEntry 在某个点之后始终失败

    我正在使用 AndroidKeyStore 生成 RSA 密钥对 用于加密 解密内部数据 执行此操作的代码如下 它尝试检索现有的 RSA 密钥对 通过别名 如果不存在 那么它会尝试生成一个新的 代码如下 private void initi
  • 如何为列的每个唯一值仅选择前行?

    假设我有一张客户地址表 CName AddressLine John Smith 123 Nowheresville Jane Doe 456 Evergreen Terrace John Smith 999 Somewhereelse J
  • r ifelse 日期不添加天数

    我需要计算 R 中列日期的条件 Atable 为 PIL final1 lt data frame prior day1 cart c 4 8 prior day1 comp c 2014 06 03 2014 06 07 dia lim
  • PHP数组转多维数组

    我在 php 中有一个数组 其中的对象包含id and a 父 ID 所有没有parent id 的对象都应该是新数组中的根对象 所有对象do有一个parent id 应该被推送到正确的对象的子数组中 这是我原来的数组 array 0 gt
  • 当只有一个子元素时移除伪元素

    我使用一个不可见的伪元素 after 占据容器中的最后一个槽 但如果只有一个元素 我想将其放置在中心 因此 为了做到这一点 我需要 删除 这种情况下的伪元素 如果可以的话我该怎么做 main background 999 margin 0
  • 使用 C# 编程格式化可移动媒体

    我想用 C 编程格式化 FAT32 可移动驱动器 在互联网上我找到了一种方法 但问题是它打开了通用的Windows格式程序 但我只想用 C 来实现 没有内置的 Windows 支持 我的方法是 FAT32 Format Button cli
  • Ansible语法最佳实践,YAML字典(key:value)还是等号(key=value)?

    我习惯将 Ansible 示例视为 file path tmp file state touch 但工作中有人告诉我 我应该只使用 YAML 语法 如下所示 file path tmp file state touch or file pa
  • 继承通用形式无法在设计器中显示

    我今天遇到一个问题 如下 我创建了一个通用表单 公开课Form1 表格然后我创建另一个继承形式 公开课从2 Form 1 form2无法在VS设计器中显示 错误信息是 文件中的所有类都无法设计 这个错误信息是从中文翻译过来的 中文信息是文件
  • 在 Box Android API 中加载、保存和使用身份验证数据

    我最近一直在尝试在我的 Android 应用程序中实现 Box 我知道如何启动身份验证活动并让 BoxAndroidClient 对象准备好对其进行操作 但我不知道如何保存令牌 SharedPreferences 加载它们 然后使用加载的令
  • 使用元数据为超级列创建 Cassandra 架构

    我希望使用 cassandra cli 在我的数据库中具有以下结构 例如 我有一个人有地址 该地址包含邮政编码 门牌号等 原理图看起来像这样 name address value city name city value San Franc
  • 如何在 JavaScript 中对 1970 年以下的日期进行排序?

    所以我正在对日期进行排序 有一个日期1967 08 07 正确的做法是什么 unix时间戳是负数 我还没有找到任何在JS中如何做的线索 The ISO 8601 1967 08 07 结构很容易作为字符串排序 因为它的第一部分是年份 后面是
  • 当我使用 TRANSPOSE 将数组粘贴到工作表中时,为什么我的数组会破坏列?

    在 Excel 中 我使用 VBA 创建一个数组来收集数据 然后将其粘贴回工作表中 这在较小的数据集 约 15 000 行 上运行良好 但当我移动到较大的数据集 约 117 000 行 时 转置 步骤中发生了一些情况 在数组中 我想将标题和
  • java与c中的三元运算符[重复]

    这个问题在这里已经有答案了 为什么这个三元运算符在这里不起作用 但在 c 中却可以完美地工作 import java util Scanner class Pack public static void main String args S
  • 将 RecyclerView 单击的项目移动到顶部

    我有一个包含 n 个项目的 recyclerView 每个项目都可以在单击时展开 我希望我的项目能够展开并在单击时移动到顶部 假设如果我单击第三个项目 那么它应该移动到第一个项目位置 然后它将展开并且滚动应该停止 我已经设法用动画扩展 Re
  • 返回数组元素时,非常量引用的初始化无效

    我正在编写一个包装动态分配数组的类 并且正在尝试编写operator 函数 目前我有 bool solution operator unsigned int pos if pos lt size return this gt data po