为什么可以通过使用指向对象成员的指针的 const 成员函数来修改对象状态?

2023-12-14

为什么此代码不会产生编译器错误:

class C
{
    int _i{ 123 };
    int* ptr{ &_i };
public:
    int& i() const { return *ptr; }
};

int main()
{
    C const c;
    c.i() += 321;
    return c.i();
}

标准中有关于这种行为的一些文字吗?当然,也许没有必要指向可以直接访问的成员,但是在堆上拥有也可以被视为对象一部分的资源呢?


在对象的构造和销毁过程中,成员不是 const。这意味着您可以存储一个指向在构造对象后将成为 const 的成员的非常量指针。使用该指针更改 const 对象的值是未定义的行为。引用参考参数:

通过非常量访问路径修改常量对象并通过非易失性左值引用易失性对象会导致未定义的行为。

并引用[dcl.type.cv]/4:

除了声明为可变的任何类成员都可以修改之外,任何在其生命周期内修改 const 对象的尝试都会导致未定义的行为。

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

为什么可以通过使用指向对象成员的指针的 const 成员函数来修改对象状态? 的相关文章

  • 如何在自定义保存操作 WFFM 中获取 Sitecore.Current.Site 对象?

    我在用着面向营销人员的 Sitecore 网络表单 在里面save action我得到的表格Sitecore Context Site对象 但该对象没有返回正确的上下文 该值为 modules shell 有谁知道我如何才能获得正确的上下文
  • 有没有一种简单的方法来获取 .NET 为参数化查询生成的“sp_executesql”查询?

    背景 如果我有以下程序 public class Program public static void Main using var connection new SqlConnection Server local Database Te
  • 如何在函数和循环中使用 data.table?

    在评估效用时data table vs dplyr 一个关键因素是在函数和循环中使用它的能力 为此 我修改了本文中使用的代码片段 data table 与 dplyr 一个可以做得很好而另一个不能做或做得很差吗 https stackove
  • 在 std::forward 中它如何接受右值?

    看看斯科特 迈耶的有效的现代 C 第200 201页 建议的简化实施std forward可能是 在其他地方看到了正确的实现 template
  • 管理多个解决方案中存在的 C# 项目的 Nuget 包

    我现在正处于这样的阶段重构疯狂一个有很多的大项目遗留和不稳定的模块 我决定拆分解决方案目前 所有项目 大约有 20 个 而且由于下个月肯定会出现单元测试项目 还会有更多 链接在一起 使其更加独立和细化 通过这种方法 有一些模块 例如需要在多
  • 本机 C++ 通过代理 C++ 托管 dll 使用 C# dll

    这相当复杂 所以请耐心听我说 我有一个用本机 仅限 Win32 C 编码的第 3 方程序 目标 作为目标设计的一部分 它实现了一个 dll 插件系统 本机 DLL 当放置在程序的 ext 目录中时 由目标加载 然后 目标根据需要调用每个 D
  • 最终类中的静态函数是否隐式最终?

    我的问题基本上与this https stackoverflow com q 8766476 3882565一 但这是否也适用于static功能 我想了解 编译器是否处理所有static函数在一个final类为final 是否添加final
  • 带有 Prism 区域适配器的 AvalonDock

    我看到了一些关于 SO 的问题 但似乎没有一个适合我 我希望能够使用伟大的使用 Prism 4 但是 所有示例区域适配器均适用于 Avalondock 1 x 系列 我无法使其工作 有人有关于如何为 AvalonDock 的 LayoutD
  • C# 中 value 为匿名类型的字典

    是否可以在 C 中创建一个System Collections Generic Dictionary
  • 需要帮助将 winform 迁移到 net 5

    我正在将 winform 应用程序从 net core 3 1 移植到 net 5 并收到以下错误 严重性代码 说明 项目文件行抑制状态 错误NETSDK1136 目标平台必须设置为Windows 通常 通过在 TargetFramewor
  • 将控制台输入和输出重定向到文本框

    您好 提前致谢 我正在尝试 非常努力 将控制台输入和输出重定向到文本框 到目前为止 输出工作正常 但问题在于输入 例如 我无法执行一个简单的程序来执行以下操作 Console WriteLine 请输入您的姓名 字符串名称 Console
  • 有没有办法对 RichTextBox 的撤消历史进行分组或暂时禁用它?

    我目前正在研究 WPF 中 RichTextBox 内的表格 在 WPF 中 表格没有行和列 只有行 每行都有一定数量的单元格 当用户按下 添加列 按钮时 我的程序会向每一行添加一个新单元格 使用此方法的问题是 在用户添加一列后 如果他们按
  • 创建 PING 程序时限制 ICMP 回显答复

    我正在编写一个多线程 ping 程序 我在每个线程 针对每个 IP 上创建了原始套接字 并使用 sendto 向每个线程发送了 ICMP Echo 请求 然后在每个线程中执行了 receivevfrom 我正在从各种套接字中的 IP 获取消
  • 等效

    这是否保证始终为真 std numeric limits
  • 如何从 MongoDB 中的 ChangeStream 过滤对特定字段的更新

    我正在设置一个 ChangeStream 以便在集合中的文档发生更改时通知我 以便我可以将该文档的 LastModified 元素更新插入到事件发生的时间 由于此更新将导致 ChangeStream 上发生新事件 因此我需要过滤掉这些更新以
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 对嵌套属性使用 XmlAttributeOverrides

    我试图使用 XmlAttributeOverrides 来控制类序列化后哪些类属性出现在 xml 中 它适用于 根 类上的属性 但不适用于嵌套属性 这是一个简单的例子来说明我想要完成的任务 我的类层次结构如下 public class Ma
  • 为什么一个结构体,如果没有显式的默认构造函数,则无法编译将另一个结构体作为成员包装在联合体中的结构体?

    这就是我所说的关系 struct A int i 1 struct B union A a void main B b 在这个星座中 我的编译器 vs2015 抱怨 B 的默认构造函数B B void 被删除 并附有编译器已生成的注释B B
  • wpf中的图像问题(图像不显示)

    我不明白为什么我无法在 WPF 中显示图像 也许我不小心修改了我的资源文件夹 这就是我没有显示的原因 所以我创建了一个新的 wpf 应用程序 我有这个 当我运行该程序时 我的图片显示为 为什么当我尝试在程序中执行相同的操作时 图像没有显示
  • 如何获取打印机设备上下文?

    我在 Windows 上尝试使用以下命令打印增强型图元文件 EMF 播放增强元文件 http msdn microsoft com en us library dd162800 28VS 85 29 aspx 我当前正在使用屏幕上窗口的设备

