Точка с запятой в пространстве имен. Необходимо?

При работе с пространством имен мне нужно закончить его точкой с запятой? Например, когда я помещаю объявление класса в пространство имен, многие люди не включают точку с запятой, но, по-видимому, это необязательно.

Добавляет или удаляет ли точка с запятой функциональность или изменяет текущую функциональность?

Спасибо.

Ответ 1

Если точка с запятой является необязательной, она не изменяет функциональность, в противном случае вы ее опустите, вы получите синтаксическую ошибку.

namespace A {
    class B; // forward declaration, semicolon is mandatory.

    class B {
    }; // class definition, semicolon is mandatory

    class C {
    } f(); // because otherwise it is a return type of a function.
} // no need for semicolon

namespace D = A; // semicolon is mandatory.

Если это не те случаи, о которых вы говорили, прокомментируйте пожалуйста.

Ответ 2

Нет. Пространства имен не должны заканчиваться точкой с запятой, хотя Бьярне хотел это сделать. Я думаю, чтобы уменьшить несоответствия, связанные с синтаксисом, с другими конструкциями С++. Однако я не уверен, почему он не был принят.

"Глупые ошибки ввода неизбежно будут возникают из синтаксического сходства конструкции пространства имен для других С++ строит. Я предлагаю разрешить необязательная точка с запятой после глобального чтобы уменьшить разочарование. Это было бы своего рода" пустым "объявление в соответствии с пустым заявления".

Все форвардные объявления класса должны заканчиваться точкой с запятой. Можете ли вы привести примеры того, где это необязательно в С++?

Ответ 3

Нет, вам не нужно "завершать" его с помощью двоеточия. Это не обычная практика и не имеет никакого эффекта.

namespace foo
{
    ...
} // no semi-colon necessary here.