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 шт):
Если хочется инициализировать произвольным числом, то следует обращать внимание на то, что инициализируется. При вызове 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}};