Size: a a a

2021 July 07

АХ

Александр Хутиев... in pro.cxx
Это прямиком в продакшн, так что пожалуй почитаю, если направите на нужные ресурсы, буду благодарен)
источник

АХ

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

П

Пашечка in pro.cxx
Блин, чот не получается годного текста нагуглить, поэтому в двух словах:

Манглинг имен, это когда ты назвал функцию "foo", а компилятор преобразовал её в "ZzzzZ2346foo". Но, допустим, тебе надо вызвать эту функцию через dlopen(). А компилятор рандомно изменил имя функции, поэтому ты не знаешь, чо писать-то. Чтобы этого избежать, ты включаешь сишные соглашения о наименовании, то бишь отключаешь манглинг. И тогда имена функций буду нормальными, как ты и затребовал.
Но есть проблемы. Это не работает с перегрузкой функций, классами, неймспейсами, в общем со всем, что нельзя as is перенести в Си.
источник

K

Kelbon in pro.cxx
собственно манглинг нужен как раз для перегрузки функций... Думаю это и есть важная часть
источник

K

Kelbon in pro.cxx
Нашёл вот эту строку на cppreference
"std::memmove may be used to implicitly create objects in the destination buffer"

Это значит, что можно взять какой то объект, меммувнуть его в какой то буфер и он как бы начнёт лайфтайм чтоли? Что при этом происходит со старым объектом, ведь это мув, по логике обычного мува должно произойти обнуление всех байтов объекта из которого меммувают?
источник

ПК

Побитый Кирпич... in pro.cxx
> по логике обычного мува должно произойти обнуление всех байтов объекта из которого меммувают

нет, с чего бы
источник

ПК

Побитый Кирпич... in pro.cxx
int x = 10;
int y = move(x);

x нулем стал что ли?
источник

SS

Sergey Sobolev in pro.cxx
По сигнатуре понятно, что со старым ничего не произойдет, memmove - это простое копирование объектов
источник

K

Kelbon in pro.cxx
почему это не memcopy хД
источник

АР

Андрей Руссков... in pro.cxx
потому что есть разница
источник

SS

Sergey Sobolev in pro.cxx
Там есть тонкий момент
источник

АР

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

ПК

Побитый Кирпич... in pro.cxx
Сишные придумки
источник

K

Kelbon in pro.cxx
на cppref написано если объекты пересекаются или не тривиально копируются, то ub
источник

ПК

Побитый Кирпич... in pro.cxx
Это сишная функция, в те древние времена про мув ещё не слыхали
источник

K

Kelbon in pro.cxx
If the objects are potentially-overlapping or not TriviallyCopyable, the behavior of memmove is not specified and may be undefined.
источник

АР

Андрей Руссков... in pro.cxx
ну нетривиальное копирование у обоих UB, это вообще свойство плюсовых объектов, а не сишных
источник

SS

Sergey Sobolev in pro.cxx
memmove и std::move никак не связаны
источник

АР

Андрей Руссков... in pro.cxx
а вот пересекающиеся диапазоны memmove в отличие от memcpy обрабатывает
источник

VD

Vlad Doc in pro.cxx
Ну ты же объекты копируешь, а не сырую память, если они пересекаются в памяти то уб очевидно
источник