1

在下面的代码中,

typedef unsigned long col24;
inline col24 MakeRGB24(int R, int G, int B) { return ...; }

struct blitdata
{
  union
  {
    int Flags, Stretch;
    col24 Luminance;
  };
  // (other members)
};

int main()
{
  blitdata BlitData =
  {
    MakeRGB24(0, 0, 0),
    // ...
  };
}

为什么初始化程序列表中的第一个初始化程序BlitData会出现以下错误:

非常量表达式不能从类型col24(aka unsigned long) 缩小到int初始值设定项列表中

为什么编译器尝试使用类型为的初始化程序来初始化 的int成员,而不是使用它来初始化成员?unioncol24col24

编译器建议 I是tostatic_cast的结果,但这可能会导致不必要的缩小。MakeRGB24int

如何Luminance使用初始化列表中的结果正确初始化成员MakeRGB24

编辑: blitdata应该保留 POD。

4

1 回答 1

0

这显然是一个非标准的 gcc 扩展,但这可能是你所追求的:

blitdata BlitData =
{
    Luminance: MakeRgb24(0,0,0),
};

如果这对你没有好处,我怀疑事后分配它是唯一的方法。

于 2015-07-23T14:42:46.650 回答