Вопросы с тегом «rvalue-reference»

Ссылка rvalue - это новая языковая функция в C ++ 11, представляющая ссылку на rvalue. Вместе со сворачиванием ссылок они используются для реализации и включения семантики перемещения и идеальной пересылки.

801
Что означает T && (двойной амперсанд) в C ++ 11?

Я изучил некоторые из новых функций C ++ 11, и одна из них я заметил, это двойной амперсанд при объявлении переменных, например T&& var. Для начала, как зовут этого зверя? Я бы хотел, чтобы Google позволил нам искать такие знаки препинания, как этот. Что именно это значит? На первый взгляд,...

438
Каковы основные цели использования std :: forward и какие проблемы он решает?

При совершенной пересылке std::forwardиспользуется для преобразования именованных ссылок rvalue t1и t2в безымянные ссылки rvalue. Какова цель сделать это? Как это повлияет на вызываемую функцию, innerесли мы оставим t1& t2как значения? template <typename T1, typename T2> void...

435
C ++ 11 значения и путаница в семантике перемещения (оператор return)

Я пытаюсь понять rvalue ссылки и переместить семантику C ++ 11. В чем разница между этими примерами, и какой из них не будет делать векторные копии? Первый пример std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int>...

157
Переместить захват в лямбду

Как мне перехватить по ходу (также известный как rvalue reference) в лямбда-выражении C ++ 11? Я пытаюсь написать что-то вроде этого: std::unique_ptr<int> myPointer(new int); std::function<void(void)> example = [std::move(myPointer)]{ *myPointer = 4;...

115
Как можно вызвать std :: forward для всех аргументов в вариативной функции?

Я просто писал универсальную объектную фабрику и использовал мета-библиотеку препроцессора boost для создания вариативного шаблона (с использованием 2010, а он их не поддерживает). Моя функция использует ссылки rval иstd::forward выполняет идеальную пересылку, и это заставило меня задуматься ......

85
C ++ 11 make_pair с указанными параметрами шаблона не компилируется

Я просто играл с g ++ 4.7 (один из более поздних снимков) с включенным -std = c ++ 11. Я пытался скомпилировать часть существующего кода, и один неудачный случай меня несколько смущает. Буду признателен, если кто-нибудь сможет объяснить, что происходит. Вот код: #include <utility> #include...

18
Значения лямбда-замыкания могут быть переданы как ссылочные параметры rvalue.

Я обнаружил, что lvalueлямбда-замыкания всегда можно передать в качестве rvalueпараметров функции. Смотрите следующую простую демонстрацию. #include <iostream> #include <functional> using namespace std; void foo(std::function<void()>&& t) { } int main() { // Case 1:...