随机推荐

  • 与导航抽屉一起使用时,工具栏后退按钮不起作用

    下面是代码 我已经使用 AppbarConfiguration 定义了所有顶级目的地 class MainActivity DaggerAppCompatActivity NavigationView OnNavigationItemSel
  • codeigniter 删除index.php表单url

    我正在尝试从 Codeigniter 中的 url 中删除 index php 我知道如何从基本网址中删除index php 如下所示example com controller 但我不知道如何删除子文件夹中的 index php exam
  • Angular - this.function 不是一个函数[重复]

    这个问题在这里已经有答案了 我对此有点绝望 我有一个组件 它获取数据并使用该数据的信息渲染地图 这里一切都很好 我在这张地图上放置了标记 我想在标记中执行单击功能 这些函数调用组件中定义的另一个函数 并为我带来数据以在模式中显示它 但是 当
  • JavaScript:操作两个数组

    我刚刚开始学习 JavaScript 并且不知道如何处理这个问题 问题是这样的 五个人 John Ed Sam Alex 和 Mark 年龄分别为 16 25 18 30 和 27 岁 我想使用数组和函数来输出五个中最年轻和最老的 我尝试形
  • 合并排序以计算 Python 中的拆分反转

    我正在尝试使用归并排序 我得到的 来计算列表中拆分反转的数量 也就是说 未排序列表前半部分中的元素应该出现在列表后半部分中给定元素之后 未排序列表 例如 3 2 1 4 将包含拆分反转 3 1 但不包含 3 2 因为 3 和 2 都在前半部
  • 如何在共享主机上设置 Mercurial 中央存储库

    我正在尝试设置一个具有共享托管的中央存储库 我从头到尾阅读了本教程https www mercurial scm org wiki PublishingRepositories无济于事 这是我采取的步骤 1 Copy hgwebdir cg
  • 通过将此 .NET 字符串更改为 const 是否会提高性能? IL 会自动执行此操作吗?

    给出以下简单的 NET 代码 这两者之间在字符串方面有什么区别吗 xml if extension Equals xml StringComparison OrdinalIgnoreCase return FileType Xml vs c
  • Java keytool 从 url/port 添加服务器证书的简单方法

    我有一个带有自签名证书的服务器 但也需要客户端证书身份验证 我在尝试获取原始 CA 服务器证书时遇到了困难 因此我可以将其导入密钥库 有人对如何轻松做到这一点有一些建议吗 正在研究如何在使用 jenkins cli 时信任证书 并发现htt
  • FOSRestBundle:ParamFetcher 错误

    我在我的项目中使用 FOSRestBundle 我已经配置了这条路由来访问不同的数据 Rest Get Rest QueryParam name categoriesId requirements 0 9a zA Z s default d
  • 来自私人 github 存储库的 npm 包,安装与更新 (package.json)

    我已经看到这个问题了npm install vs update 有什么区别 我的问题是关于使用安装与更新私人 github 存储库git urls 我有一个在 grunt 中使用的私人 github 存储库 该存储库经常更新 我使用安装了这
  • 正则表达式允许字母数字、最多一个空格等

    我正在打开这个线程 该线程与另一个线程非常相似 但我无法找出问题 我有一个输入字段 允许字母数字字符串与可选的唯一空格作为分隔符 然后是可选的其他字母数字字符串等 我找到这个正则表达式 0 9a zA z 有用 但是 当我在一个长句子中出现
  • 从 URL 展开特定的折叠式

    如果我使用地址 www xxxxxx com test html chgd 第二个手风琴应该展开 我使用了这个网站的源代码 Bootstrap 3从URL扩展手风琴 但它在这种情况下不起作用 我不知道基于源代码来扩展第二个基于URL的手风琴
  • 将时间浮点转换为 HH:mm sql server 格式

    我需要将浮点十进制数格式化为时间格式小时 分钟 我用输入 float 和输出 varchar 6 编写了这个标量值函数 CREATE FUNCTIONE formatOre input float returns varchar 6 as
  • 类型错误:在字符串格式化过程中并非所有参数都被转换元组 python 中的错误

    我试图在数据库中保存一堆元组 cursor cnx cursor query INSERT INTO TableA clientid createddatetime siteid VALUES cursor executemany quer
  • 套接字多线程 - 读取输入流暂停线程

    我正在本地机器上测试套接字 我正在尝试使用线程在一个程序中运行套接字和服务器 我的服务器是一个回显服务器 因此它会发回收到的任何消息 我的问题是 当我在客户端和服务器上启动两个线程时 当它们到达我从输入流读取的部分时 它们会 冻结 它在客户
  • 无法发布错误 React js

    我收到一个有错误的空白页无法发布 注册 第二步 我正在尝试创建多步骤注册 我的主要组件的渲染函数如下 render const languageReg this props currentLanguage default registrat
  • mailto 不可读的字符 - unicode

    我在网站中使用 mailto URI 方案通过电子邮件发送当前页面 问题是我使用印地语作为 mailto 链接的主题 Example a href Testing a 单击链接时 Outlook 版本 6 将打开 并显示一些不可读的字符作为
  • 如何使用 PhoneGap 将图像保存到 iPhone 照片库?

    我正在为 iPhone 创建一个 PhoneGap 应用程序 用于显示图像库 有些图像包含在项目安装中 有些来自网络 当用户单击图像时 我希望他们能够将图像保存到 iPhone 照片库 照片 最初 我希望该应用程序能够让用户将图像设置为壁纸
  • 如何删除 DOM 元素标签但保留其内容?

    我有 PHP 代码 它删除至少具有一个属性的所有节点 Here是我的代码
  • 为什么可以通过使用指向对象成员的指针的 const 成员函数来修改对象状态?

    为什么此代码不会产生编译器错误 class C int i 123 int ptr i public int i const return ptr int main C const c c i 321 return c i 标准中有关于这种