Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему тип не активного члена юниона?? / 25 сообщений из 43, страница 1 из 2
11.05.2020, 05:34
    #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
11.05.2020, 08:15
    #39955813
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему тип не активного члена юниона??
Плюсист,

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

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

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

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

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

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

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


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

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


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

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

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

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

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


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

Я не о том.

Откуда тут должна появиться единица?
...
Рейтинг: 0 / 0
11.05.2020, 15:03
    #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
11.05.2020, 15:04
    #39955901
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему тип не активного члена юниона??
mayton
Откуда тут должна появиться единица?

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

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

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

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

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

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

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


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