Почему я должен помещать точку с запятой в конце объявления класса в С++?
В объявлении класса С++:
class Thing
{
...
};
Почему я должен включать точку с запятой?
Ответы
Ответ 1
Полный синтаксис, по существу,
класс NAME {componentsents} экземпляры;
где "составляющие" - это последовательность элементов и методов класса, а "экземпляры" - это список экземпляров класса (например, объектов), разделенных запятыми.
Пример:
class FOO {
int bar;
int baz;
} waldo;
объявляет как класс FOO, так и объект waldo.
Последовательность экземпляров может быть пустой, и в этом случае у вас будет только
class FOO {
int bar;
int baz;
};
Вы должны поставить точку с запятой, чтобы компилятор знал, были ли вы объявлены какие-либо экземпляры или нет.
Это совместимая вещь C.
Ответ 2
потому что вы можете опционально объявлять объекты
class Thing
{
...
}instanceOfThing;
по историческим причинам
Ответ 3
Потому что это может быть определение следующего элемента. Например, взяв его из синтаксиса Си: если вы объявляете
struct {
...
}
main (int argc, char..
то он предполагает, что main возвращает struct. Если была точка с запятой,
struct {
...
};
main (int argc, char..
то main
возвращает int.
Ответ 4
Вот почему...
int a,b,c,d;
int main(void) {
struct y {
}; a, b, c, d;
struct x {
} a, b, c, d;
}
Два разных утверждения, два совершенно разных значения, оба юридические C/C++, и единственное отличие - это ;
после объявления структуры.
Утверждение a, b, c, d;
сам по себе, в этом контексте, просто оценивает a
, b
, c
и d
. В этом контексте это ничего не делает.
Однако, если он сразу после определения структуры/класса (перед ;
) создает 4 экземпляра созданной структуры/класса, a
, b
, c
и d
Ответ 5
Потому что языковая грамматика говорит так...
Ответ 6
Хорошее правило, которое поможет вам запомнить, где положить точки с запятой:
- Если это определение, ему нужна точка с запятой в конце. Классы, структуры и союзы - это вся информация для компилятора, поэтому вам нужен трейлинг; чтобы не отмечать объявленные экземпляры.
- Если он содержит код, он не нуждается в точке с запятой в конце. Если операторы, для циклов, в то время как циклы и функции содержат код, так что не нужно завершать;.
Пространства имен также не требуют конечной точки с запятой, так как они могут содержать сочетание обоих указанных выше (поэтому могут содержать код, поэтому не нужно использовать точку с запятой).