Использовать переменную в качестве измерения массива в C ++?

Мне просто интересно, почему это работает в Clang 4.0:

unsigned cnt = 42;
int k[cnt];

Но это не будет

unsigned cnt = 42;
string bad[cnt];

Я только что проверил праймер C ++ 5-е издание. Это говорит о том, что:

измерение должно быть известно во время компиляции, что означает, что
размерность должна быть постоянным выражением

Если это правда, почему int k[cnt]; Работа?

3

Решение

Ни один фрагмент не работает в C ++.

Однако в C можно использовать неконстантные выражения в качестве размеров массива. Некоторые компиляторы (например, GCC без -pedantic опция) поддерживает эту функцию C в коде C ++.

Что касается различия между типами элементов, это зависит от компилятора. GCC компилирует оба. Clang ++ запрещает не POD-типы (такие как std::string) в этом случае.

14

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

Какой компилятор вы используете, я использую gcc, и как const, так и nonconst работает нормально.

Это не вопрос c, массивы не предназначены для определения с помощью переменных, только макросы и выражения const.

Это вопрос интерпретации компилятора, я сомневаюсь, что это связано со стандартами.

0

Является ли Clang 4.0 на самом деле Apple XCode Clang? я думаю, что это на самом деле версия 3.1. Clang предлагает хорошее объяснение:

warning: variable length arrays are a C99 feature
[-Wvla-extension]
int k[cnt];
0
По вопросам рекламы [email protected]