Здравствуйте, rg45, Вы писали:
R>Зачем же ты move прямо внутрь запихнул? move ведь не всегда должно быть, а только когда нужно:
Исходил из того, что у MovableNonCopyable не может быть копий. Согласен на std::forward<T>(t).
Здравствуйте, andyp, Вы писали:
R>>Так просто ведь все — aggregate initialization — это старая добрая си-шная инициализация массивов и структур. А list initialization — уродец, основанный на initializer_list-ах, придуманный каким-то студентом, для которого шашечки важнее, чем ехать.
A>Это если только на эти две смотреть. А так там еще default, zero, value, direct, constant... Тьма их. В общем, ты толкнул меня на 801 круг
Главное помнить, что: std::vector<int> v2(1, 2); — это один элемент со значением 2 std::vector<int> v1{1, 2}; — это два элемента со значениями 1 и 2
Здравствуйте, rg45, Вы писали:
R>Будьте осмотрительны, используя initializer_list для инициализации. Помните, его элементы всегда копируются, а не перемещаются, даже когда вы наполняете его rvalue значениями:
Здравствуйте, Анатолий Широков, Вы писали:
R>>Будьте осмотрительны, используя initializer_list для инициализации. Помните, его элементы всегда копируются, а не перемещаются, даже когда вы наполняете его rvalue значениями:
АШ>вывод:
Всё это очень интересно, но жаль, что перемещение элементов из списка вам так и не удалось продемонстрировать.
Здравствуйте, B0FEE664, Вы писали:
BFE>Главное помнить, что: BFE>std::vector<int> v2(1, 2); — это один элемент со значением 2 BFE>std::vector<int> v1{1, 2}; — это два элемента со значениями 1 и 2
Угу, что Карл Маркс и Фридрих Энгельс — два человека, а не четыре, Слава КПСС — вообще не человек, а
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, Анатолий Широков, Вы писали:
R>>>Будьте осмотрительны, используя initializer_list для инициализации. Помните, его элементы всегда копируются, а не перемещаются, даже когда вы наполняете его rvalue значениями:
АШ>>вывод: BFE>Всё это очень интересно, но жаль, что перемещение элементов из списка вам так и не удалось продемонстрировать.
Вообще проблема не в initializer_list как каком то специальном типе, а в том, что его итераторы возвращают указатели на _константные_ элементы. а их перемещать нельзя.
Здравствуйте, B0FEE664, Вы писали:
BFE>Главное помнить, что: BFE>std::vector<int> v2(1, 2); — это один элемент со значением 2 BFE>std::vector<int> v1{1, 2}; — это два элемента со значениями 1 и 2
Недавно наступил на эти грабли... (смешанные чувства)