В C / C ++; является ограничителем оператора.
Все заявления заканчиваются на; избежать двусмысленности (и упростить разбор).
Грамматика последовательна в этом отношении.
Даже если объявление класса (или любой блок в этом отношении)
это несколько строк в длину и
с разделителем {} это все еще просто оператор ({} является частью оператора)
следовательно, должен быть завершен с; (; Не является разделителем / разделителем)
В вашем примере
class MyClass{...} MyInstance;
является полным утверждением.
Можно определить несколько экземпляров объявленного класса в одном выражении
class MyClass{...} MyInstance1, MyInstance2;
Это полностью согласуется с объявлением нескольких экземпляров примитивного типа в одном выражении:
int a, b, c;
Причина, по которой человек часто не видит такого описания класса и экземпляра, - может ли экземпляр? быть глобальной переменной, и вам не часто нужны глобальные объекты, если они не являются статическими и / или простыми структурами старых данных.