Size: a a a

2020 August 07

KO

Konstantin Osipov in pro.cxx
по-моему вы всё же не те яблоки с апельсинами сравниваете. мы в итоге имеем 3 варианта реализации, в зависимости от того, можно ли заинлайнить тело визитора: полностью локальный, с goto, полностью локальный с if, и вариант с call
источник

KO

Konstantin Osipov in pro.cxx
так вот, std::visit - это *всегда* №3. гарантированно самый тормозной.
источник

KO

Konstantin Osipov in pro.cxx
бенчмарк просто показывает что этот оверхед ничтожен в любой мало-мальски нетривиальной логике, где доминирует в итоге вызов функции или переход по адресу вне instruction cache
источник

CD

Constantine Drozdov in pro.cxx
пропустил весь спор, но виртуальный вызов быстрее visit по variant выглядит аномалией
источник

A

Alex in pro.cxx
Андрей Руссков
ну если хочется прям просто берешь мак...
Серьёзно? Мак - самая дерьмовая платформа для разработки на С++ из трёх.
источник

V🇺

Vladislav 🇺🇸🚜🇷🇺... in pro.cxx
Переслано от Group Butler [beta]
С таким заявлением вам лучше сюда:
pro.cxx.holywars
источник

CD

Constantine Drozdov in pro.cxx
Андрей Руссков
кажется, я дурачок и надо более простыми словами
ну double dispatch как название для функции с двумя полиморфными аргументами - вполне себе нормально
источник

RP

Respect Privacy in pro.cxx
Вопрос к знатокам, это я где-то ub тригерю или баг нашел? Суть: две функции, отличаются только типом индекса в цикле, при этом дают разные результаты, функция с short типом не обрабатывает 3 ий элемент. Поведение проявляется только под clang на -O3 флаге. Асемблерный код цикла получается разным. https://godbolt.org/z/5vvGnf
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Alex
А, хм. Не встречал такого синтаксиса.
Concept<T> это constexpr булево выражение
источник

m

magras in pro.cxx
Андрей Руссков
вообще делать type erasure вручную обычно не стоит
Разве variant это type erasure? Я считал, что type erasure это any и function.
источник

АК

Александр Караев... in pro.cxx
magras
Разве variant это type erasure? Я считал, что type erasure это any и function.
всё верно, variant не имеет отношения к TE
источник

АК

Александр Караев... in pro.cxx
впрочем, можно притянуть за уши и сказать, что union (или любой другой storage) сам по себе не знает хранимый тип, поэтому мы стираем тип и кладём его индекс в отдельную переменную
источник

m

magras in pro.cxx
Хотя, наверное, можно сказать, что реализация через lookup table напоминает vtable через который обычно реализуется type erasure.
источник

m

magras in pro.cxx
magras
Хотя, наверное, можно сказать, что реализация через lookup table напоминает vtable через который обычно реализуется type erasure.
Хотя нет, я не прав. vtable будет меняться от типа. А lookup table одна на весь variant.
источник

CD

Constantine Drozdov in pro.cxx
Александр Караев
впрочем, можно притянуть за уши и сказать, что union (или любой другой storage) сам по себе не знает хранимый тип, поэтому мы стираем тип и кладём его индекс в отдельную переменную
ничего он не стирает, тип из соседней шаред либы не приедет
источник

АР

Андрей Руссков... in pro.cxx
magras
Разве variant это type erasure? Я считал, что type erasure это any и function.
ну речь о том что если ты будешь делать variant (или нечто подобное) вручную ты будешь хранить объект в виде абстрактного буфера и некоторого значения, указывающего тип объекта в этом буфере
источник

m

magras in pro.cxx
Андрей Руссков
ну речь о том что если ты будешь делать variant (или нечто подобное) вручную ты будешь хранить объект в виде абстрактного буфера и некоторого значения, указывающего тип объекта в этом буфере
Для меня ключевой характеристикой type erasure является то, что он может хранить неограниченное множество типов.
источник

АР

Андрей Руссков... in pro.cxx
ну если бы я знал/вспомнил правильный термин, я бы заиспользовал его
источник

CD

Constantine Drozdov in pro.cxx
Андрей Руссков
ну если бы я знал/вспомнил правильный термин, я бы заиспользовал его
union :)
источник

АР

Андрей Руссков... in pro.cxx
ну union это более частный случай
источник