Size: a a a

2021 February 17

AS

Anatoly Shirokov in supapro.cxx
Vladimir Kuznetsov
Всем привет, я делаю свою реализацию std::vector и застрял на реализации insert и emplace. Как я понимаю, внутри emplace будет placement new, а внутри insert (в перегрузке через константную ссылку), например, копирование через memcpy. Но в исходниках msvc внутри insert вызывается emplace, получается insert это тот же самый emplace?
да, это одно и тоже, грубо говоря
источник

DP

Denis Paukaev in supapro.cxx
ну insert не in place конструирует, а принимает уже готовый объект
источник

DP

Denis Paukaev in supapro.cxx
который вполне можно передать в emplace, и получить нужное поведение )
источник

D

Dmitriy in supapro.cxx
Vladimir Kuznetsov
Всем привет, я делаю свою реализацию std::vector и застрял на реализации insert и emplace. Как я понимаю, внутри emplace будет placement new, а внутри insert (в перегрузке через константную ссылку), например, копирование через memcpy. Но в исходниках msvc внутри insert вызывается emplace, получается insert это тот же самый emplace?
например, копирование через memcpy
Звучит жутко
источник

DP

Denis Paukaev in supapro.cxx
Dmitriy
например, копирование через memcpy
Звучит жутко
нормальный вариант для is_trivially_copyable, но в общем случае конечно лажа будет)
источник

M

Max in supapro.cxx
Ilia Zviagin
Шарам все равно по какому протоколу работать
Теоретически да, но нет.
Поэтому и спросил, был ли опыт работы через C++ с путями до шар с ipv6 путями
источник

FS

Flower Surgeon in supapro.cxx
Max
Теоретически да, но нет.
Поэтому и спросил, был ли опыт работы через C++ с путями до шар с ipv6 путями
Речь тут скорее об особенностях файловой системы, вот от этой печки и пляши.
источник

FS

Flower Surgeon in supapro.cxx
Какая-то поддерживает симлинки, например, какая-то — нет. Какая-то регистрозависимая, какая-то — нет.
источник

VK

Vladimir Kuznetsov in supapro.cxx
Denis Paukaev
ну insert не in place конструирует, а принимает уже готовый объект
и получается, если я буду использовать
std::move(T(std::forward<Args>(args) ...)
то если у меня r-value - будет вызван move конструктор и будет in place, а если l-value, то будет вызов конструктора копирования?
источник

DP

Denis Paukaev in supapro.cxx
где использовать?
источник

DP

Denis Paukaev in supapro.cxx
T{args...} это и так rvalue, к нему не надо ещё раз мув делать
источник

VK

Vladimir Kuznetsov in supapro.cxx
внутри emplace  
*it = std::move(T(std::forward<Args>(args) ...));
источник

NM

Nastya Medveda in supapro.cxx
Добрый вечер, При компиляции мне приходится указывать файлы классов.
 src % g++ -std=c++17 test.cpp Date.cpp

я сомневаюсь что это правильный подход - если у меня будет несколько классов, то строка компиляции будет очень длинной. Подскажите, как это правильно делается? Есть какая-то утилита?
источник

FS

Flower Surgeon in supapro.cxx
Nastya Medveda
Добрый вечер, При компиляции мне приходится указывать файлы классов.
 src % g++ -std=c++17 test.cpp Date.cpp

я сомневаюсь что это правильный подход - если у меня будет несколько классов, то строка компиляции будет очень длинной. Подскажите, как это правильно делается? Есть какая-то утилита?
CMake
источник

DP

Denis Paukaev in supapro.cxx
Vladimir Kuznetsov
внутри emplace  
*it = std::move(T(std::forward<Args>(args) ...));
тут не нужен мув
источник

DP

Denis Paukaev in supapro.cxx
внутри emplace всегда будет rvalue, потому, что мы его будет создавать из переданных аргументов
источник

DP

Denis Paukaev in supapro.cxx
мув надо будет добавить чтобы реализовать insert через emplace, а точнее вариант insert который rvalue ссылку принимает
источник

DP

Denis Paukaev in supapro.cxx
iterator insert( const_iterator pos, T&& value ) {
 emplace(pos, std::move(value));
}
источник

VK

Vladimir Kuznetsov in supapro.cxx
понял, спасибо!
источник

 P

 ‌‌Gleb Pilipets... in supapro.cxx
int&& func()
{
   return 0;
}
int&& var = func();

А это UB?
источник