@ProCxx

Страница 437 из 2477
fox.lua
19.11.2016
16:55:01
интересно, чем отличается #define macro qwerty() и #define macro() qwerty

Alex Фэils?︙
19.11.2016
17:00:35
Первый будет поставлять querty() в код, второй если со скобками, то querty (без них упадет)

fox.lua
19.11.2016
17:01:47
хм… ок

Google
fox.lua
19.11.2016
17:01:53
кажется, я запутался

хотел спросить что-то подобное на тему макросов

но чёт перепутал, и уже не могу вспомнить :(

Real Human
19.11.2016
17:24:44
может ты хотел спросить про разницу между typedef и define?

Дед Пегас
19.11.2016
17:26:17
https://github.com/kw-udon/constexpr-8cc

Real Human
19.11.2016
17:27:02
Нужно запилить нормальный cheat sheet по STL

я не смог нагуглить ничего годного

есть шиты по контейнерам, но не по алгоритмам

Aidar
19.11.2016
17:28:06
Да просто распечатай с cplusplus.com

Типа референсы

Real Human
19.11.2016
17:30:21
Я хотел вот в таком стиле:



Alex Фэils?︙
19.11.2016
17:32:10
Google
babysitter
19.11.2016
18:24:29
http://melpon.org/wandbox/permlink/BBaWUwJtAWVqt15F

слышал я про этот прикол, но думал обманывают меня, а оказывается правда.

Real Human
19.11.2016
19:26:17
Потому что вектор переносит старые элементы в новую память (и хз что происходит с вектором в этот момент), если текущего размера вектора не хватает, чтобы вместить все элементы. Если заранее зарезервировать достаточно памяти, то будут вызваны только два перемещающих конструктора.

Kartonagnick
19.11.2016
19:29:47
тогда бы их было 4ре

а их 3

почему?

Real Human
19.11.2016
19:30:29
Kartonagnick
19.11.2016
19:31:07
2 при внесении элементов в вектор. 2 при реалоке и муве существующих элементов

Real Human
19.11.2016
19:32:30
Ну хз, мы же не знаем как и что именно делает вектор в таких ситуациях

Kartonagnick
19.11.2016
19:32:48
знаем

при реалоке он мувит старые элементы на новое место

Alex Фэils?︙
19.11.2016
19:33:18
Да. Именно так

Real Human
19.11.2016
19:33:28
ты же не видел кода реализации вектора

Kartonagnick
19.11.2016
19:33:35
нет не может. читайте стандарт

Alex Фэils?︙
19.11.2016
19:34:05
может и нет
При кастомном аллокаторе может не мувить

Real Human
19.11.2016
19:34:14
может он там какую-нибудь оптимизацию применяет

babysitter
19.11.2016
19:34:15
при реалоке он мувит старые элементы на новое место
Только если конструктор перемещения не может бросать исключений. Иначе копии.

Google
babysitter
19.11.2016
19:34:32
Kartonagnick
19.11.2016
19:34:34
но это не принципиально

будем считать не важно - конструктор копии или конструктор от pvalue

их 3

а не 4

почему?

True
19.11.2016
19:36:30
Hi

Kartonagnick
19.11.2016
19:36:53
hi

Real Human
19.11.2016
19:43:12
я понееел

ЯЯ ПОНЕЕЕЛ

ПОЦАНЫ Я ПОНЕЕЕЛ

Почему вызываются три перемещающихся конструктора: (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 перемещающих конструктора

Real Human
19.11.2016
19:47:30
Надеюсь я сумел ясно выразиться

babysitter
19.11.2016
19:48:13
харош

а так? A a1, a2; std::vector<A> v; v.reserve(2); v.push_back(std::move(a1)); v.emplace_back(std::move(a1));

Real Human
19.11.2016
19:50:08
Если пушбекнишь еще один элемент, то вызовутся уже пять ПМ

по тем же причинам

еееее

день прошел не зря

Google
EnverAkhtemov [EA]
19.11.2016
19:56:02
кто нибудь знает, как по id определить местоположение?

babysitter
19.11.2016
19:56:07
а кто-нибудь знает, вызов emplace_back на именованом объекте существующем менее эффективен, чем push_back или вызовы эквивалентны?

EnverAkhtemov [EA]
19.11.2016
19:57:11
ну , я прост сам не знаю

Admin
ERROR: S client not available

EnverAkhtemov [EA]
19.11.2016
19:57:31
в тг видел людей они как то определяли

Real Human
19.11.2016
19:58:27
Разница в том, что emplace_back может делать так: emplace_back(1,2,3,4,5), а push_back - нет

babysitter
19.11.2016
19:58:39
нафига вообще этот push_back тогда :)

Alex Фэils?︙
19.11.2016
19:58:49
Старый же вызов

Пихает 1 элемент

babysitter
19.11.2016
19:58:58
просто легаси?

да это понятно

это как с constexpr на функциях например. почему бы его не писать вообще везде, увеличивает время компиляции?

constexpr функции могут быть использованы в рантайме как обычные

Aidar
19.11.2016
20:07:57
constexpr функции могут быть использованы в рантайме как обычные
Но в них же все констекспр должно использоваться

Вроде очевидно что 3 должно быть

babysitter
19.11.2016
20:10:33
Но в них же все констекспр должно использоваться
ну вот такую функцию написал например constexpr int summ(int a, int b) { return a + b; }

вызову для констант — во время компиляции посчитает вызову для переменных — в рантайме

Google
babysitter
19.11.2016
20:11:09
так почему везде не писать на всякий случай

Aidar
19.11.2016
20:11:10
Ну это да

Но всервно обычные функции этим не заменитт

babysitter
19.11.2016
20:12:37
не сильно подробно объяснил. пойду читать

Real Human
19.11.2016
20:12:51
Вроде очевидно что 3 должно быть
Я лично сначала запутался в собственных представлениях о том, как устроен вектор

Я думал, что три ПМ вызываются из-за emplace_back и потерял много времени на ненужном исследовании кода

Ответ оказался намного очевиднее, чем я ожидал

babysitter
19.11.2016
20:16:04
есть короче набор ограничений constexpr функция не может быть виртуальной, на ее возвращаемое значение и входные параметры накладываются серьезные ограничения и это еще не все

Aidar
19.11.2016
20:17:39
Там же циклы вроде нельзя goto, только 1 return и все такое

babysitter
19.11.2016
20:18:28
не, циклы можно должно быть, что мы, звери что ли

Aidar
19.11.2016
20:18:33
Я кстати не понял почему при push back вызывается 1 move

У меня в голове как должно быть

Push back принимает T

Значит вызовется ну пусть T&&

Значит будет вызов T(param&&)

А блин у вас Че параметр тоже T?

Тогда все понятно

Страница 437 из 2477