标签: unions

如果我们只有一个成员,那么结构和联盟之间有什么区别吗?

我想知道一个成员数据类型的结构和联合之间的区别,如果有的话.

c c++ struct unions c++11

33
推荐指数
1
解决办法
2033
查看次数

C中的联盟的例子

我正在寻找一些工会的例子,不是为了理解工会是如何工作的,希望我能做到,而是要看看人们对工会做了哪种黑客攻击.

所以随时分享你的工会黑客(当然有一些解释:))

c unions

32
推荐指数
4
解决办法
5万
查看次数

常量联合对象有什么用?

如果我创建一个const联合对象(例如在下面的代码中),那么就不能完成成员赋值.那么在任何情况下都有使用const联合对象吗?

union un
{
    int i;
    float f;
    char c;
};
const union un a; 
/// ! a.i = 10; error.
Run Code Online (Sandbox Code Playgroud)

c c++ const unions

31
推荐指数
2
解决办法
3540
查看次数

C:联合实际使用在哪里?

我有一个例子,我保证了类型的对齐,union max_align.我正在寻找一个更简单的例子,其中实际上使用了union来解释我的朋友.

c c++ unions

30
推荐指数
3
解决办法
3万
查看次数

关于C - union中的union作为一种类型并且读作另一种类型的问题 - 是否已实现定义?

我正在阅读K&R中关于C的联合,据我所知,联合中的单个变量可以包含几种类型中的任何一种,如果某些东西存储为一种类型并且提取为另一种,则结果纯粹是实现定义的.

现在请检查以下代码段:

#include<stdio.h>

int main(void)
{
  union a
  {
     int i;
     char ch[2];
  };

  union a u;
  u.ch[0] = 3;
  u.ch[1] = 2;

  printf("%d %d %d\n", u.ch[0], u.ch[1], u.i);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

3 2 515
Run Code Online (Sandbox Code Playgroud)

在这里,我在分配值u.ch,但来自检索u.chu.i.它是实现定义的吗?或者我做的事情真的很傻?

我知道这对其他大多数人来说似乎都是初学者,但我无法弄清楚输出背后的原因.

谢谢.

c undefined undefined-behavior unions

29
推荐指数
5
解决办法
8598
查看次数

C++和C中的联合初始化

我已经在定义为的头文件中构建了一个使用常量的工作C库

typedef struct Y {
  union {
    struct bit_field bits;
    uint8_t raw[4];
  } X;
} CardInfo;

static const CardInfo Y_CONSTANT = { .raw = {0, 0, 0, 0 } };
Run Code Online (Sandbox Code Playgroud)

我知道.raw初始化程序只是C语法.

如何在其中使用联合定义常量,以便我可以在C和C++中使用它们.

c c++ initialization unions c++03

29
推荐指数
2
解决办法
3万
查看次数

如何检查联合中当前使用的类型?

假设我们有一个联盟:

typedef union someunion {
    int a;
    double b;
} myunion;
Run Code Online (Sandbox Code Playgroud)

在设置例如a = 123之后,是否可以检查哪种类型是联合的?我的方法是将这个联合添加到某个结构中,并在它为int时将uniontype设置为1,当它为double时将其设置为2.

typedef struct somestruct {
    int uniontype
    myunion numbers;
} mystruct;
Run Code Online (Sandbox Code Playgroud)

有没有更好的解决方案?

c unions

29
推荐指数
3
解决办法
8534
查看次数

什么是代数数据类型的惯用现代C++?

例如,假设您要在C++中实现电子表格Cell.单元格可以是字符串,数字,也可以是空的.忽略其他情况,例如它是一个公式.

在Haskell中,您可能会执行以下操作:

data Cell = CellStr String | CellDbl Double | None
Run Code Online (Sandbox Code Playgroud)

什么被认为是在C++中实现它的当前"最佳实践"?在带有类型指示符的结构中使用union,还是其他什么?

c++ polymorphism variant algebraic-data-types unions

28
推荐指数
2
解决办法
2956
查看次数

为什么在std :: optional的某些实现中会有一个伪联合成员?

libstdc ++(GNU)和libc ++(LLVM)都std::optional使用联合实现值存储,并且它们都包含一个虚拟成员。

GNU实现:

using _Stored_type = remove_const_t<_Tp>;
struct _Empty_byte { };
union {
    _Empty_byte _M_empty;
    _Stored_type _M_payload;
};
Run Code Online (Sandbox Code Playgroud)

LLVM实施:

union
{
    char __null_state_;
    value_type __val_;
};
Run Code Online (Sandbox Code Playgroud)

我的问题是:我们为什么需要这些_M_empty/ __null_state_会员?单成员工会有什么问题吗?

c++ optional unions c++17

28
推荐指数
1
解决办法
664
查看次数

在C中初始化一个联合

我遇到了关于C编程语言的这个客观问题.以下代码的输出应该是0 2,但我不明白为什么.

请解释初始化过程.这是代码:

#include <stdio.h>

int main()
{
  union a
  {
    int x;
    char y[2];
  };
  union a z = {512};
  printf("\n%d %d", z.y[0], z.y[1]);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c initialization unions

27
推荐指数
3
解决办法
1420
查看次数