Подтвердить что ты не робот

Почему я должен помещать точку с запятой в конце объявления класса в С++?

В объявлении класса С++:

class Thing
{
    ...
};

Почему я должен включать точку с запятой?

4b9b3361

Ответ 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

Хорошее правило, которое поможет вам запомнить, где положить точки с запятой:

  • Если это определение, ему нужна точка с запятой в конце. Классы, структуры и союзы - это вся информация для компилятора, поэтому вам нужен трейлинг; чтобы не отмечать объявленные экземпляры.
  • Если он содержит код, он не нуждается в точке с запятой в конце. Если операторы, для циклов, в то время как циклы и функции содержат код, так что не нужно завершать;.

Пространства имен также не требуют конечной точки с запятой, так как они могут содержать сочетание обоих указанных выше (поэтому могут содержать код, поэтому не нужно использовать точку с запятой).