Инициализировать указатель с constinit

Мне было интересно, могу ли я инициализировать указатель с помощью constinit в С++20, и я не нашел адекватного ответа в Интернете. У меня есть простой код:

      struct a {
    const char *s; // pointer I want to initialize
    int other_random_field; // This is another (useless in this case) field
};

constexpr struct a init(void)
{
    return {"foo", 4};
}
constinit struct a _ = init();

и прекрасно компилируется. Однако я не вижу способа заставить его работать с каким-либо другим типом, кроме char *. Что, если вместо «foo» я хочу вернуть массив целых чисел (чей размер известен во время компиляции) или что-то еще?

Итак, мой настоящий вопрос: есть ли способ позвонить с моего init()функция malloc()-подобная функция, которая дает мне возможность писать в буфер, выделенный сегментом данных?

Кстати: сборка gcc -std=gnu++20производит это:

          .text
    .globl  _
    .section    .rodata.str1.1,"aMS",@progbits,1
.LC0:
    .string "foo"
    .section    .data.rel.local,"aw"
    .align 16
    .type   _, @object
    .size   _, 16
_:
    .quad   .LC0
    .long   4
    .zero   4

что похоже на то, что я хочу. Но вместо того, чтобы поставить .string "foo"Я хотел бы поместить туда, например, массив целых чисел.

0 ответов

Другие вопросы по тегам