在下面的代码中,
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
(akaunsigned long
) 缩小到int
初始值设定项列表中
为什么编译器尝试使用类型为的初始化程序来初始化 的int
成员,而不是使用它来初始化成员?union
col24
col24
编译器建议 I是tostatic_cast
的结果,但这可能会导致不必要的缩小。MakeRGB24
int
如何Luminance
使用初始化列表中的结果正确初始化成员MakeRGB24
?
编辑: blitdata
应该保留 POD。