Вы можете использовать инициализатор структуры в C ++, но только в стиле до C99 (т.е. вы не можете использовать назначенные инициализаторы). Назначенные инициализаторы , которые позволяют указывать инициализируемые элементы по имени, а не полагаться на порядок объявления, были введены в C99, но в настоящее время не являются частью какого-либо стандарта C ++ (опровергая общееПредположение, что C ++ является надмножеством C).
Если вы хотите написать непереносимый код C ++, который специально предназначен для g ++, вы всегда можете использовать специфичное для GCC расширение , которое имеетта же функциональность, что и для обозначенных конструкторов.Синтаксис выглядит следующим образом:
struct value_t my_val = { member_a: 1, member_b: 1.2f };
Эта ссылка предоставляет довольно хороший обзор обоих типов инициализации в контексте C.
Вот выдержка, которая показывает как более ранние (без указателей), так и стили C99:
При инициализации структуры первый инициализатор в списке инициализирует первый объявленный элемент(если не указан указатель) (начиная с C99) и все последующие инициализаторы без указателей (начиная с C99) инициализируют элементы структуры, объявленные после элемента, инициализированного предыдущим выражением.
struct point {double x,y,z;} p = {1.2, 1.3}; // p.x=1.2, p.y=1.3, p.z=0.0
div_t answer = {.quot = 2, .rem = -1 }; // order of elements in div_t may vary
В некоторых случаях вам может потребоваться написать некоторый код для инициализации структуры, и в этом случае вы можете использовать результат функции, например:
struct Resources AndroidTimerModel::ResData = function_that_acts_like_a_constructor();