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 RGBastruct HSVdefaulted のデフォルト コンストラクターをビルドすると、集計の初期化が機能しなくなります。

ただし、手元に 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