- Нулевая декларация по УСН в 2020 году
- Нулевая декларация 3-НДФЛ для ИП за 2019 год: образец для 2020 года
- Что собой представляет нулевая декларация для ИП?
- Сдача нулевой отчетности ИП на УСН для налоговой
- Как заполнить нулевую декларацию для ИП на УСН 6% без сотрудников? Пошаговая инструкция для безнадежных чайников!
- Объявление перечисления — cppreference.com
- объявлений - cppreference.com
- объявлений - cppreference.com
- Подробный описатель типа - cppreference.com
Нулевая декларация по УСН в 2020 году
Скачать бланк декларации УСН
Скачать образец “нулевки” по УСН: “доходы” или “доходы – расходы”
Смотреть инструкцию по заполнению бланка
Какие страницы заполнять?
Нулевая декларация представляется в ИФНС в следующем составе:
УСН «Доходы» | УСН «Доходы минус расходы» |
Титульный лист: заполняются все данные, кроме блока, предназначенного для сотрудника ИФНС | |
Раздел 1.1 Указывается код ОКТМО | Раздел 2.1 Указывается код ОКТМО |
Раздел 2.1.1 Указывается признак налогоплательщика в строке 102 Заполняются ставки налога по строкам 120-123 | Раздел 2.2 Заполняются ставки налога по строкам 260-263 |
Если уплачиваете торговый сбор: Раздел 2.1.2 в количестве 2 листов | |
ИТОГО: 3 листа – для неплательщиков торгового сбора; 5 листов – для плательщиков торгового сбора. | ИТОГО: 3 листа |
При этом во всех полях нулевого отчета, которые остались незаполненными, нужно поставить прочерки.
Суммы уплаченных страховых взносов и торгового сбора в нулевую декларацию заносить не нужно. Эти платежи уменьшают исчисленный единый налог на УСН, а в данном случае налог отсутствует, поэтому уменьшать попросту нечего.
Образец заполнения нулевки по УСН “доходы”
Титульный лист
Сформировать нулевую декларацию УСН без ошибок можно через этот сервис, в котором есть бесплатный пробный период.
Раздел 1.1
Раздел 2.1.1
Образец заполнения нулевки по УСН “доходы минус расходы”
Титульный лист
Раздел 1.2
Раздел 2.2
Читайте более подробно: Нулевая декларация по УСН для ИП
Нулевая декларация 3-НДФЛ для ИП за 2019 год: образец для 2020 года
Форма 3-НДФЛ позволяет декларировать полученные доходы за отчетный год и вычислить налог к уплате или возврату. Заполняют отчет физические лица, в том числе зарегистрировавшие индивидуальное предпринимательство, работающие в качестве адвоката или нотариуса.
Частая ситуация — человек регистрирует ИП, но деятельность не ведет. Такие лица, несмотря на отсутствие операций, доходов и расходов по предпринимательской деятельности, все равно должны отчитаться перед налоговой с помощью нулевой декларации 3-НДФЛ — тем самым такие ИП покажут отсутствие обязанности по уплате налога за отчетный год.
Когда оформляется нулевая 3-НДФЛ?
Нулевую декларацию заполняют только те физические лица, которые зарегистрированы как индивидуальные предприниматели и которые выбрали общий режим налогообложения, при этом они не работают как ИП в течение года, не имеют совершенных операций, не получали доходов, не имели расходов.
Такая ситуация достаточно распространена, граждане как ИП встают на учет в налоговой, рассчитывая вести какую-то деятельность. При этом они либо осознанно выбирают общую налоговую систему (ОСНО), либо получают эту систему, так как не выбирают иной специальный режим налогообложения (упрощенный, вмененный, патентный).
Как правило, сначала деятельность действительно ведется, но в какой-то момент человек ее прекращает, забывая при этом закрыть свое предпринимательство.
Если ИП не закрыто официально через ИФНС, то физическое лицо по-прежнему является предпринимателем с определенными обязанностями перед налоговой — в том числе и по подаче отчетности в виде декларации 3-НДФЛ.
3-НДФЛ — это отчет, который сдается физическими лицами, желающими добровольно уплатить подоходный налог со своих доходов, либо планирующими получить налоговый вычет. Кроме того данная декларация сдается ИП, которые работают на ОСНО.
Образец заполнения 3-НДФЛ для ИП на общем налоговом режиме, которые ведут деятельность, можно скачать в данной статье.
Если ИП не ведет деятельность, то заполняет 3-НДФЛ в нулевом виде и сдает в ФНС в порядке, который предусмотрен для общего случая.
ИП на спецрежимах (УСН, ЕНВД), которые не ведут деятельность, заполняют нулевую декларацию, разработанную для данных налоговых режимов.
ИП на патентной системе отчетность по налогу не сдают.
Новая форма декларации 2020
Для нулевой декларации законодательство не предусматривает отдельной формы. Заполнять нужно тот же бланк, что формируется при подаче отчета при наличии предпринимательской деятельности ИП.
С 2020 года форма изменена, актуальный бланк можно скачать ниже по ссылке. Об изменениях в новой форме 3-НДФЛ читайте в этой статье.
Утвержден новый бланк декларации Приказом ФНС России №ММВ-7-11/569@ в редакции приказа №ММВ-7-11/506@ от 07.10.2019.
Порядок подачи в ФНС для индивидуальных предпринимателей
Вариантов заполнения нулевой декларации о доходах и способах ее подачи в налоговый орган несколько.
Заполнить 3-НДФЛ ИП может одним из следующих способов:
- взять бланк в отделении ФНС и заполнить ручкой;
- распечатать актуальный бланк, найденный на просторах интернета (обязательно проверить, что форма соответствует текущему году) и заполнить ручкой;
- заполнить форму на компьютере, после чего распечатать;
- сформировать декларацию в электронном виде с помощью бесплатной программы от ФНС, после чего распечатать;
- составить 3-НДФЛ в кабинете налогоплательщика на сайте налоговой и передать в электронном виде.
Способы подачи отчета в ФНС следующие:
- Передача бумажного варианта из рук в руки лично при посещении отделения ФНС.
- Передача бумажной 3-НДФЛ через представителя (на него нужно оформить доверенность).
- Отправка бумажной декларации заказным письмом с описью вложения и уведомлением о вручении через Почту России.
- Электронная подача через ТКС.
ИП вправе выбрать любой удобный вариант для себя.
Сдать нулевую 3-НДФЛ в налоговое отделение за 2019 год нужно в срок до 30 апреля 2020 года включительно.
Как заполнить ИП на ОСНО за 2019 год ?
Отчет 3-НДФЛ достаточно большой. ИП при подаче нулевой декларации заполняют только 3 листа из имеющихся — титул и два раздела.
Остальные листы не заполняются, не распечатываются и в ФНС не подаются.
В зависимости от выбранного варианта оформления нулевой формы 3-НДФЛ правила заполнения будут отличаться.
Если выбран ручной вариант заполнения, то нужно придерживаться следующих правил:
- ручка только синего или черного цвета;
- буквы только печатные и заглавные;
- все символы, буквы, числа, знаки должны четко помещаться в отведенные клетки, не должны выходить за края;
- если допущена ошибка, то берется новый чистый бланк, зачеркивать ничего нельзя, пользоваться корректором в любом виде тоже;
- при распечатке не нужно скреплять листы;
- печать производится только с одной стороны листа;
- все пустые клетки должны быть заполнены прочерками — по центру клетки ставится черта.
Если выбрать электронный вариант заполнения, то указанные выше правила не актуальны. При заполнении в программе важно убедиться, что она новая и актуальная.
Заполнение 3-НДФЛ в программе Декларация 2019.
Титульный лист
Титульный лист для нулевой 3-НДФЛ нужно заполнить полностью:
- в верхней части ИНН ИП;
- № корректировки — 0;
- налоговый период — 34;
- год — 2019;
- налоговая — код отделения по месту постановки на учет ИП;
- данные об индивидуальном предпринимателе — код страны — 643, категория налогоплательщика — 720, далее ФИО полностью, данные о рождении;
- сведения о документе — обычно это паспорт РФ, для него код 21;
- код статуса налогоплательщика — российские резиденты ставят «1»;
- телефон — обязательно указывается с кодом города;
- в левом нижнем углу приводятся данные о том, кто подает нулевую 3-НДФЛ — сам ИП или его представитель.
На каждом листе декларации внизу должна стоять подпись и дата заполнения 3-НДФЛ.
Раздел 1
Первый раздел декларации 3-НДФЛ заполняется после раздела 2. Здесь показываются суммы налога к уплате, возврату, либо же отсутствие уплаты или возврата.
При заполнении нулевой формы в поле 010 ставится «3», что обозначает отсутствие каких-либо обязательств у сторон по отношению друг к другу.
В поле 020 вписывается актуальный КБК, а в поле 030 — ОКТМО по классификатору.
Поля 030 и 040 прочеркиваются либо указывается 0.
Вверху листа должны быть указаны ИНН, фамилия, инициалы индивидуального предпринимателя.
Раздел 2
Этот лист в нулевой 3-НДФЛ ИП заполняют в первую очередь.
Несмотря на то, что деятельность не велась, доходы и расходы отсутствуют, заполнить данный раздел все-таки нужно. Здесь нужно показать, что налоговая база равна нулю, соответственно, и налог нулевой.
Вверху вписывается ИНН ИП, фамилия и инициалы. Номер страницы 003.
В поле 001 указывается ставка налога — 13%.
В поле 002 — вид дохода «3» (иное).
Все остальные поля заполняются прочерками.
Скачать бланк и образец заполнения
Полезное видео
О заполнении 3-НДФЛ для ИП смотрите в видео:
Выводы
Если ИП не ведет деятельность, при этом для него установлена общая система налогообложения (ОСНО), то он обязан подать в ФНС нулевую декларацию 3-НДФЛ.
Если физическое лицо не планирует далее работать как предприниматель, то лучше сразу закрыть предпринимательство, тем самым прекратив обязанность по сдаче отчетности.
Если ИП не закрыто, то ИП должен подать декларацию в срок до 30 апреля следующего года.
Если доходов/расходов не было, то заполняется нулевой отчет.
Что собой представляет нулевая декларация для ИП?
Каждый индивидуальный предприниматель обязан подавать отчет по налогам за прошедший год. Нулевая декларация для ИП подается в том случае, когда он использует упрощенную систему налогообложения (УСН) и на протяжении отчетного периода у него не было дохода.
Что такое нулевая декларация
В законодательстве не существует такого понятия, как нулевая декларация, это разговорный вариант, который использует большинство людей. Если говорить о том, что же это такое, то она представляет собой обыкновенный бланк, который необходимо заполнять в конце каждого отчетного периода.
Отличием данного документа является то, что он подтверждает тот факт, что по счетам ИП не было движения средств на протяжении всего отчетного периода.
Это дает право не платить налоги, так как не образуется налоговая база.
Не стоит понимать буквально данное понятие и во всех строках документа, предназначенного для сдачи в налоговую службу, ставить нули. Пример: может быть так, что вы платите налог исходя из схемы «доход минус расход», в таком случае в бланке отражают тот убыток, что был получен за отчетный период. Это может быть и убыток, который вы получили раньше, но который был перенесен в текущий отчетный период.
Если налогами облагается прибыль, но ее нет, значит, и налог платить не придется. Если же вы работаете по схеме «доходы минус расходы», то даже если у ИП были убытки, ему надо будет заплатить налог на прибыль, который составляет 1% от полученной суммы.
Нельзя забывать о том, что отсутствие дохода не дает права ИП уклониться от подачи декларации и от ответственности за это.
В случае если вы не предоставите документы или нарушите сроки подачи нулевой декларации для ИП, вас могут оштрафовать.
Вернуться к оглавлению
Отличия и преимущества УСН
Большинство ИП пользуется УСН, это дает им право платить либо налог с полученной прибыли, что составляет 6%, либо 15% от разницы между полученной прибылью и расходами. Если человек работает по УСН, то отчет он подает раз в год, при этом в бланке указывает, какая у него за отчетный период была прибыль и какие за это время у него были расходы.
Сдача нулевой декларации ИП проводится, когда человек не ведет свою деятельность или в отчетном периоде у него не было прибыли. Это может произойти, например, в таких случаях: ИП только зарегистрировался и еще не начал свою деятельность, она является сезонной или деятельность оказалась экономически неэффективной.
Согласно с существующим законодательством, сдавать указанную отчетность по УСН каждый ИП должен до 30 апреля. Бывают случаи, когда на протяжении отчетного периода предпринимательская деятельность не велась или она оказалась экономически неэффективной, все равно ИП обязан подать нулевую декларацию, независимо от того, была получена прибыль или нет, это не освобождает от сдачи отчета в налоговую службу.
Вернуться к оглавлению
Как необходимо заполнять такой документ
Указанный бланк заполнять просто, в этом случае не надо делать никаких расчетов и заполнить документ можно как от руки, так и на компьютере. Для того чтобы взять образец заполнения нулевой декларации для ИП, можно обратиться в любую налоговую. Главное, при заполнении нельзя допускать, чтобы в бланке были помарки или ошибки.
Рассмотрим пример нулевой декларации для ИП:
Особенности заполнения первой страницы. Обязательно необходимо заполнить графы ИНН и КПП. Информация для этого берется из документов о регистрации ИП. При заполнении графы «номер корректировки» необходимо поставить 0. Обязательно указывают год, за который подается отчетность, для этого есть специальная графа; а также налоговый период – обычно ставят цифру 34, что означает календарный год. Если ИП переходит на другую систему налогообложения, была проведена ликвидация предприятия или его реорганизация, то ставят цифру 50.
Для того чтобы правильно поставить код органа, в который подаются документы, данные берут из Росстата. Для ИП указывается Ф. И. О., при этом записываются они в три разные строчки. Ставится подпись и дата, в установленном месте на первой странице ставится печать.
Заполнение второй страницы. В том случае если налогом облагается прибыль, то в графе 001 ставят цифру 1; если же «доходы минус расходы», то в этой графе ставят цифру 2.
Заполняется графа 010, в этом случае код будет зависеть от региона. При заполнении строки 020 в случае доходов ставят код 182 1 05 01011 01 1000 110, а если налогообложение осуществляется по схеме «прибыль минус расходы», ставится код 182 1 05 01021 01 1000 110. В графу 080 вносят сведения из графы 020, все остальные графы не заполняют и в них ставят почерки.
Особенности заполнения третьей страницы. Здесь заполняется всего одна строка, номер которой 201, в ней указывают ставку налога. В зависимости от используемой системы налогообложения это цифра может составлять 6 или 15%, в некоторых регионах эта ставка может быть изменена. При заполнении данной графы ставят только цифры, знак % писать не надо. Остальные строки не заполняют и в них просто ставят прочерк.
В обязательном порядке на каждом листе дублируются строки ИНН и КПП, которые есть на первом листе. Кроме этого, дата должна соответствовать той, что указана на первом листе; а для подтверждения того, что вы подали достоверную информацию, ставится подпись ИП.
Вернуться к оглавлению
Подведение итогов
Теперь вы знаете, как заполнить нулевую декларацию для ИП. После того как вы это сделаете, ее необходимо направить в налоговый орган по месту регистрации ИП. Сделать это можно несколькими способами: отправить заказным или ценным письмом, которое должно быть с уведомлением, занести ее самостоятельно или отправить через интернет. Для ИП сделать это надо до 30 апреля.
Если вы лично сдаете этот документ, то на его копии должна быть дата получения и входящий номер. Это требуется сделать, чтобы в случае необходимости подтвердить, что вы действительно вовремя сдали указанный документ.
Сдача нулевой отчетности ИП на УСН для налоговой
Упрощенная система распространяется не на всех предпринимателей. Для ее использования должны быть определенные основания.
Что такое нулевая декларация для ИП
Любой хозяйствующий субъект в соответствии с законодательством должен предоставлять необходимую отчетность в Федеральную налоговую службу, территориальные подразделения Пенсионного Фонда и т.д. даже в случае, если деятельность ИП отсутствует. У предпринимателей декларация является основной формой документа, благодаря которой происходит сдача налоговой отчётности. При отсутствии деятельности комплект отчетов называется «нулевым балансом» или «нулевой отчётностью».
Основания применения; субъекты, не имеющие право на применение
Они составляются в том случае, если для ситуации характерны следующие параметры:
- Предпринимательская деятельность отсутствует.
- Заработную плату работникам работодатель не выплачивает (при их наличии).
- Отсутствуют кассовые операции в отчетный период у ИП.
Важно! Такой вид отчетности формируется и тогда, когда ИП зарегистрировалось недавно, ближе к завершению отчетного периода, когда полноценно вести бизнес ещё индивидуальный предприниматель не успел.
Декларация в таких ситуациях становится нулевой, потому что для исчисления сумм каких-либо налогов нет налоговой базы.
Документы, раскрывающие отчетность индивидуального предпринимателя, составлены по аналогичным формам юридических лиц.
В случае если ИП не подаёт свою отчетность либо предоставляет ее, нарушая сроки, ИП привлекается к административной или налоговой ответственности.
Нужно ли ее сдавать на УСН
Индивидуальные предприниматели зачастую отдают предпочтение именно упрощенной системе. Выбор обуславливается возможностью легкого ведения учета и упрощённым расчетом обязательств по налогам.
На УСН предприниматель освобождается от сдачи нескольких видов документов, а именно деклараций на добавленную стоимость и по доходным налогам. Упрощённая форма отчетности сдаётся ежегодно, один раз. Для подачи декларации выделяется период — не позднее 30 апреля года, который следует за отчетным. Таким образом, если документ составляется в 2019, то предоставляется в 2020. Заполнять нулевую декларацию по УСН нужно:
- Для объектов, относящихся к категории доходы минус расходы (15%) — разделы 1.2, 2.2 и титульный лист.
- Для доходов (6%) — исключительно титульный лист и несколько разделов — 1.1, 2.1.1.
Титульный лист на УСН
Общие правила заполнения декларации
Для заполнения декларации существуют общие правила. Изначально нужно знать, что нулевая декларация не подаётся, если в индивидуальном предприятии работают сотрудники. Идентификационные данные предпринимателя обязательно нежно указывать:
- Личные данные индивидуального предпринимателя.
- ОКТМО, ИНН, КБК, КПП — идентификаторы.
- Зарегистрированные номера ОГРНИП или ОГРН.
- Кодификация по ОКВЭД.
- Декларационный порядковый номер (например, первичная — 0).
- Период, за который предоставляется отчёт (50, если ликвидация предприятия, 34 за полный год).
- Код подразделения налоговой службы, в который подаётся отчёт. Они приводятся на портале ФНС.
- Непосредственный объект, за который платится налог.
Обратите внимание! Прочерки необходимо поставить в тех главах, которые предназначены для результатов финансовой и хозяйственной деятельности.
Стоит отметить, что ставка налога все равно указывается, по актуальной схеме налогообложения.
Второй лист содержит информацию о заявителе, соответственно, об индивидуальном предпринимателе.
Каждый новый лист визируется подписью ИП. Обязательно ставится дата.
Подача возможна и в электронном виде, но для этого нужно использовать электронную цифровую подпись.
Образец заполнения
Как и куда ее сдавать
Сдавать налоговые декларации индивидуальных предприятий, в том числе и нулевые, нужно в уполномоченный орган по месту жительства — налоговую инспекцию.
В данном случае место жительства — это адрес, где находится место регистрации ип. То есть, это зависит не от предпринимателя, а именно от нахождения предприятия.
При подготовке отчетов и их сдачи можно обратиться в компании, которые на этом специализируются. Естественно, за их работу придётся заплатить, однако так предприниматель освобождает себя от дополнительной работы. Своими силами вопрос можно решить с помощью таких сервисов как «Мое дело», «Эльба» и т.д.
Сдача возможна несколькими способами:
- С помощью интернета.
- Почтовое отправление.
Подавать документы имеет право доверенное лицо предпринимателя при наличии завершённой нотариусом доверенности. Если отправление происходит по почте, то используют заказное письмо с уведомлением и описью вложенных бумаг.
Можно ли подать нулевую декларацию ИП по интернету
Нулевая декларация УСН ИП может подаваться с помощью интернета. Через интернет ее подают, используя файл xml и подготовленные копии других необходимых документов. При этом программа используется не «Еxel», а «Декларация».
Обратите внимание! Дополнительные документ, при их наличии, сканируются и сгружаются в отдельную папку. ФНС допускает размер загрузки до 20 Мб в формате jpg.
Загрузка в электронном варианте возможна только с использованием ЭЦП. А для ее получения необходима регистрация в специальном сервисе — «Личный кабинет налогоплательщика». Там указываются персональные данные, ИНН и получается сертификат на ЭЦП. Хранить ключ ЭЦП можно несколькими способами: на своём компьютере или в системе налоговой службы.
После получения сертификата налогоплательщик переходит во вкладку «Налог на доходы физлиц» и заполняет документ. После этого загружаются нужные файлы и отправляется декларация. Заполнение упрощенки обычно занимает 15-20 минут. Благодаря порталу лицо сдаёт бланк очень быстро.
В какой срок ее сдают по УСН
Налогоплательщику следует следить за сроками подачи, так как законодатель может вносить определенные изменения. Декларация этого вида (нулевая) сдаётся за предыдущий год до 30 апреля.
Обратите внимание! За этот период вполне возможно приготовить все необходимые отчеты, особенно, этого вида, так как при нулевой деятельность отсутствует.
Исходя из этого, предприниматели, которые работают с упрощённой, определенно имеют преимущество перед тем, кто зарегистрирован как юрлицо. Юрлица должны подавать документы на месяц раньше. При пропуске срока на предпринимателя накладываются штрафные санкции.
Штрафные санкции за не предоставление
Законодательство РФ регламентирует положения о том, что декларация должна подаваться в срок, который устанавливает Налоговый кодекс, иначе лицо обременяется штрафом. Сумма санкции составляет 5% от общей налоговой суммы, которая подлежит уплате по отчетной декларации. Такой процент начисляется за каждый неполный, либо неполный месяц с обозначенного дня. Однако он не может превышать 30% от суммы (ст. 119 НК РФ).
Штраф за несвоевременное предоставление декларации
При этом актуальным остаётся вопрос, могут ли налагать штраф именно за нулевую декларацию, так как сумма налога по ней равно нулю. Исходя из постановления ФАС СЗО от 30.06.2009 №А26-7635/2008 и ст. 119 НК РФ, санкции должны применяться вне зависимости от суммы налога, его наличии, либо отсутствии.
Мнения финансистов и налоговиков в этом вопросе сходятся: сумма штрафа равна 1000 рублям.* Однако судебная практика показывает, что в судей противоположная точка зрения, и они считают, что в таком случае штраф равняется нулю.
Таким образом, отвечая на вопрос, как сдать нулевую отчетность в налоговую для ИП УСН, можно сделать вывод, что при использовании упрощенки, штрафная санкция мала, а порядок подачи прост.
*Стоимость штрафа актуальна на июль 2019 года
Как заполнить нулевую декларацию для ИП на УСН 6% без сотрудников? Пошаговая инструкция для безнадежных чайников!
Важно! Обновление от 10-го апреля 2016 года.
Как и писал ранее, форма декларации изменилась. Приказом от 26.02.2016 № ММВ-7-3/99@ от 26 февраля 2016 года декларация по УСН была изменена, а новая форма начнет действовать уже с 10-го апреля 2016 года. (подробнее здесь: https://dmitry-robionek.ru/zakon/novaja-deklaracija-usn-2016.html)
Налоговики могут рекомендовать (но не более того) сдать декларацию по УСН за 2015 год по новой форме (см. ссылку выше).
А вот уже за 2016 год декларацию по УСН будем сдавать по новой форме
Настоятельно рекомендую обновлять программы бухгалтерского учета своевременно. Например, в программе «1С. Предприниматель» уже можно составить декларацию по новой форме.
Те, кто хочет составить декларацию по новой форме при помощи бесплатной программы «Налогоплательщик ЮЛ», должен обновить ее до версии не ниже 4.47. (разумеется, нужно обновиться до самой новой доступной версии)
Я обновил статьи с учетом новых требований по заполнению декларации по новой форме. Вы можете их прочитать вот здесь:
Те, кто уже сдал декларацию за 2015 год (до 10-го апреля 2016 года) по “старой форме” не обязаны снова ее пересдавать.
И последнее. Напоминаю, что сдать декларацию по итогам 2015 года нужно до 30 апреля 2016 года.
Что изменилось в новой форме декларации?
Основные изменения следующие:
- Изменилась нумерация листов. Соответственно, ИП на УСН 6% без сотрудников (и не платит торговый сбор) должен заполнить 3 листа: Титульный лист, Разде 1.1 и Раздел 2.1.1
- Ставку налога по УСН 6% теперь нужно указывать на листе 2.1.1 за каждый квартал. (строки 120-123)
- Изменился штрих-код для каждого листа декларации.
Но принцип заполнения остается таким-же, как и в старой форме. Еще раз повторю, что если нужно составить декларацию по новой форме, то программу «Налогоплательщик ЮЛ» необходимо обновить до последней новой версии.
Внимательно читайте подсказки программы, и у Вас все получится.
Я создал этот сайт для всех, кто хочет открыть свое дело в качестве ИП, но не знает с чего начать. И постараюсь рассказать о сложных вещах максимально простым и понятным языком.
Объявление перечисления — cppreference.com
Перечисление — это отдельный тип, значение которого ограничено диапазоном значений (подробности см. Ниже), который может включать несколько явно названных констант («перечислители »). Значения констант являются значениями целочисленного типа, известного как , базовый тип перечисления.
Перечисление определяется с использованием следующего синтаксиса:
enum-key attr (необязательно) enum-name (необязательно) enum-base (необязательно) (C ++ 11) { список перечислителей (необязательно) } | (1) | ||||||||
enum-key attr (необязательно) enum-name enum-base (необязательно) ; | (2) | (начиная с C ++ 11) | |||||||
enum-ключ | — | один из enum , enum class (начиная с C ++ 11) или enum struct (начиная с C ++ 11) |
attr (C ++ 11) | — | необязательная последовательность любого количества атрибутов |
имя перечисления | — | имя объявляемого перечисления.Если он присутствует, и если это объявление является повторным объявлением, ему может предшествовать описатель вложенного имени (начиная с C ++ 11): последовательность имен и операторов разрешения области видимости :: , заканчивающаяся оператором разрешения области видимости . Имя может быть опущено только в объявлениях перечисления без области действия. |
enum-base (C ++ 11) | — | двоеточие ( : ), за которым следует seq-спецификатор типа, который называет интегральный тип (если он квалифицирован cv, квалификации игнорируются), который будет служить фиксированным базовым типом для этого типа перечисления |
перечислитель-список | — | разделенный запятыми список определений перечислителя, каждое из которых является либо просто идентификатором, который становится именем перечислителя, либо идентификатором с инициализатором: идентификатор = constexpr.В любом случае за идентификатором может следовать необязательная последовательность спецификатора атрибута. (начиная с C ++ 17) |
Существует два различных типа перечислений: перечисление без области действия (объявленное с ключом перечисления перечисление
) и перечисление с областью действия (объявленное с помощью ключа перечисления enum class
или enum struct
).
[править] Перечисление без области видимости
перечислитель имя { перечислитель = constexpr , перечислитель = constexpr , … } | (1) | ||||||||
перечисление имя : тип { счетчик = constexpr , счетчик = constexpr , … } | (2) | (начиная с C ++ 11) | |||||||
перечисление имя : тип ; | (3) | (начиная с C ++ 11) | |||||||
1) Объявляет тип перечисления с незаданной областью, базовый тип которого не является фиксированным (в этом случае базовый тип является определяемым реализацией целочисленным типом, который может представлять все значения перечислителя; этот тип не превышает int
, если только значение перечислителя не может поместиться в int
или unsigned int
.Если список-перечислитель пуст, базовый тип такой, как если бы в перечислении был один перечислитель со значением 0).
2) Объявляет тип перечисления с незаданной областью, базовый тип которого фиксирован.
3) Объявление непрозрачного перечисления для перечисления без области действия должно указывать базовый тип.
Каждый перечислитель становится именованной константой типа перечисления (то есть именем), видимой во включающей области и может использоваться всякий раз, когда требуются константы.
enum Color {красный, зеленый, синий}; Цвет r = красный; переключатель (r) { case red: std :: cout << "красный \ n"; сломать; case green: std :: cout << "зеленый \ n"; сломать; case blue: std :: cout << "синий \ n"; сломать; }
Каждый перечислитель связан со значением базового типа.Когда инициализаторы предоставляются в списке перечислителей, значения перечислителей определяются этими инициализаторами. Если первый перечислитель не имеет инициализатора, связанное значение равно нулю. Для любого другого перечислителя, определение которого не имеет инициализатора, связанным значением является значение предыдущего перечислителя плюс один.
перечисление Foo {a, b, c = 10, d, e = 1, f, g = f + c}; // a = 0, b = 1, c = 10, d = 11, e = 1, f = 2, g = 12
Значения типа перечисления с незаданной областью неявно преобразуются в целые типы.Если базовый тип не фиксирован, значение может быть преобразовано в первый тип из следующего списка, способный содержать весь их диапазон значений: int, unsigned int, long, unsigned long, long long или unsigned long long. Если базовый тип фиксирован, значения можно преобразовать в их продвинутый базовый тип.
enum color {красный, желтый, зеленый = 20, синий}; цвет col = красный; int n = синий; // п == 21
Значения целочисленных типов, типов с плавающей запятой и перечислимых типов могут быть преобразованы с помощью static_cast
или явного приведения в любой тип перечисления.Если базовый тип не фиксирован, а исходное значение находится за пределами диапазона, результат не указан (до C ++ 17) undefined (начиная с C ++ 17). (Исходное значение, преобразованное в базовый тип перечисления, если оно является плавающей запятой, находится в диапазоне, если оно помещается в поле наименьшего разряда, достаточно большое, чтобы содержать все перечислители целевого перечисления.) В противном случае результат будет таким же, как и результат результат неявного преобразования в базовый тип.
Обратите внимание, что значение после такого преобразования не обязательно может быть равным любому из именованных перечислителей, определенных для перечисления.
перечисление access_t {чтение = 1, запись = 2, exec = 4}; // счетчики: 1, 2, 4 диапазон: 0..7 access_t rwe = static_cast(7); assert ((читать & читать) && (читать & писать) && (читать & exec)); access_t x = static_cast (8.0); // неопределенное поведение начиная с C ++ 17 access_t y = static_cast (8); // неопределенное поведение начиная с C ++ 17 перечисление foo {a = 0, b = UINT_MAX}; // диапазон: [0, UINT_MAX] foo x = foo (-1); // неопределенное поведение, начиная с C ++ 17, даже если базовый тип foo беззнаковый int
Имя перечисления без области видимости может быть опущено: такое объявление только вводит перечислители во включающую область:
перечисление {a, b, c = 0, d = a + 2}; // определяет a = 0, b = 1, c = 0, d = 2
Когда перечисление с незаданной областью является членом класса, к его перечислителям можно получить доступ с помощью операторов доступа к членам класса .
и ->
:
структура X { перечислить направление {left = 'l', right = 'r'}; }; Х х; Х * р = & х; int a = X :: direction :: left; // разрешено только в C ++ 11 и новее int b = X :: left; int c = x.left; int d = p-> слева;
[править] Перечисления с ограниченной областью действия
|
объявлений - cppreference.com
Объявления вводят (или повторно вводят) имена в программу C ++. Каждый вид объекта объявляется по-разному. Определения - это объявления, достаточные для использования объекта, идентифицированного по имени.
Декларация может быть одной из следующих:
attr (необязательно) декларатор ; | |||||||||
attr (начиная с C ++ 11) | - | последовательность любого количества атрибутов |
декларатор | - | Объявление функции. |
- Это объявление должно объявлять конструктор, деструктор или функцию преобразования определяемого пользователем типа. Его можно использовать только как часть объявления шаблона, явной специализации или явного создания экземпляра.
- объявление блока (объявление, которое может появиться внутри блока), которое, в свою очередь, может быть одним из следующих:
[править] Простая декларация
Простое объявление - это оператор, который вводит, создает и необязательно инициализирует один или несколько идентификаторов, обычно переменных.
описатель-спецификатор-секв. Список-деклараторов (необязательно) ; | (1) | ||||||||
attr decl-спецификатор-seq init-declarator-list ; | (2) | ||||||||
attr (начиная с C ++ 11) | - | последовательность любого количества атрибутов |
дек-спецификатор-последовательность | - | последовательность спецификаторов (см. Ниже). |
список-деклараторов инициализации | - | , разделенный запятыми список из деклараторов с дополнительными инициализаторами . init-declarator-list не является обязательным при объявлении именованного класса / структуры / объединения или именованного перечисления |
Объявление структурированной привязки также является простым объявлением. (начиная с C ++ 17)
[править] Спецификаторы
Спецификаторы объявления (decl-specier-seq) - это последовательность следующих спецификаторов, разделенных пробелами, в любом порядке:
| (начиная с C ++ 17) |
- спецификатор
friend
, разрешенный в объявлениях классов и функций.
| (начиная с C ++ 11) |
| (начиная с C ++ 20) |
- спецификатор класса хранения (регистр, статический, thread_local (начиная с C ++ 11), extern, изменяемый). Допускается только один спецификатор класса хранения, за исключением того, что
thread_local
может появляться вместе сextern
илиstatic
. - Спецификаторы типа (type-specier-seq), последовательность спецификаторов, которая именует тип. Тип каждой сущности, представленной объявлением, - это этот тип, который может быть изменен декларатором (см. Ниже). Эта последовательность спецификаторов также используется идентификатором типа. Только следующие спецификаторы являются частью type-specier-seq в любом порядке:
- char, char8_t (начиная с C ++ 20), char16_t, char32_t (начиная с C ++ 11), wchar_t, bool, short, int, long, signed, unsigned, float, double, void
- ключевое слово class, struct или union, за которым следует идентификатор (необязательно уточненный), ранее определенный как имя класса, структуры или объединения .
- ключевое слово class, struct или union, за которым следует имя шаблона с аргументами шаблона (необязательно с уточнением, необязательно с использованием средства устранения неоднозначности), ранее определенного как имя шаблона класса.
- ключевое слово enum, за которым следует идентификатор (необязательно уточненный), ранее объявленный как имя перечисления.
- в декларации-спецификаторе-seq разрешен только один спецификатор типа, за следующими исключениями:
- -
const
можно комбинировать с любым спецификатором типа, кроме самого себя. - -
volatile
можно комбинировать с любым спецификатором типа, кроме самого себя. - -
со знаком
илибез знака
можно комбинировать сchar
,long
,short
илиint
. - -
короткий
илидлинный
можно комбинировать сint
. - -
длинный
можно комбинировать сдвойным
.
| (начиная с C ++ 11) |
Атрибуты могут появляться в decl-спецификатор-seq, и в этом случае они применяются к типу, определенному предыдущими спецификаторами.
Единственный спецификатор, который может встречаться дважды в decl-спецификаторе-seq, - это | (начиная с C ++ 17) |
[править] Деклараторы
init-declarator-list - это разделенная запятыми последовательность одного или нескольких init-деклараторов, которые имеют следующий синтаксис:
инициализатор декларатора (необязательно) | (1) | ||||||||
Заявитель требует - пункт | (2) | (начиная с C ++ 20) | |||||||
Каждый инициализатор-декларатор в последовательности инициализирующего декларатора S D1, D2, D3; обрабатывается, как если бы это было отдельное объявление с теми же спецификаторами: S D1; S D2; S D3 ;.
Каждый декларатор вводит ровно один псевдоним типа объекта, ссылки, функции или (для объявлений typedef), тип которого предоставляется с помощью decl-спецификатора-seq и может быть изменен такими операторами, как & (ссылка на) или [] (массив ) или () (возврат функции) в деклараторе. Эти операторы можно применять рекурсивно, как показано ниже.
Заявитель является одним из следующих:
unqualified-id attr (необязательно) | (1) | ||||||||
атрибут квалифицированного идентификатора (необязательно) | (2) | ||||||||
... идентификатор attr (необязательно) | (3) | (начиная с C ++ 11) | |||||||
* attr (необязательно) cv (необязательно) декларатор | (4) | ||||||||
вложенный спецификатор имени * attr (необязательно) cv (необязательно) декларатор | (5) | ||||||||
и attr (необязательно) декларатор | (6) | ||||||||
&& attr (необязательно) декларатор | (7) | (начиная с C ++ 11) | |||||||
noptr-declarator [ constexpr (необязательно) ] attr (необязательно) | (8) | ||||||||
noptr-declarator ( список параметров ) cv (необязательно) ref (необязательно) кроме (необязательно) attr (необязательно) | (9) | ||||||||
D
как указатель на тип, определенный с помощью decl-specier-seq S
. 6) декларатор ссылки Lvalue: декларация S&D; объявляет D
как ссылку lvalue на тип, определенный с помощью decl-specier-seq S
.
7) декларатор ссылки Rvalue: декларация S && D; объявляет D
как ссылку rvalue на тип, определенный с помощью decl-specier-seq S
.
8) Заявитель массива.noptr-declarator - любой допустимый декларатор, но если он начинается с *, & или &&, он должен быть заключен в круглые скобки.
9) Декларатор функции. noptr-declarator - любой допустимый декларатор, но если он начинается с *, & или &&, он должен быть заключен в круглые скобки. Обратите внимание, что декларатор самой внешней функции может заканчиваться необязательным конечным возвращаемым типом. (начиная с C ++ 11)Во всех случаях attr - это необязательная последовательность атрибутов. Когда он появляется сразу после идентификатора, он применяется к объявляемому объекту.
cv - это последовательность квалификаторов const и volatile, где любой квалификатор может появляться не более одного раза в последовательности.
[править] Примечания
Когда объявление блока появляется внутри блока, а идентификатор, введенный объявлением, был ранее объявлен во внешнем блоке, внешнее объявление скрывается до конца блока.
Если объявление вводит переменную с автоматической продолжительностью хранения, она инициализируется при выполнении оператора объявления.Все автоматические переменные, объявленные в блоке, уничтожаются при выходе из блока (независимо от того, как был завершен блок: через исключение, goto или по достижении его конца), в порядке, противоположном их порядку инициализации.
[править] Примеры
#include <строка> class C { std :: string member; // параметр-спецификатор-seq равен "std :: string" // декларатором является "член" } obj, * pObj (& obj); // декларация-спецификатор-seq - это "class C {std :: string member;}" // декларатор "obj" определяет объект типа C // декларатор "* pObj (& obj)" объявляет и инициализирует указатель на C int a = 1, * p = nullptr, f (), (* pf) (двойной); // декларация-спецификатор-seq имеет значение int // декларатор a = 1 определяет и инициализирует переменную типа int // декларатор * p = nullptr определяет и инициализирует переменную типа int * // declarator (f) () объявляет (но не определяет) // функция без аргументов, возвращающая int // декларатор (* pf) (double) определяет указатель на функцию // берем double и возвращаем int int (* (* foo) (двойной)) [3] = nullptr; // параметр-спецификатор-seq имеет значение int // 1.declarator "(* (* foo) (double)) [3]" - это декларатор массива: // объявлен тип "/ вложенный декларатор / массив из 3 int" // 2. вложенным декларатором является "(* (* foo) (double))", который является декларатором указателя // объявлен тип "/ вложенный декларатор / указатель на массив из 3 int" // 3. вложенным декларатором является "(* foo) (double)", который является декларатором функции // объявлен тип "/ вложенный декларатор / функция, принимающая double и возвращающая // указатель на массив из 3 int " // 4. вложенным декларатором является "(* foo)", который является (заключенным в скобки, как того требует // синтаксис декларатора функции) указатель декларатора.// объявлен тип "/ вложенный декларатор / указатель на функцию, принимающую двойную" // и возвращаем указатель на массив из 3 int " // 5. вложенным декларатором является "foo", который является идентификатором. // Объявление объявляет объект foo типа "указатель на функцию, принимающую double // и возвращаем указатель на массив из 3 int " // Инициализатор "= nullptr" предоставляет начальное значение этого указателя.
объявлений - cppreference.com
Объявление - это конструкция языка C, которая вводит в программу один или несколько идентификаторов и определяет их значение и свойства.
Заявления могут появляться в любом объеме. Каждое объявление заканчивается точкой с запятой (как и заявление) и состоит из двух отдельных частей:
спецификаторы и квалификаторы деклараторы и инициализаторы ; | |||||||||
где
спецификаторы и квалификаторы | - | список, разделенных пробелами, в любом порядке,
|
деклараторы и инициализаторы | - | список деклараторов, разделенных запятыми (каждый декларатор предоставляет дополнительную информацию о типе и / или идентификатор для объявления).Деклараторы могут сопровождаться инициализаторами. Объявления enum, struct и union могут опускать деклараторы, и в этом случае они вводят только константы и / или теги перечисления. |
Например,
int a, * b = NULL; // "int" - это спецификатор типа, // "a" - декларатор // "* b" - это декларатор, а NULL - его инициализатор const int * f (пусто); // "int" - спецификатор типа // "const" - квалификатор типа // "* f (void)" - декларатор перечисление COLOR {КРАСНЫЙ, ЗЕЛЕНЫЙ, СИНИЙ} c; // "enum COLOR {RED, GREEN, BLUE}" - спецификатор типа // "c" - это декларатор
Тип каждого идентификатора, представленного в объявлении, определяется комбинацией типа, указанного спецификатором типа, и модификаций типа, применяемых его декларатором.
[править] Заявители
Каждый декларатор является одним из следующих:
идентификатор | (1) | ||||||||
( декларатор ) | (2) | ||||||||
* квалификаторы (необязательно) декларатор | (3) | ||||||||
noptr-declarator [ static (необязательно) квалификаторы (необязательно) выражение ] noptr-declarator | (4) | ||||||||
noptr-declarator ( параметры-или-идентификаторы ) | (5) | ||||||||
1) идентификатор, который вводит этот декларатор.
2) любой декларатор может быть заключен в скобки; это требуется для введения указателей на массивы и указателей на функции.
3) декларатор указателя: объявление S * cvr D; объявляет D
как cvr-квалифицированный указатель на тип, определенный в S
.
4) декларатор массива: объявление S D [N] объявляет D
как массив из N
объектов типа, определенного S
. noptr-declarator - это любой другой декларатор, кроме декларатора указателя без скобок.5) декларатор функции: объявление S D (params) объявляет D
как функцию, принимающую параметры params
и возвращающую S
. noptr-declarator - это любой другой декларатор, кроме декларатора указателя без скобок.Обоснование этого синтаксиса заключается в том, что когда идентификатор, объявленный декларатором, появляется в выражении той же формы, что и декларатор, он будет иметь тип, указанный в последовательности спецификаторов типа.
struct C { член int; // "int" - спецификатор типа // "член" - декларатор } obj, * pObj = & obj; // "struct C {int member;}" - спецификатор типа // декларатор "obj" определяет объект типа struct C // декларатор "* pObj" объявляет указатель на C, // инициализатор "= & obj" предоставляет начальное значение для этого указателя int a = 1, * p = NULL, f (void), (* pf) (двойной); // спецификатор типа "int" // декларатор "a" определяет объект типа int // инициализатор "= 1" предоставляет свое начальное значение // декларатор "* p" определяет объект типа указатель на int // инициализатор "= NULL" предоставляет свое начальное значение // декларатор "f (void)" объявляет функцию, принимающую void и возвращающую int // декларатор "(* pf) (double)" определяет объект типа указатель // для функции, принимающей double и возвращающей int int (* (* foo) (двойной)) [3] = NULL; // спецификатор типа int // 1.declarator "(* (* foo) (double)) [3]" - это декларатор массива: // объявлен тип "/ вложенный декларатор / массив из 3 int" // 2. вложенным декларатором является «* (* foo) (double))», который является декларатором указателя // объявлен тип "/ вложенный декларатор / указатель на массив из 3 int" // 3. вложенным декларатором является "(* foo) (double)", который является декларатором функции // объявлен тип "/ вложенный декларатор / функция, принимающая double и возвращающая // указатель на массив из 3 int " // 4. вложенным декларатором является "(* foo)", который является (заключенным в скобки, как того требует // синтаксис декларатора функции) указатель декларатора.// объявлен тип "/ вложенный декларатор / указатель на функцию, принимающую двойную" // и возвращаем указатель на массив из 3 int " // 5. вложенным декларатором является "foo", который является идентификатором. // Объявление вводит идентификатор "foo" для ссылки на объект типа // "указатель на функцию, принимающую double и возвращающую указатель на массив из 3 int" // Инициализатор "= NULL" предоставляет начальное значение этого указателя. // Если "foo" используется в выражении формы декларатора, его тип будет // внутр.int x = (* (* foo) (1.2)) [0];
Конец каждого декларатора, который не является частью другого декларатора, является точкой последовательности.
[править] Определения
Определение - это объявление, которое предоставляет всю информацию об объявленных идентификаторах.
Каждое объявление перечисления или typedef является определением.
Для функций объявление, включающее тело функции, является определением функции:
int foo (двойной); // объявление int foo (двойной х) {вернуть х; } // определение
Для объектов объявление, которое выделяет память (автоматическое или статическое, но не внешнее), является определением, а объявление, которое не выделяет память (внешнее объявление), - нет.
extern int n; // объявление int n = 10; // определение
Для структур и объединений объявления, которые определяют список членов, являются определениями:
struct X; // объявление struct X {int n; }; // определение
[править] Рекламирование
Объявление не может ввести идентификатор, если другое объявление для того же идентификатора в той же области появляется раньше, за исключением того, что
- Объявления объектов со связью (внешней или внутренней) могут повторяться:
внешний int x; int x = 10; // В ПОРЯДКЕ внешний int x; // В ПОРЯДКЕ статический int n; статический int n = 10; // В ПОРЯДКЕ статический int n; // ОК
- Определение типа, отличного от VLA, может повторяться, если оно именует один и тот же тип:
typedef int int_t; typedef int int_t; // ОК
struct X; struct X {int n; }; struct X;
Эти правила упрощают использование файлов заголовков.
[править] Примечания
Пустые деклараторы запрещены; объявление должно быть объявлением static_assert или (начиная с C11) иметь по крайней мере один декларатор или объявлять по крайней мере один тег struct / union / enum, или вводить по крайней мере одну константу перечисления.
Если какая-либо часть декларатора является декларатором массива VLA, весь тип декларатора известен как «изменяемый тип». Типы, определенные на основе изменяемых типов, также могут быть изменены (VM). Объявления любых изменяемых типов могут появляться только в области видимости блока или прототипа функции и не могут быть членами структур или объединений. Хотя VLA может иметь только автоматическую продолжительность хранения, тип виртуальной машины, такой как указатель на VLA, может быть статическим. Существуют и другие ограничения на использование типов ВМ, см. Goto, switch. longjmp | (начиная с C99) |
static_asserts считаются объявлениями с точки зрения грамматики C (так что они могут появляться везде, где может появиться объявление), но они не вводят никаких идентификаторов и не соответствуют синтаксису объявления. | (начиная с C11) |
[править] Ссылки
- C11 стандарт (ISO / IEC 9899: 2011):
- 6.7 Заявления (стр: 108-145)
- Стандарт C99 (ISO / IEC 9899: 1999):
- 6.7 Декларации (стр: 97-130)
- Стандарт C89 / C90 (ISO / IEC 9899: 1990):
[править] См. Также
.Подробный описатель типа - cppreference.com
Уточненные спецификаторы типа могут использоваться для ссылки на ранее объявленное имя класса (класс, структура или объединение) или на ранее объявленное имя перечисления, даже если имя было скрыто объявлением не типа. Их также можно использовать для объявления новых имен классов.
[править] Синтаксис
ключ класса имя класса | (1) | ||||||||
enum enum-name | (2) | ||||||||
class-key attr (необязательно) идентификатор ; | (3) | ||||||||
класс-ключ | - | один из классов, структур, объединений |
название класса | - | имя ранее объявленного типа класса, необязательно уточненного, или идентификатор, ранее не объявленный как имя типа |
имя перечисления | - | имя ранее объявленного типа перечисления, необязательно уточненное |
1) детализированный спецификатор типа для типа класса
2) детализированный спецификатор типа для перечислимого типа
3) Объявление, состоящее исключительно из детализированного спецификатора типа, всегда объявляет тип класса, названный идентификатором, в области, содержащей объявление.Объявление непрозрачного перечисления похоже на форму (3), но тип перечисления является полным типом после объявления непрозрачного перечисления.
[править] Объяснение
Форма (3) - это особый случай детализированного спецификатора типа, обычно называемого предварительным объявлением классов, описание формы (3) см. В разделе Форвардное объявление. Следующее применимо только к формам (1) и (2).
Имя-класса или имя-перечисления в разработанном спецификаторе типа может быть либо простым идентификатором, либо квалифицированным идентификатором.Имя ищется с помощью поиска по неквалифицированному имени или с помощью поиска по квалифицированному имени, в зависимости от их внешнего вида. Но в любом случае имена, не являющиеся типами, не рассматриваются.
класс Т { общественность: класс U; частный: int U; }; int main () { int T; Т т; // ошибка: найдена локальная переменная T класс Т т; // ОК: находит :: T, локальная переменная T игнорируется Т :: У * у; // ошибка: поиск T :: U находит закрытый элемент данных класс T :: U * u; // ОК: элемент данных игнорируется }
Если поиск имени не обнаруживает ранее объявленного имени типа, спецификатор детализированного типа вводится с помощью class
, struct
или union
(i.е. not by enum
), а имя-класса - это неквалифицированный идентификатор, тогда спецификатор детализированного типа является объявлением класса имени класса.
шаблон <имя типа T> struct Node { struct Node * Далее; // ОК: поиск узла находит внедренное имя-класса struct Data * Data; // ОК: объявляет тип Data в глобальной области видимости // а также объявляет элемент данных Data друг класс :: Список; // ошибка: невозможно ввести полное имя enum Kind * kind; // ошибка: невозможно ввести перечисление }; Данные * p; // ОК: данные структуры были объявлены
Если имя относится к имени typedef, псевдониму типа, параметру типа шаблона или специализации шаблона псевдонима, программа имеет неправильный формат, в противном случае разработанный спецификатор типа вводит имя в объявление так же, как простой спецификатор типа вводит его имя типа.
шаблон <имя типа T> class Node { класс друзей T; // ошибка: параметр типа не может появиться в разработанном спецификаторе типа }; класс A {}; перечислить b {f, t}; int main () { класс A a; // ОК: эквивалент 'A a;' флаг enum b; // ОК: эквивалент 'b flag;' }
Ключ класса или enum
ключевое слово, присутствующее в спецификаторе детализированного типа, должно по своей природе согласовываться с объявлением, на которое ссылается имя в спецификаторе детализированного типа.
- ключевое слово
enum
должно использоваться для ссылки на тип перечисления (с областью или без области действия) - соединение
- либо
class
, либоstruct
class-key должны использоваться для ссылки на тип класса без объединения (ключевые словаclass
иstruct
здесь взаимозаменяемы).
enum class E {a, b}; перечисление E x = E :: a; // В ПОРЯДКЕ перечислимый класс E y = E :: b; // ошибка: 'enum class' не может ввести подробный спецификатор типа struct A {}; класс A a; // ОК
При использовании в качестве аргумента шаблона класс T является параметром шаблона типа с именем T
, а не безымянным параметром, не являющимся типом, тип которого T
вводится разработанным спецификатором типа.
[править] Ссылки
- Стандарт C ++ 11 (ISO / IEC 14882: 2011):
- 3.4.4 Подробные описатели типов [basic.lookup.elab]
- 7.1.6.3 Уточненные спецификаторы типа [dcl.type.elab]
- Стандарт C ++ 98 (ISO / IEC 14882: 1998):
- 3.4.4 Подробные спецификаторы типов [basic.lookup.elab]
- 7.1.5.3 Спецификаторы уточненного типа [dcl.type.elab]