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