powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему тип не активного члена юниона??
43 сообщений из 43, показаны все 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
Почему тип не активного члена юниона??
    #39956748
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
OoCc
пропущено...

Ты неправ.
Пруф?

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

Да, пруф пожалуйста. Твоеему утверждению.
Я в основном спрашивал, а не утверждал. Пруф пусть тащат те, кто утвержал.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956750
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCc
a guest
пропущено...
Пруф?

Да, пруф пожалуйста. Твоеему утверждению.

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

Да, пруф пожалуйста. Твоеему утверждению.

И желательно из стандарта.
Да, хорошее напоминание утверждающим, спасибо.
Когда будете пруфать про дефолтную инициализацию, пруфайте стандартом.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39956776
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, вы, блин, вконец обленились...
https://en.cppreference.com/w/cpp/language/default_initialization
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39957021
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest,

Да, то была не дефолт-инициализация.
Я имел в виду что объект будет проинициализирован дефолтным конструктором.
А запоминать как это все формально называется из десятка терминов предоставляю тем кому больше нечем заняться ))
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39957031
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С++ определяет сколько... ? 19 способов инициализации пременной. Дай бох мне вспомнить хотя-бы 3-4 из них.

И после этого нужен PVS студия. Чтоб ИИ думал за разработчика где еще может грабля прилететь в лоб
или пистолет в ногу стрельнуть.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39957047
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
С++ определяет сколько... ? 19 способов инициализации пременной. Дай бох мне вспомнить хотя-бы 3-4 из них.

Ну на счёт 19-ти вы, наверное загнули, но у нас в С++ ещё и типов массивов штук пять. И у них у всех разное предназначение. У некоторых даже по два способа получения доступа к элементу. И все эти типы массивов всё равно требуют понимания как они внутри реаизованы.

mayton
И после этого нужен PVS студия. Чтоб ИИ думал за разработчика где еще может грабля прилететь в лоб
или пистолет в ногу стрельнуть.

PVS Studio ещё и Яву анализирует.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39957253
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky
Да, то была не дефолт-инициализация.
Я имел в виду что объект будет проинициализирован дефолтным конструктором.
И опять мимо. Там aggregate initialization (юниона и его первого члена) , а не вызов конструктора.
Anatoly Moskovsky
А запоминать как это все формально называется из десятка терминов предоставляю тем кому больше нечем заняться ))
Если тебе есть чем заняться, чёж ты ходишь по форумам и чушь пишешь?
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39957308
mayton
С++ определяет сколько... ? 19 способов инициализации пременной. Дай бох мне вспомнить хотя-бы 3-4 из них.

И после этого нужен PVS студия. Чтоб ИИ думал за разработчика где еще может грабля прилететь в лоб
или пистолет в ногу стрельнуть.

берёшь любой из 19 способов и инициализируешь, как тебя нравится
это разве проблема?
в PVS, там где 42 примера он описывал, про инициализацию вроде ни одного не было
вполне реальные косяки
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39957368
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
mayton
С++ определяет сколько... ? 19 способов инициализации пременной. Дай бох мне вспомнить хотя-бы 3-4 из них.

И после этого нужен PVS студия. Чтоб ИИ думал за разработчика где еще может грабля прилететь в лоб
или пистолет в ногу стрельнуть.

берёшь любой из 19 способов и инициализируешь, как тебя нравится
это разве проблема?
в PVS, там где 42 примера он описывал, про инициализацию вроде ни одного не было
вполне реальные косяки

Безотносительно PVS.

Когда у разработчика есть 19 способов инициализации - у него в голове матрица из 19 стратегий.
И он, программируя должен сам себе давать логическое объяснение - почему он выбрал именно
этот способ а не тот.

Вариант - "мне так нравится или дело вкуса" я не принимаю как аргумент. Если у него (разработчика) нет
объяснения - значит у него нет аргументации. И я как тех лид или как человек который делает
code-reveiw попрошу его переписать инициализацию, выбрасывая из нее все WTF-воце-факи
там где я посчитаю это странным или непохожим на тот aproach который использовался 30 лет до этого
в языке С++.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39957378


Модератор: Хорошая картинка но я убрал под спойлер. Слишком много экранного места занимает
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39957388
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a guest
И опять мимо. Там aggregate initialization (юниона и его первого члена) , а не вызов конструктора.

Если у первого члена есть дефолтный к-тор то он именно им и будет проинициализирован.
Если же нет (POD) то нулями.

a guest
Если тебе есть чем заняться, чёж ты ходишь по форумам и чушь пишешь?

Ну у меня по крайней мере нет фиксации на других и я не хожу за ними везде по форумам ))
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39957396
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Друзья. Спокойнее. Нормальный-же топик. Зачем такие личностные выпады?
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39957424
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
a guest
И опять мимо. Там aggregate initialization (юниона и его первого члена) , а не вызов конструктора.

Если у первого члена есть дефолтный к-тор то он именно им и будет проинициализирован.
Если же нет (POD) то нулями.

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

Может в старых стандартах, до 11 и нельзя, не помню.
Но сейчас можно.
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39957846
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky
a guest
И опять мимо. Там aggregate initialization (юниона и его первого члена) , а не вызов конструктора.

Если у первого члена есть дефолтный к-тор то он именно им и будет проинициализирован.
Если же нет (POD) то нулями.
Это ты типа показываешь что понял, почему там не вызов конструктора? Ну маладца.

Anatoly Moskovsky
a guest
Если тебе есть чем заняться, чёж ты ходишь по форумам и чушь пишешь?

Ну у меня по крайней мере нет фиксации на других и я не хожу за ними везде по форумам ))
КВС, да тут пожар в хвостовом отсеке .
...
Рейтинг: 0 / 0
Почему тип не активного члена юниона??
    #39957876
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Тема закрыта
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему тип не активного члена юниона??
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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