Инициализировать указатель с 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"
Я хотел бы поместить туда, например, массив целых чисел.