uniform инициализация

Есть функция, которая принимает параметр LARGE_INTEGER

void test(LARGE_INTEGER arg);

Вопрос: могу ли я ее вызвать таким образом

void test(LARGE_INTEGER{0});

или я обязательно должен объявлять отдельную переменную

LARGE_INTEGER prm;
prm.QuadPart = 0;
void test(prm);

Структура LARGE_INTEGER объявлена в winnt.h следующим образом

typedef union _LARGE_INTEGER {
    struct {
        DWORD LowPart;
        LONG HighPart;
    } DUMMYSTRUCTNAME;
    struct {
        DWORD LowPart;
        LONG HighPart;
    } u;
    LONGLONG QuadPart;
} LARGE_INTEGER;

Update

Немного расширю вопрос. Сейчас почитал, что для инициализации нулем достаточно написать LARGE_INTEGER{}. А если не нулем? LARGE_INTEGER{7} корректно будет?


Ответы (1 шт):

Автор решения: user7860670

Если хочется инициализировать произвольным числом, то следует обращать внимание на то, что инициализируется. При вызове LARGE_INTEGER{7} число будет использовано для инициализации LowPart, и если значение большое - оно будет будет требовать подрезания. Так что придется инициализировать по частям LARGE_INTEGER{0xFF'FF'FF'FF, 0x00'00'00'0F};. Чтобы сразу инициализировать QuadPart необходимо использовать синтаксис designated initializers, доступный в С++20: LARGE_INTEGER f{.QuadPart{0x00'00'00'0F'FF'FF'FF'FF}};

→ Ссылка