C ++: статический массив внутри класса с неизвестным размером

Я не был знаком с этим. Я искал его в 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) Почему удаление статического ключевого слова приводит к ошибкам компиляции?

Было бы лучше, если бы кто-то объяснил это на простом примере.

Благодарю.

4

Решение

Компилятор не заботится о размере. Это просто объявление для статического поля, поэтому достаточно указать, что у вас есть массив. Размер не имеет значения в данный момент.

На данный момент у вас есть объявление только для статического поля. Вы никогда не используете эти массивы, и компилятор разрешительный … он не будет жаловаться.

Если вы хотите использовать их, вам понадобится определение. Если вы пропустите размер, вы получите похожие сообщения об ошибках, которые вы видели раньше.

Ничего особенного не происходит.

4

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


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector