Размерный массив во время выполнения в структуре c ++

В C (с gcc) у меня были некоторые структуры данных, представляющие собой массив с некоторой дополнительной информацией:

struct song {
uint tempo;
uint key;
note play[0]; // or play[] depending on compiler flavour
};

Iirc, это называется «гибкий массив» (http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html#Zero-Length)
Затем я мог бы выделить песню из N нот с malloc(sizeof(song)+N*sizeof(note)) во время выполнения.
В какой степени это поддерживается в g ++, если я не собираюсь использовать векторы на этот раз, или вводить бесполезные note* указатель в song ?

0

Решение

Даже в C это не определено и не переносимо. GCC сознательно позволяет вам сойти с рук, но другие реализации не могут. Это потому, что вы обращаетесь к массиву за его пределами.

Этот «трюк» в C ++ точно такой же, как и в C. То есть, не стесняйтесь использовать его в GCC, где документация GCC говорит, что он поддерживается, но он никогда не будет «четко определенным, действительным C ++».

4

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

нет другого способа, кроме как использовать фиксированную длину или заметку *
потому что компилятор должен знать, как долго ваши песенные структуры, и каждая структура имеет одинаковую длину.

поэтому вы должны использовать примечание * или вектор

-1

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