powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему тип не активного члена юниона??
25 сообщений из 43, страница 1 из 2
Почему тип не активного члена юниона??
    #39955803
Плюсист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В стандарте написано что можно читать активный член юниона через совместимую неактивную структуру и тогда код будет вести себя так, как если бы я именовал активный член.
Я пишу код, чтобы проверить это, но, похоже, что в компиляторе баг, выводит 0. Может кто-нибудь его зарепортить?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
#include <iostream>
#include <typeinfo>

struct T1 { enum E1 : int {} a; };
struct T2 { enum E2 : int {} b; };
union U { T1 t1; T2 t2; };

void f(U& u)
{
	auto x = u.t2.b; // если активен u.t1, u.t2.b заменяется на u.t1.a
	
	std::cout << (typeid(x) == typeid(u.t1.a)) << std::endl; // должно вывести 1
}

int main()
{
	U u { {} }; // активный член u.t1
	f(u);
}
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39955813
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плюсист,

Не очень понятно что вас удивляет. Вы хотите что бы у вас при выполнении типы изменялись?
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39955815
Плюсист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav,

разве стандарт к этому не обязывает?
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39955817
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плюсист
petrav,

разве стандарт к этому не обязывает?

У меня не очень с англ. Но я уверен вы неправильно поняли стандарт. То что вы хотите вообще не возможно, никак. У вас объединение из двух структур, типы разные. После компиляции всё прибито гвоздями и там ничего не поменяется от того как вы переменную инициализируете.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39955818
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плюсист,

Может у вас стандарт на C++.NET, а компилятор для C++ ? :) Тогда может быть. Я даже не понимаю что такое "активный член объединения". Там в рантайме нет никакой информации какой член активен, а какой пассивен. :)
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39955863
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что тут происходит?

Код: plaintext
1.
U u { {} }; // активный член u.t1
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39955870
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А что тут происходит?

Код: plaintext
1.
U u { {} }; // активный член u.t1


Default-инициализация первого члена.
(В C++ можно только первого инициализировать до C++20)
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39955872
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
mayton
А что тут происходит?

Код: plaintext
1.
U u { {} }; // активный член u.t1


Default-инициализация первого члена.
(В C++ можно только первого инициализировать до C++20)

А в С++ 20 ? Неужели они позаимствовали из Си инициализацию?

Код: plaintext
1.
MyStruct s = { .MyValue = 0 };
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39955885
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
А в С++ 20 ? Неужели они позаимствовали из Си инициализацию?

Собирались. Не помню точно.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39955886
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39955888
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
mayton
А что тут происходит?

Код: plaintext
1.
U u { {} }; // активный член u.t1


Default-инициализация первого члена.
(В C++ можно только первого инициализировать до C++20)

Я не о том.

Откуда тут должна появиться единица?
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39955900
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Anatoly Moskovsky
пропущено...

Default-инициализация первого члена.
(В C++ можно только первого инициализировать до C++20)

Я не о том.

Откуда тут должна появиться единица?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
#include <iostream>
#include <typeinfo>

struct T1 { enum E1 : int {} a; };
struct T2 { enum E2 : int {} b; };
union U { T1 t1; T2 t2; };

void f(U& u)
{
	auto x = u.t2.b; // если активен u.t1, u.t2.b заменяется на u.t1.a
	
	std::cout  << std::boolalpha << (typeid(x) == typeid(u.t1.a)) << std::endl; // должно вывести 1
}

int main()
{
	U u { {} }; // активный член u.t1
	f(u);
}
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39955901
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Откуда тут должна появиться единица?

Результат сравнения либо true либо false.
В данном случае ТС ожидает true ))
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956618
Плюсист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav
Может у вас стандарт на C++.NET
Нет
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956627
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky
Default-инициализация первого члена.
Ты точно знаешь что такое default-initialization?
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956684
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
Anatoly Moskovsky
Default-инициализация первого члена.
Ты точно знаешь что такое default-initialization?

расскажи свою версию.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956693
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OoCc
a guest
пропущено...
Ты точно знаешь что такое default-initialization?

расскажи свою версию.
Нет никаких версий. Есть однозначеное определение.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956698
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джентльмены. Прошу писать конструктивно.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956701
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Джентльмены. Прошу писать конструктивно.
Ты сам задал тут оффтопный нубский вопрос. Мы его развиваем.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956703
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну шикарно. Я все равно вас попрошу писать полезную инфу для читающих этот форум. Для бесполезной - есть другие.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956707
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Ну шикарно. Я все равно вас попрошу писать полезную инфу для читающих этот форум. Для бесполезной - есть другие.
Вот как ты думаешь. Называть не-default-initialization default-инициализацией это полезная инфа?
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956735
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я никак не думаю. Я-же не участник спора который звучал выше.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956742
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
OoCc
пропущено...

расскажи свою версию.
Нет никаких версий. Есть однозначеное определение.

И? Давай продолжай.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956743
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
mayton
Ну шикарно. Я все равно вас попрошу писать полезную инфу для читающих этот форум. Для бесполезной - есть другие.
Вот как ты думаешь. Называть не-default-initialization default-инициализацией это полезная инфа?

Ты неправ.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956747
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OoCc
a guest
пропущено...
Вот как ты думаешь. Называть не-default-initialization default-инициализацией это полезная инфа?

Ты неправ.
Пруф?
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему тип не активного члена юниона??
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]