数组元素算作公共初始序列吗?

2023-11-27

有点相关我之前的问题:

数组的元素算作公共初始序列吗?

struct arr4 { int arr[4]; };
struct arr2 { int arr[2]; };

union U
{
    arr4 _arr4;
    arr2 _arr2;
};

U u;
u._arr4.arr[0] = 0; //write to active
u._arr2.arr[0]; //read from inactive

根据此 cpp 参考页面:

在具有非联合类类型 T1 的活动成员的标准布局联合中,允许读取非联合类类型 T2 的另一个联合成员的非静态数据成员 m,前提是 m 是公共初始序列的一部分T1和T2的......

这是合法的还是非法的双关语?


C++11 说 (9.2):

如果标准布局联合包含两个或多个共享公共初始序列的标准布局结构, 如果标准布局联合对象当前包含这些标准布局结构之一,则允许 检查其中任何一个的共同初始部分。两个标准布局结构共享一个共同的首字母 如果相应的成员具有布局兼容的类型,则序列并且两个成员都不是位字段或 对于一个或多个初始成员的序列来说,两者都是具有相同宽度的位字段。

至于不同大小的数组是否构成有效的公共初始序列,3.9说:

如果两个类型 T1 和 T2 是同一类型,则 T1 和 T2 是布局兼容类型

这些数组不是同一类型,因此这不适用。数组没有特殊的进一步例外,因此数组可能不兼容布局,并且不形成公共初始序列。

但实际上,我知道有一个编译器(GCC):

  • 忽略“共同初始序列”规则,并且
  • 无论如何都允许类型双关,但仅当访问“通过联合类型”时(如您的示例中所示),在这种情况下,间接遵守“公共初始序列”规则(因为“公共初始序列”意味着公共初始布局编译器支持的体系结构)。

我怀疑许多其他编译器也采取类似的方法。在您的示例中,您通过联合对象键入双关语,此类编译器将为您提供预期的结果 - 从非活动成员读取应该为您提供通过非活动成员写入的值。

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

