Точка с запятой после функции

Есть ли какая-то конкретная причина, по которой некоторые люди помещают точку с запятой после фигурной скобки закрытия?

void foo() {

};

Ответ 1

Не совсем, точка с запятой не имеет значения. Это, вероятно, вопрос привычки.

Вы можете поместить столько точек с запятой, если хотите, хотя в С++ 11:

void foo() {

};;;;;;;;

Ответ 2

Нет, это просто игнорируется. Похож на опечатку.

Ответ 3

Точка с запятой должна следовать за фигурной закрывающей скобкой класса. Это не требуется после определения функций членов класса внутри определения класса. Требуется, хотя после объявления функций класса только внутри определения класса.

#ifndef FRAME_COUNTER_H
#define FRAME_COUNTER_H

#include <iostream>

#include <SDL/SDL.h>

const Uint32 FPS = 60;
const Uint32 DELAY_TIME = 1000.0f / FPS;


class FrameCounter {

public:
    FrameCounter();

    void setFPS(int FPS) { m_FPS = FPS / (m_frameAccumulator / 1000); }

    void start() { m_frameStart = SDL_GetTicks(); }

    void run();

    void reset() {}

    void print() { printf("\nFPS: %5.1f\n", m_FPS); }

private:
    int m_frameNumber;

    Uint32 m_frameStart;
    Uint32 m_frameDuration;
    Uint32 m_frameAccumulator;

    double m_FPS;
};

#endif

Ответ 4

Ответ на ваш вопрос зависит от области применения этого определения функции.

Если вы определяете такую ​​функцию в области пространства имен, то конечный ; не имеет никакого отношения к определению функции. Он просто представляет собой отдельное пустое определение, которое следует за определением функции. Пустые определения являются законными в области пространства имен в современном С++. Это также означает, что в области пространства имен вы можете добавить столько лишних точек с запятой, сколько пожелаете.

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