Я не был знаком с этим. Я искал его в Google, но не нашел свой ответ. Итак, выкладываю мой вопрос.
Только что попробовал следующую программу:
#include <iostream>
class test
{
static char a[];
static int b[];
};
int main()
{
test t;
}
Компилируется нормально без каких-либо предупреждений на MSVS 2010 & g ++ 4.8.1. Он также прекрасно компилируется в компиляторе C ++ 14. (Смотрите демо Вот.) Так, где стандарт C ++ говорит об этом? Если я уберу ключевое слово static из объявления массива char в тестовом классе, компилятор выдаст ошибку ISO C++ forbids zero size array
когда я использую -pedantic-errors
опция командной строки в g ++ & /Za
опция в компиляторе MSVS 2010 говорит error C2133: 'test::a' : unknown size
, Итак, мои вопросы:
1) зачем использовать статический массив неизвестного размера?
2) Как мне позже указать их размер & получить доступ к элементам массива? Я действительно запутался.
3) Почему удаление статического ключевого слова приводит к ошибкам компиляции?
Было бы лучше, если бы кто-то объяснил это на простом примере.
Благодарю.
Компилятор не заботится о размере. Это просто объявление для статического поля, поэтому достаточно указать, что у вас есть массив. Размер не имеет значения в данный момент.
На данный момент у вас есть объявление только для статического поля. Вы никогда не используете эти массивы, и компилятор разрешительный … он не будет жаловаться.
Если вы хотите использовать их, вам понадобится определение. Если вы пропустите размер, вы получите похожие сообщения об ошибках, которые вы видели раньше.
Ничего особенного не происходит.