Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2016, 16:50   #71
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
и как это может быть полезно.
бывают ситуации.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.07.2016, 16:51   #72
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
и как это может быть полезно.
Да очень просто - когда из нескольких переменных
в каждый момент времени нужна всего одна,
но несколько переменных таскать не хочется, либо нет возможности.
Закладываясь на реализацию, можно творить более изысканные вещи,
правда оно будет не стандарт и UB.
Croessmah вне форума Ответить с цитированием
Старый 05.07.2016, 16:52   #73
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Он
Но на самом деле конечно вероятно он просто тролль и нафантазировал все это
ну это только ваши домыслы. у меня есть свободное время и

я могу его вложить в старую профессию. тем самым заработать

монетку.
Цитата:
Сообщение от Croessmah Посмотреть сообщение
Да очень просто .
это сделано для того что-бы экономить память ?
RAFA91 вне форума Ответить с цитированием
Старый 05.07.2016, 17:00   #74
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

самое явное что я помню это то что с помощью юниона можно было легко обернуть вещи как
структура пакета вида:
<type><data>
и собственно тогда не приходится работать с указателями и кастом.
(или когда работал на низком уровне с процем и заполнял таблицу прерываний, там правда еще и битовые поля были)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.07.2016, 17:02   #75
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
это сделано для того что-бы экономить память ?
Одна из причин.
Также, например, можно "унифицировать" интерфейс.
Посмотрите, например, исходники SFML,
там в основе sf::Event лежит именно Union.
Вот Вам и реальное применение.
Croessmah вне форума Ответить с цитированием
Старый 05.07.2016, 17:05   #76
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

ну а какой-то жиденький примерчик есть ?

что-бы можно было видеть что там на самом деле происходит.

конструктор у нее есть ?
RAFA91 вне форума Ответить с цитированием
Старый 05.07.2016, 17:42   #77
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
ну а какой-то жиденький примерчик есть ?
Я ж написал где посмотреть.
Там очень даже хороший пример использования.
Croessmah вне форума Ответить с цитированием
Старый 06.07.2016, 11:55   #78
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Жаль что тут никто не вкурсе что union это парадигма которая использовалась

еще в си.

Код:
union A
{
	int a;
	double b;
};

int main() 
{
	A a;
	a.a = 200;
	cout<<"a = "<<a.a<<endl;
	a.b = 500.78;
	cout<<"b = "<<a.b<<endl;
	cout<<"***************************"<<endl;
	cout<<"a = "<<a.a<<endl;
	cout<<"b = "<<a.b<<endl;
	return 0;
}

a = 200
b = 500.78
***************************
a = -515396076
b = 500.78
RAFA91 вне форума Ответить с цитированием
Старый 06.07.2016, 12:04   #79
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Жаль что тут никто не вкурсе что union это парадигма которая использовалась еще в си.
Ой ржу. Кто тут не знает-то?
Вы ж кричите ,что знаете c++,
но при этом первый раз в глаза union видите,
какой смысл вообще что-то объяснять и рассказывать?
Как об стенку горох же.
Плюс ко всему, код Ваш содержит UB:
Код:
	A a;
//...
	a.b = 500.78;
//...
	cout<<"a = "<<a.a<<endl;//UB. 
//...
В один момент времени, активно только одно поле Union.
Так что если установили одно "поле", то чтение из других "полей" - UB.
Хотя, в большинстве случаев оно прокатит,
но как только случай будет сложнее и/или включаться какие-нибудь
особые оптимизации - всё может поломаться к чертям.
Croessmah вне форума Ответить с цитированием
Старый 06.07.2016, 12:05   #80
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
В один момент времени, активно только одно поле Union.
.
и че ? мне это тест и без вашего сказал.

для особо непонятливых даже результат выложил.
RAFA91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стандартные средства = бесконечный полет фантазии. Alex Cones Софт 2 27.07.2009 17:10
Мои статьи про работу программистов Юлия_shell Обсуждение статей 2 27.04.2009 18:41