我对C ++中的POD类型感到困惑
我有这些struct HSV
和struct RGB
这是积累值以构建颜色:
struct HSV
{
int hue;
int saturation;
int value;
};
struct RGB
{
// RGB(void) = default;
// RGB(HSV const& hsv) { };
int red;
int green;
int blue;
};
我可以使用类似C的聚合初始化初始化struct RGB
,如下所示:
RGB a = {.red=55, .green=125};
但是,当我取消注释其他构造函数以使用struct RGB
和struct HSV
ed默认构造函数构建default
时,聚合初始化不再起作用
它仍会告诉我手上还有一个POD:
std::cout << std::boolalpha;
std::cout << std::is_standard_layout<RGB>::value << '\n'; // true
std::cout << std::is_trivial<RGB>::value << '\n'; // true
std::cout << std::is_pod<RGB>::value << '\n'; // true
我可以在拥有像我一样的转换构造函数时使用C风格的聚合初始化,还是不可能?
编辑:我刚收到通知,这是clang
扩展名(并且VS编译器似乎也可以)。但我仍然想知道是否有可能,至少clang
。