
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

Kartonagnick
19.11.2016
19:34:30

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

Kartonagnick
19.11.2016
19:54:03

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

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

Denis
19.11.2016
19:56:35

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

Real Human
19.11.2016
19:57:20

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
Вроде очевидно что 3 должно быть

babysitter
19.11.2016
20:10:33
вызову для констант — во время компиляции посчитает
вызову для переменных — в рантайме

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
Я думал, что три ПМ вызываются из-за 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?
Тогда все понятно