т.е. мы можем по выбору обращаться с ip адресом, по байтам, по словам и целиком, при этом все в одну и ту-же память
Внесены изменения автора. -- ПК.
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
__>union A
__>{
__> int i;
__> char c[2];
__>};
__>union A a;
__>a.i=10; // a.c[0]=10,a.c[1]=0;
__>
Неудачный пример.
Во-первых, при объявлении/определении объекта ключевое слово union не нужно (если речь о С++):
A a;
Во-вторых, активным может быть только один из элементов объединения, т.е. стандартом запрещается запись в один элемент с последующим чтением из другого (тут правда есть исключение для POD — объединений, подробнее в 9.5/1).
//Так неправильно
A a;
a.i = 10;
char c = a.c[0];
//Так правильно
A a;
a.c[0] = 'a';
char c = a.c[0];
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, _nn_, Вы писали:
__>>Использование : экономия памяти, удобство использования.
__>>
__>>union A
__>>{
__>> int i;
__>> char c[2];
__>>};
__>>union A a;
__>>a.i=10; // a.c[0]=10,a.c[1]=0;
__>>
B>Неудачный пример. B>Во-первых, при объявлении/определении объекта ключевое слово union не нужно (если речь о С++):
А кто сказал что речь идет о C++ ?
B>
B>A a;
B>
B>Во-вторых, активным может быть только один из элементов объединения, т.е. стандартом запрещается запись в один элемент с последующим чтением из другого (тут правда есть исключение для POD — объединений, подробнее в 9.5/1).
V>> Да наверное уже и не нужен V>> Вот в C# и джаве нету — а живут ведь как-то ПК>Это одноплатформенные языки (в одном платформа — .Net, в другом — JVM). ПК>Сравнивать с ними C++ некорректно.
Я сравнивал, как с более молодыми языками.
Наверное когда-то давным-давно, когда деревья были маленькими и памяти на компах стояло по 512Kb, то можно было экономить с помощью union-ов.
А сейчас от них только проблемы будут.
Но это только мое личное IMHO
Здравствуйте, VBez, Вы писали:
V> Наверное когда-то давным-давно, когда деревья были маленькими и памяти V> на компах стояло по 512Kb, то можно было экономить с помощью union-ов.
Ты, вероятно, сильно удивишься, если узнаешь, что есть преизрядное количество
выпускаемых ныне компьютеров с памятью порядка 512Kb и меньше?
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Здравствуйте, VBez, Вы писали:
V>> Наверное когда-то давным-давно, когда деревья были маленькими и памяти V>> на компах стояло по 512Kb, то можно было экономить с помощью union-ов.
ПК>Ты, вероятно, сильно удивишься, если узнаешь, что есть преизрядное количество ПК>выпускаемых ныне компьютеров с памятью порядка 512Kb и меньше?
Как я завидую людям, которым не приходится экономить память...
V>> Наверное когда-то давным-давно, когда деревья были маленькими и памяти V>> на компах стояло по 512Kb, то можно было экономить с помощью union-ов. ПК>Ты, вероятно, сильно удивишься, если узнаешь, что есть преизрядное количество ПК>выпускаемых ныне компьютеров с памятью порядка 512Kb и меньше?
Для этих компьютеров прекрасно пишутся программы например на джаве. А там нету union-ов.
Для программ написанных под простые компы лучше его не использовать. Во избежание проблем.
Я не говорю, что union — вредная вещь.
Но используется оно очень редко.
Об этом я сужу по очень большим проектам, над которыми работает наша фирма.
Здравствуйте, Selectron, Вы писали:
S>В общем-то, subj...
В дополнение ко все ответам напомню:
В системах Борланда (кажется, вплоть до 5-й) есть прекрасный пример реализации электронной таблицы TCALC
Там есть пример использования union — для реализации ячейки таблицы.
Здравствуйте, VBez, Вы писали:
ПК>> Ты, вероятно, сильно удивишься, если узнаешь, что есть преизрядное ПК>> количество выпускаемых ныне компьютеров с памятью порядка 512Kb и меньше?
V> Для этих компьютеров прекрасно пишутся программы например на джаве.
Хорошо, не 512 килобайт, а 512 байт. Дело не в конкретных цифрах,
а в том, что всегда есть предел, за которым позволить себе дополнительные
прослойки типа .Net и JVM просто нельзя.
Но суть не в этом. При некотором количестве данных даже 2Gb может оказаться
недостаточно большим количеством памяти. union позволяет решать эту проблему.
Если у тебя нет таких проблем — замечательно. Но говорить, что таких проблем
в принципе не существует, и тем более приводить в качестве аргумента языки,
построенные принципиально по-другому, имхо, некорректно.
V> Для программ написанных под простые компы лучше его не использовать. V> Во избежание проблем.
Каких?
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, VBez, Вы писали:
VB>Я не говорю, что union — вредная вещь. VB>Но используется оно очень редко.
Ну ОЧЧЧень редко : "<ProgramFilesDir>\Microsoft Visual Studio\VC98\Include\oaidl.h"
struct tagVARIANT
{
union {
struct __tagVARIANT
{
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
union
{
LONG lVal;
BYTE bVal;
SHORT iVal;
FLOAT fltVal;
DOUBLE dblVal;
.............................
На типе Variant основана передача данных в OLE Automation, например... Да и много еще чего
Здравствуйте, Selectron, Вы писали:
S>В общем-то, subj...
Мож это обсуждение стало причиной, но вот сейчас заюзал union
Ситуация такова:
Есть таблица в базе данных. В этой таблице есть поле (массив char), в котором хранятся значения, смысл которых меняется в зависимости от режима работы приложения.
Есть так же класс, представляющий запись в этой таблице. Соответственно в классе есть мембер, соответствующий полю в таблице. Использование выглядит примерно так: