恒定值变化

2024-02-16

假设我有一个结构体定义:

struct thing
{
    thing* x;
    int z;

    thing() : x(this), z(0) {}
    void foo() const
    {
        this->x->z++;
    }
};

请注意,我创建了一个指向我自己的可变指针(邪恶的笑)

然后我可以像这样使用它:

int main()
{
    const thing c;
    c.foo();
    assert(c.z == 1);
    c.foo();
    assert(c.z == 2);
    return c.z;
}

正如你所看到的,我似乎可以改变一个常数值……这是UB吗?


[dcl.type.cv]p4:

除非任何班级成员声明mutable([dcl.stc]) 可以是 已修改,任何修改尝试 ([expr.ass], [expr.post.incr], [expr.pre.incr]) 在其期间是一个 const 对象 ([basic.type.qualifier]) 生命周期 ([basic.life]) 会导致未定义的行为。

[基本.类型.限定符]p1:

A 常量对象是一个类型的对象const T或此类对象的不可变子对象。

c.z是一个const对象,因为它是一个不可变的子对象c。您的代码尝试在其生命周期内对其进行修改。由此可见,该代码具有未定义的行为。

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

恒定值变化 的相关文章

  • 网络驱动器在启动时不可用

    我有一个 C 应用程序 它在启动时加载 并将数据记录到网络驱动器 该驱动器安装为 X 当机器首次启动时 应用程序会抛出 X 不可用的错误 如果我重新启动应用程序 也会出现同样的错误 但是 如果我打开 Windows 资源管理器并双击浏览驱动
  • 家庭自动化图书馆[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是一名 C 开发人员 希望将家庭自动化作为一种 爱好 我做了一些研究 但想知道是否有人知道支持 In
  • 为什么 new String("Hello") 在 C# 中无效?

    制作背后的逻辑 原因是什么 String s new String Hello World 在 C 中非法 错误是 string String char 的最佳重载方法匹配有一些无效参数 我对 API 文档不感兴趣 我感兴趣的是为什么这是非
  • 如果启用优化,JIT 是否会始终内联此方法?

    我并不期望得到明确的 是 或 否 您可能拥有的任何知识我都会考虑作为答案 private String CalculateCharge Nullable
  • 使用 Thread.Sleep 等待的替代方法

    首先我不是在问同样的问题C Thread Sleep 的替代方案 https stackoverflow com questions 5450353 c sharp alternative to thread sleep or C 中 Th
  • 如何使这些 std::function 参数明确?

    传递 lambda 时 以下函数重载是不明确的 我发现std function can be 由大多数可调用类型构造 https stackoverflow com a 22543082 1079110 即使他们的签名不匹配 所以编译器无法
  • 当从字符串文字初始化 char 数组时会发生什么?

    据我了解 以下代码的工作原理如下 char cptr Hello World Hello World 住在 rodata程序内存的一部分 字符串文字 Hello World 返回一个指向字符串基地址的指针 或者所谓 数组 中第一个元素的地址
  • WP8.1:Cortana uri 关联?

    Cortana 是否有 uri 关联 或者从其他应用程序启动的其他方式 我已经尝试过了 await Launcher LaunchUriAsync new Uri cortana await Launcher LaunchUriAsync
  • 第一次机会异常 - 在内存位置长?

    这是什么 我该如何处理 修复它 First chance exception at 0x756fb727 in Program exe Microsoft C exception long at memory location 0x0018
  • 为什么 C# 不支持类构造函数中的隐式泛型类型?

    如果编译器可以推断出泛型类型参数 C 并不要求您指定它 例如 List
  • 通过单击内部小部件而不是标题栏来移动窗口

    在 Windows 中 当我创建 QMainWindow 时 我可以通过单击标题栏并拖动它来在屏幕上移动它 在我的应用程序中 我使用隐藏了标题栏setWindowFlags Qt CustomizeWindowHint 我正在尝试使用小部件
  • 如何在 C++ 中将向量迭代器转换为 int

    我正在寻找 C 向量中的一个元素 当我找到它时 我想以数字形式 整数 浮点数 获取找到的元素的索引 我天真的尝试是这样的 int x int index vector
  • 委托给子组件的模式

    在我正在工作的产品中 非常基本的场景之一是类的序列化 通常 要序列化的类会在其子组件上调用序列化 例如如果有一个类 s t 班级 A B C D 那么A Pack会调用pack B C D 上的函数 由于有很多这样的类 因此必须一遍又一遍地
  • C++ 中什么被视为语句?

    我的教授通常会问我的班级给定程序中有多少条语句 但我无法确定他将什么定义为语句 似乎 if else 是一个语句 而 for 循环也是一个语句 无论其中是否还有其他假设的语句 对于这个问题是否有任何管理规则或者他对自己的发明的定义 Than
  • 良好的类似 STL 的 C 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 对于具有向量 双端队列 堆栈 哈希图 树形图 集合等数据结构的 C 语言来说 有哪些好的库 请使用纯 C 并且与平台无关 The Glib
  • Wpf TextBlock 中的垂直文本

    是否可以垂直显示 TextBlock 中的文本 以便所有字母彼此堆叠 不使用 LayoutTransform 旋转 还没有人提到使用纯 XAML 垂直堆叠任意字符串的字母 不旋转它们 的明显而简单的方法
  • 在 C#.NET 应用程序中使用 SQL Server 时间数据类型?

    如何使用 SQLtimeSQL Server 2008 中 C NET 中引入的数据类型 我一直在努力让它发挥作用 但没有成功 这是一个MSDN 文章 http msdn microsoft com en us library bb6751
  • 如何使用 Web Connector 连接 QuickBooks Desktop?

    我正在尝试开发一个简单的 Web 表单应用程序来从 aspx 页面创建 编辑发票 并希望使用 Web 连接器和 ASMX Web 服务同步 QB 桌面和 MS SQL 数据库 2 路同步 QBD gt Web 应用程序和 Web 应用程序
  • 如何以编程方式对 WebBrowser 控件安全警报回答“是”

    我正在使用 WebBrowser 控件以编程方式访问单个网站 但每当我登录时 我都会收到此证书安全警报 由于我信任该网站 并且我还需要以编程方式自动登录 因此此对话框会妨碍我 我搜索了解决方案并发现一个和我类似的问题 https stack
  • 不能从模板 C++ 类继承[重复]

    这个问题在这里已经有答案了 我不知道这里出了什么问题 也许有人可以帮助我 我想继承我的新班级MyDictionary来自模板抽象类dictionary 我有这样的代码 字典 h ifndef UNTITLED CPP DICTIONARY

随机推荐

  • bc 及其 ibase/obase 选项:

    我偶然发现了一个奇怪的错误 我想 我尝试将 512 读取为基数 6 的数字 并将其输出为基数 16 echo ibase 6 obase 16 512 bc 161 正如你所看到的 输出是161 但它应该是bc 原文如此 我尝试使用基数 1
  • PeekMessage 收不到消息?

    我创建了一个自定义消息类型 用于调整我的大小Window 称为WM NEED RESIZE 我已在 h 文件中定义它 并在 cpp 文件中初始化 我也注册了我的WindowProc接受消息的功能 以下是这些项目的代码 const uint3
  • 部署在iis上的asp.net core应用遇到500内部服务器错误

    哎呀 500内部服务器错误 启动应用程序时发生错误 当我将数据库功能添加到我的 asp net core 应用程序并将其部署到 iis 时 出现此消息 当我在 Visual Studio 中开发它时 一切都很顺利 但是部署之后就出现了这个错
  • Django 迁移添加默认字段作为模型函数

    我向 Django 模型添加了一个新的 不可为空的字段 并尝试使用迁移来部署该更改 我如何将现有模型使用的默认值设置为这些模型的某个函数而不是常量 举个例子 假设我以前有一个created on字段 我刚刚添加了一个updated on我想
  • 如何创建纵轴(Y 轴)为字符串的图表?

    我想要制作的图表是使用 Chart js 制作的折线图 纵轴为字符串 横轴为数字 例如 横轴是时间 纵轴是帽子的颜色 见下图 var myChart new Chart ctx type line data labels 1 2 3 4 5
  • Gridview动态添加新行

    我有一个文件上传控件 并且有一个按钮 上传 因此当单击通风口触发时 我希望在 gridview 中创建一个新行并获取文件名并绑定到列并将其显示在页面上 请问有什么想法该怎么做吗 这是代码 protected void Button1 Cli
  • Android - 将对象传递给另一个活动

    我正在利用以下类 我将其作为对象 http pastebin com rKmtbDgF http pastebin com rKmtbDgF 我正在尝试使用以下方式传递它 Intent booklist new Intent getBase
  • JDK 1.8.0_92 Nashorn JS 引擎indexOf 行为

    我在 java8 中使用 nashorn javascript 引擎在运行时评估一些表达式 我有一个 util 类 方法如下 public static String evaluateJavaScriptExpression String
  • Android向viewpager添加了圆圈指示器[重复]

    这个问题在这里已经有答案了 您好 我创建了一个视图寻呼机 但有谁知道我如何在页面视图上显示代表分页的圆圈 我认为它提供了一个指示器 但我不完全确定 这是迄今为止包含我的视图寻呼机的代码 public class LevelSelect ex
  • TFS 与 VSTS 的未来

    微软还在开发这两种产品吗 TFS 的开发是否已被放弃而转而支持 VSTS 就上下文而言 我们现在正在使用 TFS 而 VSTS 显然具有更好的集成性 特别是 Microsoft Teams 和 ZenDesk 这对于让我们的工作流程处于更易
  • (Android)如何填充ListView背景并保持标题透明度

    我有一个自定义图像背景 它填充 ListView 后面的整个屏幕 ListView 有一个包含一些数据的标题 然后是一个透明的 10dp 边距 允许我们看到一点背景图像 然后是更多数据 在这个标题下方 在 ListView 的 主体 中 我
  • Laravel 4 查询生成器 - 具有复杂的左连接

    我是 Laravel 4 的新手 我有这样的疑问 SELECT a id active name email img location IFNULL b Total 0 AS LeadTotal IFNULL c Total 0 AS In
  • 使用新的用户名和密码更新 vsts-npm-auth

    我已经安装了vsts npm auth使用以下命令进行打包 npm install g vsts npm auth registry https registry npmjs com 我跑了vsts npm auth config npmr
  • Nuget 4安装在哪里

    Visual Studio 2017 附带 Nuget 4 0 0 但是 它没有放置在路径上 在哪里可以找到使用 CLI 的 nuget 可执行文件 视觉工作室 2017不使用NuGet exe而是使用扩展名NuGet为了达成这个 您应该能
  • 正则表达式解析CSS选择器

    我想解析这个 CSS 选择器 以及其他类似形式的选择器 div class1 myid class2 key value 并让它匹配 class1 和 class2 但我不知道要使用什么正则表达式 例子 http www rubular c
  • 使用 gitlab runner 安装 hostpah 卷的正确方法是什么?

    我需要创建一个卷来公开 maven m2 文件夹 以便在我的所有项目中重用 但我根本无法做到这一点 我的 gitlab 运行程序作为容器在我的 kubernetes 集群中运行 遵循部署和配置图 apiVersion extensions
  • 如何使用 Ms Access 日期/时间扩展数据类型

    访问女士表明有一种名为 日期 时间扩展 的数据类型 其中 日期 时间扩展数据类型存储日期和时间信息 与日期 时间数据类型类似 但它提供更大的日期范围 更高的小数精度以及与 SQL Server datetime2 日期类型的兼容性 但是 我
  • 将一个目录和子目录中的所有文件复制到单个位置[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 以下是将所有 txt 文件从一个位置复制到另一个位置的代码
  • 使用 Objective-C/Cocoa 启动 Mac 应用程序

    使用命令行启动路径查找器应用程序时 我使用open a Path Finder app Users 基于这个想法 我使用以下代码来启动路径查找器 我可以在不使用的情况下启动应用程序吗open命令行 NSTask task task NSTa
  • 恒定值变化

    假设我有一个结构体定义 struct thing thing x int z thing x this z 0 void foo const this gt x gt z 请注意 我创建了一个指向我自己的可变指针 邪恶的笑 然后我可以像这样