typedef一个数组与在C++中使用结构

5 c++ typedef data-structures

找到了一个有趣的使用typedef,我真的没有看到它的需要.

typedef int Color[3];
Run Code Online (Sandbox Code Playgroud)

那么使用将是:

Color pants;
pants[0] = 0;
etc.
Run Code Online (Sandbox Code Playgroud)

通过ptrs使用typedef创建了一些看起来很奇怪的代码.

为什么不使用结构?

struct Color {
int r;
int g;
int b;
};

Color pants;
pants.r = 0;
etc.
Run Code Online (Sandbox Code Playgroud)

您可以使用联合将变量表示为数组或单独表示,这是不可思议的,但仍然清楚它比单个值更复杂.

有人可以提供有关使用typedef'd数组与结构的优点的见解吗?

Gre*_*ndt 8

可能是结构没有按原编码器想要的方式对齐.也许它被填充到16或32位.创建数组可确保不会发生结构填充.这是传递给驱动程序还是某些硬件设备?


ava*_*kar 7

由于几个原因,使用普通数组是一个坏主意.

  • 在参数列表中使用时类型int[]衰减int *.
  • 您不能用于operator=分配数组.

任何一个structboost::array将更好地服务于目的.

  • +1除了通过引用传递时不会衰减,增加混乱. (3认同)

Las*_*loG 5

结构形式的另一个优点:如果您需要将Color传递给函数然后获取其大小:

void foo (Color c)
{
    size_t s = sizeof(c);
}
Run Code Online (Sandbox Code Playgroud)

如果使用数组形式,c将被解释为a Color *(数组通过指向它们的第一个元素的指针传递)并且sizeof(c)将等于sizeof(int*).去过那里,做到了,被咬了.

编辑:结构形式将表现为(天真)预期.


dmc*_*kee 3

您希望数组表达式能够循环。

因此,如果您必须拥有[rgb]表单,则可以使用联合,但这会导致更多的输入。

::叹::