如何在不调用成员函数的情况下修改对象?

2024-01-01

在 3.10/10 中,该标准表示:

为了修改对象,对象的左值是必需的,但在某些情况下,类类型的右值也可用于修改其所指对象。 [示例:为对象调用的成员函数(9.3)可以修改该对象。 ]

因此,除非在某些情况下,右值是不可修改的。我们被告知调用成员函数是这些例外之一。这给出了除了调用成员函数之外还有修改对象的方法的想法。我想不出办法。

如何在不调用成员函数的情况下修改对象?


如何在不调用成员函数的情况下修改对象[由右值表达式指定]?

我知道只有一种方法可以做到这一点,即将对象绑定到对的引用const,然后丢弃const-ness.

E.g.

template< class Type >
Type& tempRef( Type const& o ) { return const_cast< Type& >( o ); }

struct S { int x; };

int main()
{ tempRef( S() ).x = 3; }

这是因为临时对象不是const本身,除非它是const类型,所以上面的例子并没有抛弃原来的const-ness(即 UB)。

EDIT, 添加:吕克·丹东 https://stackoverflow.com/questions/6466624/how-can-you-modify-an-object-without-calling-member-functions/6467332#6467332的答案显示了另一种(非通用)方式,即临时结构在某个可访问位置存储一些指向对象的引用或指针。

干杯,

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

如何在不调用成员函数的情况下修改对象? 的相关文章

随机推荐

  • 更改 spring-boot 中默认的 Mongo 连接池大小

    我想更改java mongodb驱动程序提供的连接池的默认大小根据 mongo 文档 这是 100 下面是我用来自定义连接池大小的mongo客户端bean 参考这个问题 https stackoverflow com questions 2
  • 解释这个 C 程序的输出

    在以下位置找到此代码C 谜题 http www gowrikumar com c index php include
  • Zend 打开 Zend/Application.php 失败

    好的 我对 Zend 还比较陌生 我创建了一个新的应用程序并开始构建基于的身份验证系统a guide http akrabat com zend auth tutorial 但是 服务器正在排除内部服务器错误 在检查 PHP 错误日志时 我
  • 如何使用System.Net.Mail设置退回邮件地址?

    我正在尝试实施可变信封返回路径 VERP http en wikipedia org wiki Variable envelope return path管理电子邮件地址的方法 即 当我发送的电子邮件被退回时 我希望将其发送到特定的电子邮件
  • 如何在我的 ejs 文件中包含 bootstrap 文件?

    因此 我已经使用 npm bootstrap 3 安装了 bootstrap 但是当我尝试在我的应用程序中包含来自 node modules 的 bootstrap min css 文件时 它在我的控制台中显示此错误 错误信息 在网络选项卡
  • 如何使用 capistrano 3 部署特定修订版

    如何使用 Capistrano 3 部署特定的 git 修订版 Capistrano 2 9 方法不再有效 cap S revision 80655da8d80aaaf92ce5357e7828dc09adb00993 deploy inv
  • 使用特征库从旋转矩阵中获取横摇、俯仰和偏航

    我需要从旋转矩阵中提取横滚 俯仰 偏航角 并且我想确保我所做的事情是正确的 Eigen Matrix lt simFloat 3 1 gt rpy orientation toRotationMatrix eulerAngles 0 1 2
  • 在过滤分支之后将每个人重新基于更改的 git 历史记录

    我们的 git 存储库历史上有一堆不再需要的大文件 我想使用 Pro Git 中解释的过滤分支技术删除它们 http git scm com book en v2 Git Internals Maintenance and Data Rec
  • Zoho API V2 更新记录

    我正在尝试使用 Zoho API 版本 2 在潜在客户中进行简单的记录更新 我使用 PHP 和 CURL 此调用的示例代码 更新记录中的单个字段 如下 apiUrl https www zohoapis com crm v2 Leads v
  • 如何在 Spring 中缩小动态 HTML 响应?

    遵循 Google 的 pagespeed 建议 我希望缩小 Spring 应用程序的 HTML 响应 我指的不是 GZip 而是在发送 HTML 之前从 HTML 中删除注释和空格 我想动态地执行此操作 而不是在我的模板中执行此操作 我的
  • cookiejar 对象可以被 pickle 吗?

    我尝试像这样腌制 CookieJar 对象 import cookielib import pickle dumpFile open cookie dump w cj cookielib CookieJar pickle dump cj d
  • 迭代 Linq 结果时出现奇怪的缓慢现象

    在探索最近的林克问题 https stackoverflow com questions 1582054 handling temporary calculation in linq我注意到该算法似乎相当慢 深入挖掘后 我注意到这不是 li
  • 确定文本字符串中的行数?

    作为打印类的一部分 我希望能够在多个页面上打印长字符串 但我不知道如何计算整个字符串的高度 我将通过首先计算字符串中的行数来确定 我知道我可以计算换行符的数量 但我也使用自动换行 因此每当一行超过页面宽度时就会添加换行符 所以我想我可以计算
  • 防止自定义断言显示在 python unittest 的回溯中

    我想向测试用例添加一些自定义断言方法 作为一个简单的例子 我只是将一个放在下面的测试类中 它按预期工作 但是当生成输出时 回溯在输出中包含自定义断言 要使其表现得像assertEqual 所需的步骤是什么 assertEqual 的代码位于
  • Eclipse 计算代码行数[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我已经尝试过指标插件 http metrics sourceforge net虽然这很好 但这并不是我
  • PHP oAuth POST 请求

    让我的 oAuth POST 请求返回可行的响应时遇到一些问题 任何想法将不胜感激 request provider gt getAuthenticatedRequest POST https graph microsoft com v1
  • 使用 RabbitMQ 发送图像

    我想使用 RabbitMQ 将图像从客户端传输到服务器 然而 从我读到的内容来看 我了解到 RabbitMQ 只能传输文本流 那么如何传输图像呢 amqp主体是一个缓冲区 你可以发送你想要的内容 一般来说 如果你想发送一个文件 你必须读取它
  • 更改列表框中包含绘制项目上特定字符串的特定项目的颜色

    我想更改包含特定字符串的项目的颜色 Private Sub ListBox2 DrawItem ByVal sender As Object ByVal e As System Windows Forms DrawItemEventArgs
  • 带有包含动态导航图的 Resources$NotFoundException

    我有一个动态功能模块 它有自己的嵌套导航图 我还有一个动态功能模块 它只是一个片段 如果您有一个带有自己的导航图的动态功能模块 我知道您需要使用包含动态标签 当我构建应用程序并将应用程序部署到 Play 商店进行内部测试时 动态模块可以正确
  • 如何在不调用成员函数的情况下修改对象?

    在 3 10 10 中 该标准表示 为了修改对象 对象的左值是必需的 但在某些情况下 类类型的右值也可用于修改其所指对象 示例 为对象调用的成员函数 9 3 可以修改该对象 因此 除非在某些情况下 右值是不可修改的 我们被告知调用成员函数是