那些情况下需要在一个大括号(})后还得加分号(;)

class/struct声明

class test_class
{
public:
    test_class(){}
};

为什么会有这么奇怪的干法? 为什么java就不需要?
那是因为c++支持类型定义和变量声明同时进行, 上边的代码只是省去了变量声明而已.
看看下边的代码就不会觉得结尾的分号很奇怪了

class
{
public:
    test_class(){}
} t1, t2;

enum声名

enum Suit { Diamonds, Hearts, Clubs, Spades };

定义类型和变量声明同时进行

enum Suit { Diamonds, Hearts, Clubs, Spades } a1, a2;

数组初始化

int array[10][10] = { {1,1} , {2,2} };

lambda表达式声明

std::function<int(int)> func2 = [](int i) { return i+4; };