Точка с запятой в пространстве имен.Необходимо? - PullRequest
12 голосов
/ 03 октября 2010

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

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

Спасибо.

Ответы [ 3 ]

14 голосов
/ 03 октября 2010

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

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.

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

5 голосов
/ 03 октября 2010

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

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

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

1 голос
/ 03 октября 2010

Нет, вам не нужно «заканчивать» точкой с запятой. Это не обычная практика и не имеет никакого эффекта.

namespace foo
{
    ...
} // no semi-colon necessary here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...