Что означает данная конструкция
static class Class {};
если конструкция не имеет смысла тогда почему студия компилирует ее.
Смысл может появиться, если совместно с определением класса будет определена переменная, то есть код трансформируется в следующий:
static class Class {} var;
Это будет значит, что создаётся переменная только что определённого класса. То, что Visual Studio разрешает подобную конструкцию, т.е. выдаёт всего лишь предупреждение, а не ошибку компиляции, является особенностью компилятора.
Причём var
в зависимости от контекста может быть как определением глобальной переменной, доступной только в пределах текущего файла, если это написано на уровне глобального пространства имён. А может быть и объявлением статической переменной объемлющего класса, если написано внутри определения класса:
struct X {
static class Class {} var;
};
В таком случае, для использования var
её ещё нужно будет определить вне X
:
X::Class X::var;
Такая конструкция ничего не значит - она не компилируема в приниципе. С++ испокон веков разрешал спецификаторы класса хранения (static
в данном случае) только в объявлениях объектов или функций.
10.1.1 Storage class specifiers
4 The static specifier can be applied only to names of variables and functions and to anonymous unions [...]
http://eel.is/c++draft/dcl.stc#4
Данная конструкция не объявляет ни объекта, ни функции. Любой С++ компилятор обязан выдать диагностическое сообщение в ответ на такую конструкцию.
Понятия "компилирует" или "не компилирует" в мире С++ не существует. Корректность С++ кода определяется в первую очередь наличием или отсутствием диагностических сообщений компилятора.
В данном случае решение компилятора продолжить компиляцию после выдачи диагностического сообщения, возможно, вызвано наследием языка С, в котором такие бессмысленные спецификаторы класса хранения являются допустимыми (хоть и тоже бессмысленными).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужно синхронизировать два потока, пока один не запросит данные, другой их не отдает и ждет запроса на данные
Допустим, планируется какая-то система классов, например, устройствУ каждого устройства есть некоторые общие члены, например имя устройства,...
Есть метод, который парсит строку вида ширина:долгота@ширина:долгота@
У меня есть список элементов QListWidget в этом списке хранятся QListWidgetItem