const 成员函数和非常量成员函数有什么区别?

2024-03-02

我对 const 版本和非 const 版本成员函数感到非常困惑,如下所示:

value_type& top() { return this.item }
const value_type& top() const { return this.item }

这两个函数有什么区别?在什么情况下会使用它们?


简而言之,它们用于向您的程序添加“常量正确性”。

value_type& top() { return this.item }

这用于提供可变访问item。使用它可以修改容器中的元素。

例如:

c.top().set_property(5);  // OK - sets a property of 'item'
cout << c.top().get_property();  // OK - gets a property of 'item'

此模式的一个常见示例是返回对元素的可变访问vector::operator[int index].

std::vector<int> v(5);
v[0] = 1;  // Returns operator[] returns int&.

另一方面:

const value_type& top() const { return this.item }

这用于提供const进入item。它比以前的版本更具限制性 - 但它有一个优点 - 您可以在 const 对象上调用它。

void Foo(const Container &c) {
   c.top();  // Since 'c' is const, you cannot modify it... so the const top is called.
   c.top().set_property(5);  // compile error can't modify const 'item'.
   c.top().get_property();   // OK, const access on 'item'. 
}

按照矢量示例:

const std::vector<int> v(5, 2);
v[0] = 5;  // compile error, can't mutate a const vector.
std::cout << v[1];  // OK, const access to the vector.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

const 成员函数和非常量成员函数有什么区别? 的相关文章

  • 以文化中立的方式将字符串拆分为单词

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

    我已经实现了template
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 重载<<的返回值

    include
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • 使用 DX Compositor 的 UWP 应用程序实时模糊背景

    因此 UWP 合成支持已经有一段时间了 我正在寻找一种对元素进行实时模糊的方法 在移动或加载时进行实时模糊 而不是静态快照 到目前为止 我一直在 stackoverflow 和 google 上查看一些答案 这导致我使用Lumia 成像 S
  • Android Admob 插页式内存泄漏

    我试图在某些活动结束时显示插页式广告 问题是插页式广告似乎阻止了活动被垃圾收集 从而导致内存不足异常 我该如何解决这个问题 提前致谢 public class AdActivity extends FragmentActivity prot
  • 如何更改日期格式

    我需要将日期格式更改为 dd mm YYYY HH mm ss 目前我得到的是 YYY mm dd HH mm ss 任何人都可以帮我解决这个问题吗 for var course in data if data course days va
  • WCF服务自定义配置

    在托管多个 WCF 服务的应用程序中 为每个服务添加自定义配置信息的最佳方法是什么 例如 您可能想要传递或设置公司名称或指定服务或某些其他参数的连接字符串 我猜想通过实现 IServiceBehavior 这可能是可能的 即类似
  • 创建一个 html 表格,动态扩展列数以适应屏幕尺寸

    我有很长的数据列表 例如 国家及其缩写 我想在 HTML 表中显示 我不想在 2 x 50 表中显示数据 而是希望它在更大的屏幕上更紧凑 这样用户就不必上下滚动 但仍然不必水平滚动 所以这会动态增长 State Ab Alabama AL
  • 试图理解sql查询中的“除了所有”

    我看到这个例子 但我不明白它的意思 SELECT drinker FROM Frequents EXCEPT ALL SELECT drinker FROM Likes 关系 经常 饮酒者 酒吧 喜欢 饮酒者 啤酒 在这种情况下 ALL 会
  • 纯 CSS 中旋转图像背后的纯色背景

    有没有办法可以使用纯 CSS 绘制图像后面的黑色 背景 我确信可以使用 before伪类 但我无法让它发挥作用 我也尝试过使用阴影 但最终结果与我想要达到的效果并不相似 范围及要求 现代浏览器 没有 javascript 没有 jQuery
  • CSS-目标文本链接在悬停时具有底部边框,但图像链接没有边框

    我希望能够在鼠标悬停时使用 border bottom 来定位 CSS 中的文本链接 但所有图像链接在悬停时都没有边框 所以 a href img src image png a gt this should not have a bott
  • 使用 PyYAML 库解析 AWS CloudFormation 模板

    我正在使用 PyYAML 库编写一个自定义 Python 应用程序 该应用程序需要读取 AWS CloudFormation YAML 模板 我知道这些模板是有效的 CloudFormation 模板 因为我使用 validate temp
  • Lego Mindstorm NXT 2.0:“错误:NXT 蓝牙密钥确认失败”

    运行 Windows 7 和 Lego Mindstorms NXT 2 0 IDE Windows 蓝牙管理器显示 NXT 已连接 并且 NXT 显示在 Windows 蓝牙设备列表中 然而 当我尝试从 Lego IDE 进行连接时 我收
  • 通过基类专门化类模板

    我将我的疑问提炼为以下代码 struct base struct derived public base template
  • 如何编写Thunderbird扩展(webextension)来修改消息显示?

    我想为 Thunderbird 编写一个扩展来修改消息显示 例如插入 替换文本 标记 图像 不幸的是 缺少文档 由于最近的更改 https developer mozilla org en US docs Mozilla Thunderbi
  • 我们如何获取 Android 的设备令牌以进行推送通知?

    我想在我的应用程序中实现推送通知 我想知道 启用谷歌云消息传递API后 我们如何在android中获取推送通知的设备令牌 我们如何获取特定设备的设备令牌 try InstanceID instanceID InstanceID getIns
  • 单一型号的 Carrierwave 多个上传器

    我在本教程的帮助下创建了一个画廊模块https kolosek com rierwave upload multiple images https kolosek com carrierwave upload multiple images
  • 当 module-info.java 文件存在时,无法访问 JavaFX 16 中的资源文件

    我刚刚开始使用 Java 16 似乎不明白为什么我无法访问资源文件 我进行了一些故障排除 至少缩小了我似乎遇到问题的范围 我正在使用 IntelliJ IDEA 2021 2 内部版本 IU 212 4746 92 我创建了一个新项目 并选
  • MySQL:创建表时出现 FK 错误(errno 150)

    我创建了一个模型MySQL工作台 http dev mysql com workbench 现在我正在尝试将其安装到 mysql 服务器 Using 文件 gt 导出 gt 正向工程 SQL CREATE 脚本 它为我输出了一个不错的大文件
  • 对象 <名称> 未声明

    这是我的代码 据我所知 LEDs被定义为 module sevenseg LEDs in output reg 6 0 LEDs input 3 0 in always in begin case in 0 LEDs 7 b1000000
  • php SimpleXML 检查子项是否存在

    A gt b gt c可能存在但是c可能不存在 我该如何检查 将其包装在一个中可能会更好isset if isset A gt b gt c c exists 这样如果 A or A gt b不存在 它不会爆炸
  • WPF中Application.Run的多次调用

    我正在尝试运行一个窗口 关闭它 然后运行第二个窗口 这与 Windows 窗体的工作方式类似 namespace WpfApplication1 public partial class App Application STAThread
  • const 成员函数和非常量成员函数有什么区别?

    我对 const 版本和非 const 版本成员函数感到非常困惑 如下所示 value type top return this item const value type top const return this item 这两个函数有