严格的指针别名:针对特定问题的任何解决方案?

2023-12-19

我遇到了由于违反严格的指针别名规则而引起的问题。我有一个类型T来自模板和一些整数类型Int相同大小(如sizeof)。我的代码基本上执行以下操作:

T x = some_other_t;
if (*reinterpret_cast <Int*> (&x) == 0)
  ...

Because T是一些可以有构造函数的任意(大小限制除外)类型,我无法进行联合T and Int。 (这仅在 C++0x 中允许,甚至 GCC 还不支持)。

有什么方法可以重写上面的伪代码以保留功能并避免违反严格的别名规则?请注意,这是一个模板,我无法控制T或值some_other_t;赋值和随后的比较确实发生在模板化代码内。

(根据记录,上面的代码在 GCC 4.5 上开始崩溃,如果T包含任何位字段。)


static inline int is_T_0(const T *ob)
{
        int p;
        memcpy(&p, ob, sizeof(int));
        return p == 0;
}

void myfunc(void)
{
    T x = some_other_t;
    if (is_T_0(&x))
        ...

在我的系统上,GCC 优化掉了这两个is_T_0() and memcpy(),导致只有一些汇编指令myfunc().

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

严格的指针别名:针对特定问题的任何解决方案? 的相关文章

  • json.net自定义jobject反序列化

    我正在尝试使用 JsonConvert DeserializeObject string 将字符串反序列化为可与动态一起使用的 jobject 来动态访问 json 文档 但是我想避免知道文档的大小写 以便我可以输入 dynamic doc
  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • 为什么 F# 的默认集合是排序的,而 C# 的不是?

    当从 C 世界迁移到 F 最惯用的可能 思维方式时 我发现了这个有趣的差异 在 C 的 OOP mutable 世界中 默认的集合集合似乎是HashSet https learn microsoft com en us dotnet api
  • 在路由mvc 4中添加公司名称

    我一直在尝试为 Facebook 等用户提供在 URL 中添加公司名称的选项 http localhost 50753 MyCompany Login 我尝试过不同的网址 但没有成功 routes MapRoute name Default
  • 关于Java泛型的一些问题

    假设我有以下接口和实现类 interface Foo
  • 在 Java 中创建 T 的新实例

    在C 中 我们可以定义一个泛型class A
  • 删除是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 C 编程 free 如何知道要释放多少 https stackoverflow com questions 1518711 c programming how does free know how m
  • 在现代 C++ 中,临时生命周期延长何时有用?

    在 C 中 您可以将函数的返回值 返回值 而不是引用 绑定到 const 引用 并且代码仍然有效 因为该临时对象的生命周期将延长到作用域末尾 例如 std string get string return abc void f const
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • 为什么'enable_if'不能用于禁用这里声明

    include
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne

随机推荐

  • 使用反射C#获取JsonProperty属性的名称

    我有一个关于 JsonProperties 的课程 public class MyClass JsonProperty Editor 1 public string Editor get set 我想避免在我的代码中出现魔术字符串 但我需要
  • 可以合并多个输入,每个输入都使用不同来源的 typeahead.js 吗?

    我有一个包含大量文本输入的表单 我想将其中 10 个文本输入与 Bloodhound 一起使用 typeahead js 我让它适用于其中的两个 它们都包括预取和远程数据源 但是 typeahead Bloodhound 的每个实例都有相当
  • 如何使用 Highcharts Drupal 7 模块

    如何使用 Highcharts Drupal 7 模块 我尝试使用视图集成 但设置不可用 但我看到了一个图像http drupal org files views settings png http drupal org files vie
  • Javascript、HTML 和 onClick - 函数未定义

    我正在尝试用 Javascript 制作一个指向富文本编辑器的 插入链接 按钮 基本上 它要做的就是将以下代码添加到其内容中 a href linkGoesHere textGoesHere a 问题是 someJSFunction 当用户
  • 如何使这个线程安全

    我有以下用于 Fluent NHibernate 的 SessionFactory 我收到一个错误 创建 SessionFactory 时使用了无效或不完整的配置 带有 InnerException 的 已添加具有相同密钥的项目 这个问题只
  • 通过添加当前电脑名称来批量重命名电脑

    背景 我作为分包商将数千台计算机从 xp 迁移到 7 这些计算机位于域中 我们拥有在域中添加 修改和删除计算机的管理员权限 当我们第一次接触xp机器时 我们必须在名称前面添加 delete 并重命名 例如 旧名称 pc12345 新名称 d
  • XSLT:包含()多个字符串

    我在 XSLT 中有一个名为variable name我想设置为1 如果相关产品具有名称为 A 或 B 或同时具有 A 和 B 的属性
  • Firestore:授予权限的交易被拒绝

    我们正在访问火库来自我们的 Java 应用程序引擎实例 非事务性请求成功成功 但事务性请求失败并出现错误 firestore PERMISSION DENIED Missing or insufficient permissions 交易示
  • 根据 LatLng 列表计算总距离

    我使用 dart flutter 和 package latlong latlong dart 将 GPX 文件解析为 LatLng 对象列表 这工作正常 但下一步是找到路线的总距离 这里的问题是 如何从 LatLng 对象列表中获取总距离
  • Windows Phone 8 应用程序中的应用内购买有限制吗?

    我们发布了 WP8 应用程序 用于使用应用程序内购买来购买杂志 报纸 我们为每一期创建了单一应用内购买 一些订阅和 10 包应用内购买WP Store 中为该应用定义了 134 个应用内购买 问题是 CurrentApp LoadListi
  • Flutter:pub 已完成,退出代码为 255

    我正在通过构建运行器 json 模型和 json 可序列化为我的 flutter 应用程序制作模型 但我收到了这个错误 Unhandled exception RangeError index Invalid value Valid val
  • 这段代码是否正确(数字加数字,然后打印结果)

    我想用汇编语言做一些简单的事情 两个数字相加 并将结果打印在屏幕上 我做了那个代码 Model SMALL Stack 100h Code start MOV ax 10 ADD ax 5 MOV ah 02h INT 21h MOV ah
  • 如何在 JSP 中导入我的导入内容?

    我所有的 JSP 顶部都有这个
  • 在 iPhone 上将整个 pdf 页面解析为 NSString

    我一直在尝试将 pdf 页面的文本解析为 NSString 一段时间 我唯一能找到的是搜索特定字符串值的方法 我想做的是解析单页 PDF 而不使用任何外部库 如 PDFKitten PDFKit 等 如果可能的话 我希望将数据存储在 NSA
  • 当 fit_intercept=False 时,为什么 Sklearn R 平方与 statsmodels 不同?

    我正在使用 Sklearn 和 statsmodels 执行线性回归 我知道 Sklearn 和 statsmodels 会产生相同的结果 如下所示 Sklearn 和 statsmodels 得到了相同的结果 但即使截距为零时系数相同 结
  • 更新 NSWindow 内容大小以适合 SwiftUI 视图

    我有一个 SwiftUI 视图 由于可变长度字符串 例如由于本地化 它不知道大小 我需要包含NSWindow调整大小以修复内容 我可以提供固定 最小宽度 使用 AppKit 委托创建新的 Mac 应用程序会产生一个相当简单的 AppDele
  • java 中的可选数据异常

    package com n import java io FileInputStream import java io FileOutputStream import java io IOException import java io O
  • 限制 DevExpress TextEdit 和 MemoEdit 控件的输入长度

    我有一个项目 其中包含一些第三方控件 我的表单中有一个 TextEdit 和一个 MemoEdit 我想限制用户可以输入的字符数 您可以等待最新版本 但有一些解决方法 例如屏蔽 辅助属性和 或文本更改事件的字符计数 以下是一些解决方法的链接
  • 使用纯文本文件存储任意元数据

    我正在编写一个文本编辑器 我需要在应用程序保存的每个文件中存储一些信息 通常只是几个字符串 存储不需要特别耐用 而不是文本文件的一部分 因为其他应用程序可能会读取它 并且该信息仅特定于我的应用程序 我该怎么办呢 更多信息 我设置了一个 NS
  • 严格的指针别名:针对特定问题的任何解决方案?

    我遇到了由于违反严格的指针别名规则而引起的问题 我有一个类型T来自模板和一些整数类型Int相同大小 如sizeof 我的代码基本上执行以下操作 T x some other t if reinterpret cast