Публикации по теме 'move-semantics'


Подробное руководство по std::remove_reference, std::move и std::forward
// std::remove_reference template <typename T> struct remove_reference { typedef T type; }; template <typename T> struct remove_reference<T&> { typedef T type; }; template <typename T> struct remove_reference<T&&> { typedef T type; }; // std::move template <typename T> typename remove_reference<T>::type&& move(T&& arg) noexcept { return static_cast<typename..

Вопросы по теме 'move-semantics'

Что такое семантика перемещения?
Я только что закончил слушать радио Software Engineering интервью подкаста со Скоттом Мейерсом по поводу C ++ 0x . Большинство новых функций имели для меня смысл, и сейчас я действительно в восторге от C ++ 0x, за исключением одной. Я все еще не...
482020 просмотров
schedule 03.02.2022

Перемещение ctor и перемещение dtor
Как я уже просил в Переместить конструктор/оператор= , и через некоторое время я согласился и принял правильное ответ на этот вопрос. Я только что подумал, было бы полезно иметь что-то вроде "Moving Destructor" , который вызывался бы для...
560 просмотров

Зомби-объекты после std::move
Меня смущает состояние объекта после его перемещения с использованием семантики перемещения C++0x. Насколько я понимаю, после перемещения объекта он по-прежнему является действительным объектом, но его внутреннее состояние было изменено, так что...
2793 просмотров
schedule 29.08.2022

Когда компилятор C++11 заставит RVO и NRVO превзойти семантику перемещения и привязку константной ссылки?
Рассмотрим случай, когда из функций возвращаются «целые» объекты с включенной семантикой перемещения, как в случае с std::basic_string<> : std::wstring build_report() const { std::wstring report; ... return report; } Могу...
2325 просмотров

переместить семантику и время жизни переменных при привязке ссылки lvalue к rvalues
просто чтобы хорошо понимать, что там под капотом... вопросы в коде в виде комментариев void test(int && val) { val=4; }//val is destroyed here ? int main() { int nb; test(std::move(nb)); //undefined...
701 просмотров
schedule 24.05.2022

Перемещение семантики и возврат константных значений
У меня есть привычка (?!?!?) возвращать все как "константное" значение. Так... struct s; s const make_s(); s const &s0 = make_s(); s const s1 = make_s(); С операциями перемещения и ссылками на r-значение и следующими функциями......
2070 просмотров

Могу ли я инициализировать список векторов типа "только перемещение"?
Если я пропущу следующий код через мой снимок GCC 4.7, он попытается скопировать unique_ptr s в вектор. #include <vector> #include <memory> int main() { using move_only = std::unique_ptr<int>;...
18136 просмотров

Понимание преимуществ семантики перемещения по сравнению с метапрограммированием шаблонов
Я прочитал некоторые описания семантики перемещения в С++ 11, и мне интересно, в каком контексте ее можно использовать. В настоящее время многие математические библиотеки C++ используют метапрограммирование шаблонов для задержки оценки. Если M = A...
1843 просмотров
schedule 03.02.2023

Частный конструктор запрещает использование emplace[_back](), чтобы избежать перемещения
Рассмотрим следующий код: #include <vector> class A { public: A(A&&); // somewhat expensive static std::vector<A> make_As() { std::vector<A> result; result.push_back(A(3));...
2189 просмотров

Убедитесь, что конструктор копирования никогда не вызывается, когда существует конструктор перемещения
При разработке класса, который можно перемещать, но не копировать, естественно объявить конструктор копирования закрытым. При наличии только перемещаемых и тривиально копируемых объектов в качестве членов экземпляра имеет смысл разрешить компилятору...
348 просмотров

Могу ли я обычно / всегда использовать std :: forward вместо std :: move?
Я смотрел Скотта Мейерса поговорим об универсальных справочниках с конференции C ++ and Beyond 2012, и пока все имеет смысл. Однако примерно через 50 минут один из зрителей задает вопрос, который меня тоже интересовал. Мейерс говорит, что его не...
7695 просмотров

Безопасно ли перемещать элементы списка инициализаторов?
Возможный дубликат: initializer_list и семантика перемещения В этом коде: #include <vector> #include <initializer_list> template<typename T> class some_custom_container : public std::vector<T> { public:...
1773 просмотров

Почему вы используете std :: move, когда у вас есть && в C ++ 11?
Возможное дублирование: Что такое семантика перемещения? Недавно я посетил семинар по C ++ 11, и мне был дан следующий лакомый совет. when you have && and you are unsure, you will almost always use std::move Может ли...
28187 просмотров
schedule 15.08.2023

Обходные пути для отсутствия ссылок rvalue на эту функцию
У меня есть класс контейнера прокси вокруг подвижного объекта, и я хочу, чтобы прокси мог неявно выдавать ссылку rvalue на базовый объект, но только тогда, когда сам прокси перемещается. Я считаю, что смогу реализовать это поведение согласно...
2867 просмотров

Имеют ли встроенные типы семантику перемещения?
Рассмотрим этот код: #include <iostream> using namespace std; void Func(int&& i) { ++i; } int main() { int num = 1234; cout << "Before: " << num << endl; Func(std::move(num)); cout <<...
7746 просмотров
schedule 21.10.2022

как избежать копирования в преобразовании диапазона повышения
Преобразование диапазона повышения требует const & для диапазонов в аргументах. #include <iostream> #include <vector> #include <boost/range/algorithm.hpp> int main(int argc, char *argv[]) { using namespace std;...
1116 просмотров
schedule 24.02.2024

Почему resize() вызывает копирование, а не перемещение содержимого вектора при превышении емкости?
Данный класс X ниже (специальные функции-члены, отличные от явно определенной, не относятся к этому эксперименту): struct X { X() { } X(int) { } X(X const&) { std::cout << "X(X const&)" << std::endl; }...
2718 просмотров

Следует ли использовать тип только для перемещения только потому, что копирование может быть дорогостоящим?
У меня есть шрифт, который можно копировать, но копирование может быть дорогостоящим. Я реализовал конструктор перемещения и назначение перемещения. Но у меня проблемы с производительностью, когда люди забывают вызвать move () при передаче по...
418 просмотров
schedule 05.02.2022

Когда неявные конструкторы перемещения недостаточно хороши?
Когда неявные конструкторы перемещения недостаточно хороши? Должен ли я относиться к нему как к деструкторам и конструкторам копирования, где это обычно необходимо только в том случае, если я управляю своей собственной памятью? Достаточно ли...
1653 просмотров
schedule 18.05.2023

Функция двойная для std::move?
Предположим, у меня есть класс только с одним конструктором: class T { public: T(BigClass&& big) : big(std::move(big)) {} ... SomeBigClass }; В большинстве случаев конструктор вызывается для временных объектов, но в одном...
309 просмотров
schedule 20.07.2022