LINUX.ORG.RU

Designated initializer не работает

 


0

4
struct s
{
    char x[4];
};

int main()
{
    char xx[4] = {0};
    s s{.x = xx};
}
/tmp/test.cpp:9:14: error: array must be initialized with a brace-enclosed initializer
    9 |     s s{.x = xx};

Как это сделaть?

UPD: чтобы не было вопросов, просто «{0}» подставить в инициализаторе не получится, т.к. значение передается аргументом в функцию (в моем примере этого нет ради упрощения).

★★★★★

Последнее исправление: seiken (всего исправлений: 3)

И при чём тут designated initializers? Что, невозможность такой инициализации это особенность designated initializers, в других случаях работает?

utf8nowhere ★★★
()
Ответ на: комментарий от unC0Rr

это было бы интересно, но структура из сишного кода, и тащить туда std::array не получится

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

Я бы написал биндинг к сишному коду в таком случае.

unC0Rr ★★★★★
()
Ответ на: комментарий от olelookoe

{0}

это константный инициализатор, или как там его

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

ЯННП

что там невозможно передать в функцию?

что за закат солнца вручную вы тут развели?

strcpy, strncpy запретили или что за хрень у вас там творится?

olelookoe ★★★
()
Последнее исправление: olelookoe (всего исправлений: 1)
Ответ на: комментарий от olelookoe

strcpy, strncpy запретили или что за хрень у вас там творится?

это и есть закат солнца вручную

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

Хорошо, memcpy с размером, известным в момент компиляции. Компилятор уберет вызов функции, и сделает все регистровыми операциями.

blex ★★★
()

Во первых, это не особенность desinit. Во вторых,

биндинг к сишному коду

{0}

s s{ .x = { xx[0], xx[1], xx[2], xx[3], } };

что за херню вы здесь несёте?

struct array { char value[4]; };
struct x { array value; };
int main() { array initer{}; x initee{.value = initer}; }
jsforever
()
Ответ на: комментарий от unC0Rr

это было бы интересно, но структура из сишного кода, и тащить туда std::array не получится

Ты перепутал «сишная» и «библиотечная»? Бывает.

jsforever
()
Ответ на: комментарий от unC0Rr

Откуда угодно. Полно старья, которое в таком виде и существует.

Чуть подробнее напишу. Здесь даже «библиотечная» не важно. Важно только то, можешь ли ты менять код. И менять ты его можешь всегда, кроме случаев когда либа проприетарная и нет исходников.

jsforever
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.