Instrukcje grupujące (ang. compound statement, grouping statement) stosuje się, gdy składnia języka wymaga wystąpienia w pewnym miejscu programu dokładnie jednej instrukcji, a tymczasem czynności, które mają być wykonane przez program za pomocą jednej instrukcji zapisane być nie mogą (lub prowadziłoby to do nieczytelnych konstrukcji). Istnieje zatem w języku możliwość potraktowania wielu instrukcji jako jednej instrukcji złożonej (grupującej). Ma ona postać ujętej w nawiasy klamrowe sekwencji instrukcji, z których każda może być instrukcją pustą (sam średnik), niepustą pojedynczą (a więc zakończoną średnikiem) lub również instrukcją grupującą (ujętą w nawiasy klamrowe). Po nawiasie klamrowym kończącym instrukcję grupującą średnika nie stawiamy. Przykładem instrukcji grupującej jest definicja funkcji.
Pamiętać trzeba, o czym już mówiliśmy, że fragment programu ujęty w nawiasy klamrowe tworzy blok. Zmienne zadeklarowane wewnątrz takiego bloku tworzonego przez instrukcję grupującą są lokalne dla tego bloku: po wyjściu sterowania z takiej instrukcji zmienne zadeklarowane wewnątrz nie są już znane (i w ogóle nie istnieją; są ze stosu usuwane). Tak więc
       {
           int i = 5;
           {
               int k = fun(i);
               i += k;
           }
           cout << "i=" << i << endl;
       }
jest jedną instrukcją grupującą, złożoną z trzech instrukcji,
z których jedna jest również instrukcją grupującą. Po wykonaniu
tej instrukcji zmienne
i
 i 
k
 nie istnieją i,
w szczególności, zmienne o tej nazwie mogą być zadeklarowane w
dalszej części ciała funkcji, w której instrukcja ta wystąpiła.
T.R. Werner, 21 lutego 2016; 20:17