Программирование на C и C++

Онлайн справочник программиста на C и C++

Анонимные объединения

Одной из интересных разновидностей объединений в языке С++ является анонимное объедине­ние. Оно не поддерживается в языке С. Анонимное объединение (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) членов.

Надо помнить, что хотя С++ придает объединениям больше мощи и гибкости, это не означает, что их использование обязательно. В тех случаях, когда достаточно объединения в стиле языка С, можно использовать его именно таким образом. Однако в тех случаях, когда инкапсулируется объединение с процедурами для работы с ним, это придает программе более структурированную форму.