在以下代码中,
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
(又名unsigned long
)缩小到int
为什么编译器尝试使用类型为int
的初始化程序初始化union
col24
成员,而不是使用它初始化col24
成员?< / p>
编译器建议我static_cast
MakeRGB24
到int
的结果,但这可能会导致不必要的缩小。
如何使用初始值设定项列表中Luminance
的结果正确初始化MakeRGB24
成员?
修改: blitdata
应保留POD。
答案 0 :(得分:0)
这显然是一个非标准的gcc扩展,但这可能是你所追求的:
blitdata BlitData =
{
Luminance: MakeRgb24(0,0,0),
};
如果这对你没有好处,我怀疑之后分配它是唯一的方法。