const_cast 和 UB

2024-01-01

$5.2.11/7 - “[注:取决于 对象的类型,写操作 通过指针、左值或指针 到由 a 产生的数据成员 const_cast 抛弃 a const 限定符68)may生产 未定义的行为 (7.1.5.1)。 ]”

本节(C++03)的措辞令我惊讶。令人惊讶的是两件事。

a) 首先,使用“可以”。为什么是“可能”?标准中的其他地方对于未定义的行为非常明确

b) 为什么放弃原来的 const 对象的常量而不是立即“未定义的行为”。为什么需要写操作才能触发UB?


a) 首先,使用“可以”。为什么是 它可能'?标准中的其他地方 非常确定 未定义的行为

不要太深入地研究这个词的用法may这里。关键是,在这种情况下放弃常量会导致未定义的行为。

C++ 标准经常使用“may”或“might”,如下所示:

1.3.12:未定义的行为may也可以预期,当这个国际 标准省略了任何描述 行为的明确定义。

强调我的。基本上,该标准使用“可能”一词,如“被允许 http://www.macmillandictionary.com/dictionary/american/may#may_31".

b) 为什么要抛弃 原始 const 对象的常量 不是立即“未定义” 行为'。为什么写是 是否需要触发UB?

写入会触发 UB,因为 const 对象可能会存储在某些平台上的只读内存中。

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

const_cast 和 UB 的相关文章

随机推荐

  • 当 WPF ProgressBar 达到 100% 时,如何停止它的脉冲/动画?

    我有一个基于 MVVM 的 WPF 4 应用程序 它使用进度条 http msdn microsoft com en us library system windows controls progressbar aspx显示长时间运行的操作
  • C++ 运算符 []

    我正在尝试实现运算符 该运算符用于 Set 一次 用于 Get 一次 我需要区分这两种情况 就像 get 的情况一样 如果返回值相等 我需要抛出异常至 1 而在 Set 的情况下 我只是覆盖该值 苹果 2 X y 苹果 2 我不知道如何区分
  • 伊莎贝尔:setprod 的问题

    以下等式在伊莎贝尔中是否成立 setprod f UNIV n finite set setprod x x f UNIV n finite set 如果是 我该如何证明 tested with Isabelle2013 2 theory
  • 操作系统错误:没有这样的文件或目录,errno = 2

    我无法加载存储在资产文件夹中的 html 文件 我已经搜索了两天了 但似乎无法找出原因 我已确保将其也包含在 pubspec yaml 中 并具有适当的缩进并且所有构建都很好 我在 pubspec yaml 中加载的图像资源加载没有问题 所
  • 在 Javafx 中为新的 ListView 条目添加动画

    问题 Hi 我正在尝试编写一个应用程序 其中 ListView 中的每个新条目都会动画化 这是我的代码 public class BookCell extends ListCell
  • AS3 生成动态 SWF?

    是否可以使用 AS3 以编程方式生成 swf 文件 我的小应用程序的作用是使用 FileReference 加载一堆图像 现在我想将它们编译成用户可以下载的独立 swf swf 将是幻灯片 edit 似乎对我的要求有一些误解 我想要一个已编
  • 如何在 Visual Studio 2010 中创建测试证书?

    我正在使用 Visual Studio 2010 我需要在 签名 选项卡中添加 测试证书 但 创建测试证书 按钮被禁用 有什么问题吗 如何激活它或如何创建测试证书 分步说明可在以下位置找到 https learn microsoft com
  • 使用 R 扩展 netCDF 文件中的维度

    我想使用 R 编写一个具有 无限 维度的 netCDF 文件 以便稍后扩展 这是我尝试过的 创建 netcdf文件 library ncdf4 define lat lon time dimensions lat lt ncdim def
  • Moxy 不尊重超类/接口属性

    enter code here我的客户属性分布在两个接口上 如下所示 我使用子接口 ICustomer 定义了外部 xml 绑定 当我将 pojo 编组到 xml 时 Moxy 似乎忽略了超级接口的属性名 这是一个错误还是我需要在 xml
  • 如何在 C# 中将 Null 值赋给 Non-Nullable 类型变量?

    正如我所声明的 双x 现在我想分配 x NULL 我该怎么做 我看过其他一些答案 但无法理解它们 这就是打开此线程的原因 您必须将其声明为可为空类型 double x x null 不可为 null 的类型 例如 double 不能为 nu
  • 为什么我必须提供默认ctor?

    如果我想创建我类型的对象数组 为什么必须提供默认构造函数 感谢您的解答 因为它们必须被初始化 考虑一下是否情况并非如此 struct foo foo int void bar void foo a 10 foo f a 0 not defa
  • JQuery - 添加 onclick 到动态生成的 img 标签

    我正在使用以下代码动态创建多个图像 function refresh gallery galleryidentifier albumid ajax type POST url Photos Thumbnails albumid data s
  • Python 2.7 - 使用 Xvfb 进行 Selenium 无头测试不起作用

    注意我已经查看了以下来源 easyprocess EasyProcessCheckInstalledError cmd Xvfb help OSError Errno 2 没有这样的文件或目录 https stackoverflow com
  • 无法在 Azure 中访问我的 X509Certificate 2 私钥

    我将我的 X509Certificate 存储在数据库中 在byte 以便我的应用程序可以检索证书并使用它来签署我的 JWT 我的 x509Certificate 是通过我在计算机上生成的 pfx 文件传递 的 但现在它作为字节字符串位于数
  • 通过 AirDrop 发送即时创建的 QR 码 UIImage 失败

    我正在动态创建一个 QR 码并将其存储为 UIImage 现在我希望能够使用 UIActivityViewController 发送它 但不知何故它失败了 func generateQRCode from string String gt
  • PHP:如何防止代码的多次执行(如果它已经在处理中)

    解释 通常需要 10 20 秒响应的 API 调用 对另一个服务 存储在数据库中 存储后 系统会立即尝试使用API 将结果显示给用户 但可能会失败 并显示失败 但我们会自动重试 因此还有一个Cron Job设置为每 30 秒运行一次并再次尝
  • RavenDB 对列表属性进行 Map/Reduce

    刚刚学习 Map Reduce 我错过了一个步骤 我读过这篇文章 使用 NET 客户端的 RavenDB Map Reduce 示例 https stackoverflow com questions 4253334 ravendb map
  • 命名参数什么时候有用?

    C 代码中是否存在位置参数不够用的情况 我真的没有看到命名参数有任何好处 相反 我可以看到过度使用命名参数会使代码难以阅读 所以我的问题是 为什么有人会使用它们以及它如何帮助编写更好的代码 因为我确信它们不是毫无理由地实现的 这对我来说看起
  • 如何在 WSO2 APIM 中处理外部/第三方 API 的外部身份验证

    我正在使用 WSO2 APIM 2 5 0 和 IS 5 6 0 它们都是集成的并且运行良好 现在 如果我在 API 管理中加入第三方 API 并使用 oauth 令牌 我就可以访问它 但问题是如何处理具有自己的身份验证的任何外部或第三方
  • const_cast 和 UB

    5 2 11 7 注 取决于 对象的类型 写操作 通过指针 左值或指针 到由 a 产生的数据成员 const cast 抛弃 a const 限定符68 may生产 未定义的行为 7 1 5 1 本节 C 03 的措辞令我惊讶 令人惊讶的是