Крылатый
1 копи
Крылатый
http://melpon.org/wandbox/permlink/5D5y4urFrLVr1XhU
Крылатый
А, ну, поменяйте в emplace там на a2.
Крылатый
Ситуации не изменит.
ГуНиСе️
интересно, чем отличается #define macro qwerty() и #define macro() qwerty
🦥Alex Fails
Первый будет поставлять querty() в код, второй если со скобками, то querty (без них упадет)
ГуНиСе️
хм… ок
ГуНиСе️
кажется, я запутался
ГуНиСе️
хотел спросить что-то подобное на тему макросов
ГуНиСе️
но чёт перепутал, и уже не могу вспомнить :(
Anonymous
может ты хотел спросить про разницу между typedef и define?
Крылатый
https://github.com/kw-udon/constexpr-8cc
Anonymous
Нужно запилить нормальный cheat sheet по STL
Anonymous
я не смог нагуглить ничего годного
Anonymous
есть шиты по контейнерам, но не по алгоритмам
Aidar
Да просто распечатай с cplusplus.com
Aidar
Типа референсы
Anonymous
Я хотел вот в таком стиле:
Anonymous
🦥Alex Fails
babysitter
http://melpon.org/wandbox/permlink/BBaWUwJtAWVqt15F
babysitter
слышал я про этот прикол, но думал обманывают меня, а оказывается правда.
Anonymous
Потому что вектор переносит старые элементы в новую память (и хз что происходит с вектором в этот момент), если текущего размера вектора не хватает, чтобы вместить все элементы. Если заранее зарезервировать достаточно памяти, то будут вызваны только два перемещающих конструктора.
Anonymous
тогда бы их было 4ре
Anonymous
а их 3
Anonymous
почему?
Anonymous
2 при внесении элементов в вектор. 2 при реалоке и муве существующих элементов
Anonymous
Ну хз, мы же не знаем как и что именно делает вектор в таких ситуациях
Anonymous
знаем
Anonymous
при реалоке он мувит старые элементы на новое место
🦥Alex Fails
Да. Именно так
Anonymous
ты же не видел кода реализации вектора
Anonymous
нет не может. читайте стандарт
🦥Alex Fails
может и нет
При кастомном аллокаторе может не мувить
Anonymous
может он там какую-нибудь оптимизацию применяет
babysitter
при реалоке он мувит старые элементы на новое место
Только если конструктор перемещения не может бросать исключений. Иначе копии.
Anonymous
но это не принципиально
Anonymous
будем считать не важно - конструктор копии или конструктор от pvalue
Anonymous
их 3
Anonymous
а не 4
Anonymous
почему?
Anonymous
Hi
Anonymous
hi
Anonymous
Anonymous
я понееел
Anonymous
ЯЯ ПОНЕЕЕЛ
Anonymous
ПОЦАНЫ Я ПОНЕЕЕЛ
Anonymous
Почему вызываются три перемещающихся конструктора: (1) A a1, a2; (2) std::vector<A> v; (3) v.push_back(std::move(a1)); (4) v.push_back(std::move(a2)); Строка 1 - вызываются два конструктора Строка 2 - создается вектор v Строка 3 - вызывается перемещающий конструктор A Строка 4 - Во-первых: Так как объем вектора недостаточен, чтобы вместить два элемента, вектор перемещает свои элементы в новую область памяти. Вызывается перемещающий конструктор A, который перемещает единственный элемент вектора в новую память. Во-вторых: Вызывается перемещающий конструктор A, перемещающий a2. Итого - 3 перемещающих конструктора
Anonymous
Надеюсь я сумел ясно выразиться
babysitter
харош
babysitter
а так? A a1, a2; std::vector<A> v; v.reserve(2); v.push_back(std::move(a1)); v.emplace_back(std::move(a1));
Anonymous
Если пушбекнишь еще один элемент, то вызовутся уже пять ПМ
Anonymous
по тем же причинам
Anonymous
еееее
Anonymous
день прошел не зря
Enver Akhtemov
кто нибудь знает, как по id определить местоположение?
babysitter
а кто-нибудь знает, вызов emplace_back на именованом объекте существующем менее эффективен, чем push_back или вызовы эквивалентны?
Enver Akhtemov
ну , я прост сам не знаю
Enver Akhtemov
в тг видел людей они как то определяли
Anonymous
Разница в том, что emplace_back может делать так: emplace_back(1,2,3,4,5), а push_back - нет
babysitter
нафига вообще этот push_back тогда :)
🦥Alex Fails
Старый же вызов
🦥Alex Fails
Пихает 1 элемент
babysitter
просто легаси?
babysitter
да это понятно
babysitter
это как с constexpr на функциях например. почему бы его не писать вообще везде, увеличивает время компиляции?
babysitter
constexpr функции могут быть использованы в рантайме как обычные
Aidar
constexpr функции могут быть использованы в рантайме как обычные
Но в них же все констекспр должно использоваться
Aidar
Вроде очевидно что 3 должно быть
babysitter
Но в них же все констекспр должно использоваться
ну вот такую функцию написал например constexpr int summ(int a, int b) { return a + b; }