инициализация члена массива с агрегатной инициализацией

С этим кодом:

struct Structure {
int a;
char b[4];
};

void function() {
int a = 3;
char b[] = {'a', 'b', 'c', 'd'};
}

Могу ли я инициализировать Structure со значениями a а также b используя агрегатную инициализацию?
Я старался Structure{a, b}Однако это дает мне ошибку cannot initialize an array element of type 'char' with an lvalue of type 'char [4]'

1

Решение

struct S {
int a;
char b[4];
};

int main() {
S s = { 1, {2,3,4,5} };
}

Изменить: Просто перечитайте свой вопрос — нет, вы не можете этого сделать. Вы не можете инициализировать массив другим массивом.

0

Другие решения

Если вы знакомы с Параметр пакет-расширение Я думаю, что вы можете, как это:

struct Structure {
int a;
char b[4];
};

template< typename... I, typename... C>
void function(I... a, C... b) {
Structure s = { a..., b... }; // <- here -> a = 1 and b = 'a','b','c','d'
std::cout << s.a << '\n';
for( char chr : s.b ) std::cout << chr << ' ';
}

int main(){
function( 1, 'a','b','c','d' );
}

Выход:

1
a b c d
0

По вопросам рекламы [email protected]