Size: a a a

2020 September 20

I

Ioann_V in pro.cxx
Побитый Кирпич
Потому что не тот каст
то есть, статиком нельзя?
источник

ПК

Побитый Кирпич... in pro.cxx
Ioann_V
то есть, статиком нельзя?
Вроде нет
источник

d

disba1ancer in pro.cxx
disba1ancer
насколько помню указатели на функцию разрешено кастить только в другой указатель на функцию и только reinterpret_cast'ом
источник

d

disba1ancer in pro.cxx
Ioann_V
то есть, статиком нельзя?
и в void* лучше не кастовать, это сразу UB
источник

P

PRoSToC0der in pro.cxx
disba1ancer
и в void* лучше не кастовать, это сразу UB
https://en.cppreference.com/w/cpp/language/reinterpret_cast
8) On some implementations (in particular, on any POSIX compatible system as required by dlsym), a function pointer can be converted to void* or any other object pointer, or vice versa. If the implementation supports conversion in both directions, conversion to the original type yields the original value, otherwise the resulting pointer cannot be dereferenced or called safely.

но лучше конечно кастить в void (*)() какой-нибудь
источник
2020 September 21

ПК

Побитый Кирпич... in pro.cxx
PRoSToC0der
https://en.cppreference.com/w/cpp/language/reinterpret_cast
8) On some implementations (in particular, on any POSIX compatible system as required by dlsym), a function pointer can be converted to void* or any other object pointer, or vice versa. If the implementation supports conversion in both directions, conversion to the original type yields the original value, otherwise the resulting pointer cannot be dereferenced or called safely.

но лучше конечно кастить в void (*)() какой-нибудь
*не кастить
источник

m

magras in pro.cxx
Андрей Руссков
существует ли техническая возможность реализовать emplace методы ассоциативных контейнеров так, чтобы сначала в ноде конструировался только ключ, потом нода пыталась вставиться в контейнер, и только потом конструировалось значение?
insert_or_assign
источник

m

magras in pro.cxx
Хотя, нет, скорее contains + emplace.
источник

АР

Андрей Руссков... in pro.cxx
magras
insert_or_assign
тебе надо создать объект ValueType чтобы использовать insert_or_assign
источник

АР

Андрей Руссков... in pro.cxx
contains + emplace делает двойной лукап
источник

m

magras in pro.cxx
Андрей Руссков
contains + emplace делает двойной лукап
Можно find и emplace с hint.
источник

АР

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

АР

Андрей Руссков... in pro.cxx
а-ля std::map<Key, std::optional<Value>>
источник

АР

Андрей Руссков... in pro.cxx
и вызывать через
auto& val = m[key];
if (val) {
   ... // use value
} else {
   val.emplace(args...);
   ... // use value
}
источник

АР

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

m

magras in pro.cxx
magras
Можно find и emplace с hint.
Правда, на сколько я помню все что связано с hint - implementation detail. В том числе он спокойно может игнорироваться. И кажется, для unordered_map именно это и происходит.
источник

АР

Андрей Руссков... in pro.cxx
magras
Можно find и emplace с hint.
так у тебя find вернет end()
источник

АР

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

A

Arina in pro.cxx
Подскажите, как через дп это сделать

У меня есть две функции : a(x,y) - складывает числа х и y, m(x,y) - умножает х и у. Изначально есть две константы: 0 и 1. Допустим, если я хочу получить число 2, то я могу сделать a(1,1) и это будет мне стоить 6 символов. Для числа 4 = m(a(1,1),a(1,1)) цена 16 символов. Как через минимальное количество символов вывести любое число?(в частности мне нужно 708)
источник

A

Arina in pro.cxx
Arina
Подскажите, как через дп это сделать

У меня есть две функции : a(x,y) - складывает числа х и y, m(x,y) - умножает х и у. Изначально есть две константы: 0 и 1. Допустим, если я хочу получить число 2, то я могу сделать a(1,1) и это будет мне стоить 6 символов. Для числа 4 = m(a(1,1),a(1,1)) цена 16 символов. Как через минимальное количество символов вывести любое число?(в частности мне нужно 708)
Ну или просто как ответ правильный получить
источник