首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问工会中相同类型的非活动成员

访问工会中相同类型的非活动成员
EN

Stack Overflow用户
提问于 2016-01-08 12:39:31
回答 1查看 875关注 0票数 17

我有这样的事情:

代码语言:javascript
运行
复制
union DataXYZ
{
    struct complex_t
    {
        float real, imag;
    } complex;

    struct vector_t
    {
        float magnitude, phase;
    } vector;
};

我有一些向量,作为通用的工作区内存,在语义上下文之后,我相应地使用字段。

我知道,当最后一个活动成员是另一个字段(并键入?)时,在联合中读取字段是一种未定义的行为。当类型和布局完全匹配时,这有关系吗?

我一直在评论其他一些类似的问题,要求提供能保证这种行为的参考资料,但目前还没有出现任何问题--因此,我提出了这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-08 12:51:23

是的,,您可以阅读中的其他成员,特别是

这就是C++11/14标准所要指出的:

9.5 -工会 在一个联合中,最多一个非静态数据成员可以在任何时候都是活动的,也就是说,最多一个非静态数据成员的值可以在任何时候存储在一个联合中。

但本节后面的注释使您的特定实例成为合法,因为为了简化工会的使用,提供了一个特殊的保证。

注意:如果标准布局联合包含多个共享公共初始序列( 9.2 )的标准布局结构,并且如果此标准布局联合类型的对象包含标准布局结构之一,则允许检查任何标准布局结构成员的公共初始序列;请参见9.2。-end注记

您的struct确实共享了一个公共的初始序列:

9.2.16 -班级成员 两种标准布局结构(第9条)类型的公共初始序列是非静态数据成员和位字段按声明顺序排列的最长序列,从每个结构中的第一个这样的实体开始,这样相应的实体具有与布局兼容的类型,或者没有实体是位字段,或者两者都是相同宽度的位字段。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34677343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档