Ограничения во время выполнения массива в стеке в соответствии с проектом C ++ - PullRequest
1 голос
/ 06 марта 2020

Согласно моему пониманию, основанному на предыдущих чтениях, размер массива должен быть постоянным и известным во время компиляции, за исключением дополнительной поддержки, предоставляемой g ++, где поддерживается VLA.

Однако я проходил через один из c ++ черновик и теперь я в замешательстве, поддерживает ли c ++ границы массива во время выполнения. Ниже приведен пример кода для определения массива.

C ++ черновая ссылка: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3690.pdf

Раздел 8.3.4

Например:

void f(unsigned int n) {
int a[n]; // type of a is “array of runtime bound of int”
}

1 Ответ

3 голосов
/ 06 марта 2020

Нет, C ++ не имеет и до сих пор не поддерживает массивы с размером времени выполнения. N3690 представлял собой черновик между C ++ 11 и C ++ 14 и включал в себя текст из propsal N3639 массивов времени выполнения с автоматическими c продолжительностью хранения (ревизия 5)

Это предложение было в конечном итоге отклонено, и в черновике C ++ 14 N4140 текст был удален.

При просмотре черновиков, те, которые вы можете использовать как "Стандарт", являются

  • N3337 (C ++ 11 + редакционные исправления)
  • N4140 (C ++ 14 + редакционные исправления)
  • N4659 (март 2017 года, рабочий проект после Kona / C ++ 17 DIS)
...