Одной из интересных разновидностей объединений в языке С++ является анонимное объединение. Оно не поддерживается в языке С. Анонимное объединение (anonymous union) представляет собой объединение, у которого нет имени или объектов, имеющих это объединение в качестве своего типа. Имена членов этого объединения доступны непосредственно без использования оператора точка или оператора стрелка. Ниже представлен короткий пример, использующий анонимное объединение:
#include <iostream.h>
int main()
{
// объявление анонимного объединения
union { // нет имени объединения
int i;
char ch[2];
}; // не указаны переменные
/ * обращение к i и ch без ссылки на объединение и без использования операторов точка или стрелка */
i = 88;
cout << i << " " << ch [ 0 ];
return 0;
}
На использование анонимных объединений имеется несколько ограничений. По очевидным причинам имена членов анонимного объединения должны отличаться от всех остальных идентификаторов в области видимости объединения. Это означает, что имена членов объединения не должны конфликтовать с остальными идентификаторами в пределах области видимости объединения. Также глобальные анонимные объединения должны вводиться с ключевым словом static. Анонимные объединения не могут содержать функций-членов. Наконец, анонимные объединения не могут включать частных или защищенных (protected) членов.
Надо помнить, что хотя С++ придает объединениям больше мощи и гибкости, это не означает, что их использование обязательно. В тех случаях, когда достаточно объединения в стиле языка С, можно использовать его именно таким образом. Однако в тех случаях, когда инкапсулируется объединение с процедурами для работы с ним, это придает программе более структурированную форму.