具有构造函数但没有聚合初始化的POD类型

时间:2016-03-30 13:10:35

标签: c++ struct default-constructor aggregate-initialization

我对C ++中的POD类型感到困惑 我有这些struct HSVstruct 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 RGBstruct 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

0 个答案:

没有答案