数组元素算作公共初始序列吗? 的相关文章

  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 使用日期 Swift 3 对字典数组进行排序

    我有一个名为 myArray 的数组 其中添加了字典 我希望该字典按时间排序 这是字典中的键 那个时间是在 String 中 时间的日期格式为 yyyy MM dd HH mm ss 我尝试使用下面的代码解决方案 但给出了 从 字符串转换
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 如何计算 3D 坐标的线性索引,反之亦然?

    如果我有一个点 x y z 如何找到该点的线性索引 i 我的编号方案是 0 0 0 是 0 1 0 0 是 1 0 1 0 是最大 x 维度 另外 如果我有一个线性坐标 i 我如何找到 x y z 我似乎无法在谷歌上找到这个 所有结果都充满
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • 动画按钮允许用户交互不起作用

    我在 NSObject 类的代码中创建了一个 UIbutton 它控制 UIViewController 类中的游戏 该按钮在游戏的大部分时间都工作正常 但在某个时刻我希望按钮淡入 淡出 一旦淡入 淡出开始动画 按钮就不再具有交互性 我已经
  • 从 json 创建 DynamoDB 表

    我想知道是否可以从表定义 json 本身创建 dynamodb 表 我研究了 aws cli 工具 但找不到任何方法来执行此操作 只是想知道是否可能 aws dynamodb create table file tabledenifisio
  • 如何将 mySql SQL 脚本转换为 MS SQL 脚本?

    我必须将客户 MySql 数据库架构 数据迁移到 MS SQL SERVER 2008 最后我收到了 70 Mb SQL 文件 其中包含与 MSSQL 不兼容的 mySQL 方言 DROP TABLE IF EXISTS kladr CRE
  • Facebook 登录与 CSRF 状态令牌不匹配的问题

    我做了一些搜索 但没有找到与我的问题相关的任何内容 我目前正在尝试对我的网站实施 Facebook 登录 但由于 htaccess mod 重写 URL 我在登录身份验证方面遇到了问题 该代码工作完美 如果我在没有 mod 重写规则的情况下
  • c从 R 中的字符串绑定动态列名

    我想将一列绑定到数据框 并使用从字符串动态分配的列名称 y attribute Survived cbind test data y attribute NA 这会导致新列添加为y attribute而不是所需的Survived属性以字符串
  • Mockito 空指针异常

    我遵循了 hoaz 的建议 但是 我遇到了空指针异常 RunWith MockitoJUnitRunner class public class GeneralConfigServiceImplTest InjectMocks privat
  • Perl 可以“静态”解析吗?

    An 文章名为 Perl 无法解析 形式化证明 正在巡视 那么 Perl 是否在 运行时 或 编 译时 决定其解析代码的含义 在我读过的一些讨论中 我的印象是这些论点源于不精确的术语 所以请尝试在答案中定义您的技术术语 我故意没有定义 运行
  • 如何将列表中的随机值分配给 pandas 数据框中的列?

    我正在 Bigquery 中使用 Python 并且有一个大型数据帧 df 大约 700 万行 我还有一个列表 lst 包含一些日期 例如给定月份的所有日期 我正在尝试在 df 中创建一个附加列 random day 并使用每行中 lst
  • HTTPS 到 HTTPS 重定向 Nginx

    如何将一个 HTTPS 重定向到另一个 HTTPS 我只有一个域的一个 SSL 证书 例如 如何重定向https example org to https example com 我已经尝试搜索谷歌和其他论坛 但没有发现任何效果 这非常容易
  • openapi 3.0 有效的最小值和最大值

    我有下面的模式定义来表示commission amount在我的 openapi 合同中 commissionAmount type number minimum 99999 99 maximum 99999 99 生成的代码 Valid
  • 我可以从实例访问类变量吗?

    我有这门课 class ReallyLongClassName static var 5 def instance method self ReallyLongClassName static var 1 有没有办法使用 self 变量访问
  • 使用 javascript 保持事件

    我真的很想知道当您点击 在移动设备上 或单击 在桌面设备上 表单提交 锚点 等时是否有任何方法可以执行功能 并保持一段时间而不使用 jQuery function clicked set some kind of timer or so f
  • 对分组中的“汇总”进行排序

    我发现与 group by 一起使用的 with rollup 选项非常有用 但它不适用于 order by 子句 有什么办法可以按照我想要的方式订购并计算小计吗 CREATE TABLE mygroup id int 11 default
  • 如何在 MATLAB 中一步加载 100 个具有相似名称和/或字符串的文件?

    我的目录中有 100 个 ASCII 文件 全部命名如下 int 001 ASCint 002 ASCint 003 ASC int 099 ASCint 100 ASC 我必须使用 importdata 将它们全部导入到 MATLAB 中
  • 防范 CSRF 和 XSS(散列 + 加密)

    安全 如今 如果没有通过开发人员使用的框架或开发人员自己编程适当的安全性 任何应用程序都无法在互联网上生存 我目前正在开发一个 RESTful API 以使用 Bearer 令牌身份验证进行工作 但一直在阅读有关 XSS 和 CSRF 攻击
  • 在 Windows 上安装 Python Pillow

    我对 Python 相当陌生 并尝试在 Windows 7 上安装 Pillow 包 我从以下位置下载并运行了 MS Windows 安装程序 Pillow 2 2 1 win amd64 py3 3 exehere 它看起来安装得很好 如
  • 如何向 DataReader 添加列

    我的目标是从数据源检索数据 向其中添加一些元数据并将其插入到另一个目标 目标的架构比源多四列 计算列 我在用SQL批量复制 这需要一个具有所有列 包括计算出的 4 列 的阅读器 有没有办法手动将列添加到 DataReader 中 或者如果不
  • 将 MVC 迷你分析器计时纳入异步任务

    我在页面内有一个长时间运行的 SQL 查询 我通过使用异步任务加速了该查询 using System Threading Tasks var asyncTask new Task
  • zsh 中的 IFS 行为与 bash 不同

    foo local lines ls l local IFS n for line in lines do echo line done 在 zsh 中 循环只执行一次 因为 for 的输出ls l命令不会被新行分割 整个文本块都会传递到
  • 数组元素算作公共初始序列吗?

    有点相关我之前的问题 数组的元素算作公共初始序列吗 struct arr4 int arr 4 struct arr2 int arr 2 union U arr4 arr4 arr2 arr2 U u u arr4 arr 0 0 wri