Точка с запятой в пространстве имен. Необходимо?
При работе с пространством имен мне нужно закончить его точкой с запятой? Например, когда я помещаю объявление класса в пространство имен, многие люди не включают точку с запятой, но, по-видимому, это необязательно.
Добавляет или удаляет ли точка с запятой функциональность или изменяет текущую функциональность?
Спасибо.
Ответы
Ответ 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.