相关疑难解决方法(0)

在联合中访问相同类型的非活动成员

我有这样的事情:

union DataXYZ
{
    struct complex_t
    {
        float real, imag;
    } complex;

    struct vector_t
    {
        float magnitude, phase;
    } vector;
};
Run Code Online (Sandbox Code Playgroud)

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

我知道,当最后一个活动成员是另一个字段(并且键入?)时,读取联合中的字段是未定义的行为.类型和布局完全匹配时,这是否重要?

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

c++ undefined-behavior unions

15
推荐指数
1
解决办法
578
查看次数

是否使用了一个联合代替了一个定义好的角色?

今天早上我和一位同事讨论了关于检测字节序的"编码技巧"的正确性.

诀窍是:

bool is_big_endian()
{
  union
  {
    int i;
    char c[sizeof(int)];
  } foo;


  foo.i = 1;
  return (foo.c[0] == 1);
}
Run Code Online (Sandbox Code Playgroud)

对我来说,似乎这种用法union是不正确的,因为设置联合的一个成员并读取另一个成员的定义并不明确.但我必须承认,这只是一种感觉,我缺乏实际的证据来强化我的观点.

这个技巧是否正确?谁在这?

c++ standards endianness unions

13
推荐指数
2
解决办法
2368
查看次数

C++中同类型的联合

每当我看到联合的例子时,它们总是不同的类型.例如,来自MSDN:

// declaring_a_union.cpp
union DATATYPE    // Declare union type
{
    char   ch;
    int    i;
    long   l;
    float  f;
    double d;
} var1;          // Optional declaration of union variable

int main()
{
}
Run Code Online (Sandbox Code Playgroud)

如果我有一个联合(在这种情况下是匿名的,但这不重要)会发生什么,如下所示:

union
{
    float m_1stVar;
    float m_1stVarAlternateName;
};
Run Code Online (Sandbox Code Playgroud)

无论这是否是好的做法,这会导致任何问题吗?

c++ unions

6
推荐指数
1
解决办法
1307
查看次数

标签 统计

c++ ×3

unions ×3

endianness ×1

standards ×1

undefined-behavior ×1