1

我对 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;
};

我可以struct RGB使用类似 C 的聚合初始化来初始化 a,如下所示:

RGB a = {.red=55, .green=125};

但是,当我取消注释附加构造函数以struct RGB使用 astruct HSVdefaulted 默认构造函数构建 a 时,聚合初始化不再起作用

它仍然会告诉我我手上有一个 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至少。

4

0 回答 0