Описание тега rvalue-reference

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

Ссылочный параметр Rvalue истекает при передаче через std::forward?

У меня есть этот код, который пытается совершенную пересылку пакета параметров шаблона в std::function через промежуточный класс: #include <functional> #include <vector> #include <algorithm> #include <iterator> #include <m…
29 дек '14 в 10:41
0 ответов

push_back PR-значение в векторе

Внимательно читая ссылки, конструктор перемещения может быть вызван только Xvalue. Тогда как-то так... std::vector<Class> vec vec.push_back(Class(..args..)) возможно без перемещения (приведения) к Xvalue? Есть ли конкретный способ использовани…
1 ответ

Что такое использование ссылочных переменных-членов rvalue

Мне было интересно, есть ли смысл иметь ссылочную переменную rvalue (не как параметр функции)? Я понимаю использование ссылки rvalue, когда она используется как переменная функции, так как тогда можно избежать ненужных распределений и т. Д. Но есть …
17 май '15 в 19:40
1 ответ

Как мне обеспечить вызов конструктора перемещения? (переместить семантику и ссылку на значение)

У меня есть этот кусок кода #include <iostream> #include <vector> using namespace std; class ArrayWrapper { private: int *_p_vals; int _size; public: //default constructor ArrayWrapper () : _p_vals( new int[ 64 ] ) , _size( 64 ) { cout &…
07 ноя '17 в 16:10
1 ответ

make_tuple с параметрами шаблона не компилируется

Рассмотрим этот код: #include <tuple> int main() { int i; long k; auto tup1 = std::make_tuple<long>(i); // Compiles auto tup2 = std::make_tuple<int>(k); // Compiles auto tup3 = std::make_tuple<int>(i); // Does not compile aut…
28 окт '16 в 09:19
2 ответа

Каково намерение конструктора forward-by-lvalue-reference, пока существует совершенный конструктор пересылки?

Давайте принимать std::pair<T1, T2> В качестве примера. Он имеет следующие два конструктора: constexpr pair( const T1& x, const T2& y ); // #1 template< class U1, class U2 > constexpr pair( U1&& x, U2&& y ); // #2…
2 ответа

Инициализация массива-члена с некопируемым non pod

Я думаю, что самый простой способ задать вопрос - это пример. Предположим, у нас есть следующий тип: class Node { // make noncopyable Node(const Node& ref) = delete; Node& operator=(const Node& ref) = delete; // but moveable Node(Node&am…
1 ответ

"Нет жизнеспособного перегруженного =" nullptr

Я только начал с C++ и застрял в конструкторе перемещения. Вот мой .cpp: SimpleMatrix::SimpleMatrix(SimpleMatrix &&other_mat) { cols = other_mat.cols; rows = other_mat.rows; data_ = other_mat.data_; other_mat.cols = 0; other_mat.rows = 0; ot…
3 ответа

Синтаксис для универсальных ссылок

Это ссылка на значение: void foo(int&& a); Это не связывает с lvalues: int i = 42; foo(i); // error Это универсальная ссылка: template<typename T> void bar(T&& b); Он связывается с rvalues, а также с lvalues: bar(i); // okay Эт…
1 ответ

Свертывание ссылок для локальных переменных

В шаблоне функции, параметризованном на Tтип T&& может быть или не быть ссылкой на rvalue, в зависимости от категории значения аргумента: template <typename T> void function(T&& x) { // ... } std::string some_named_string; func…
0 ответов

Подпись аргумента перемещения C++ не распространена

map является std::unordered_map, T имеет конструктор перемещения. void foo(const std::string& s, T&& t) { map.insert(std::pair<std::string, T>(s, t)); } T t; foo("", std::move(t)); Почему этот код не вызывает template<class U, c…
1 ответ

Rvalue ссылка на временную декларацию

E && e0 = E () ; E e1 ; есть ли различия между этими двумя случаями объявления объекта?;
30 янв '16 в 13:02
1 ответ

Что означают квалификаторы функций-членов (кроме const)?

Общеизвестно, что методы класса могут быть квалифицированы с const - и если они есть, им не разрешено изменять экземпляр, к которому они обращаются (игнорируя mutable так далее). Можно думать об этом, как будто функция-член была автономной, но получ…
1 ответ

C++: Где мое значение?

Пожалуйста, рассмотрите следующий код: #include <iostream> template <class T> class value_wrapper { public: value_wrapper(T& pv) : v(pv) { std::cout<< "CONS.REF:" << pv << " AT:" << (void*)this << std::e…
10 ноя '15 в 08:19
1 ответ

MSVC++ 2013 позволяет присваивать временные объекты, эффективно обрабатывая их как lvalues

Я сталкивался с этой "особенностью" в MSVC++, и теперь я не уверен, является ли это ошибкой или мое понимание lvalues ​​/rvalues ​​в C++ просто неверно. Для иллюстрации я добавил немного заглушенного кода, но в основном проблема в том, что MSVC++ 20…
1 ответ

Разрешают ли ссылки на rvalue неявные преобразования?

Является ли следующий код законным? std::string&& x = "hello world"; g ++ 4.5.0 компилирует этот код без проблем.
2 ответа

Какая структура функций лучше?

Посмотрите на следующий код: class MyClass{ public: MyClass(){} MyClass(MyClass &&){} MyClass(const MyClass &){} }; MyClass f1(){ MyClass &&o=MyClass(); /*...*/ return std::move(o);//or return static_cast<MyClass &&&gt…
26 окт '11 в 03:20
2 ответа

Безопасно ли передавать обратный вызов std:: function<bool (std:: string)> && (т.е. как перемещение по значению) и каков эффект?

Учитывая следующий рабочий код (main.cpp): #include &lt;functional&gt; #include &lt;iostream&gt; struct worker { std::function&lt;bool(std::string)&gt; m_callback; void do_work(std::function&lt;bool(std::string)&gt; callback) // &lt;--- this line { …
29 авг '18 в 10:30
1 ответ

Превратите литье / конструкцию в идеальную передовую функцию

SSCCE: #include &lt;functional&gt; using std::function; using std::forward; template&lt;typename ToType, typename... FromTypes&gt; ToType construct(FromTypes&amp;&amp;... fromTypes) { return ToType(forward&lt;FromTypes&gt;(fromTypes)...); } class Ma…
1 ответ

Создание константной lvalue-ссылки из возврата по значению: как это работает?

Отсюда я узнал, что константная ссылка может быть сделана из объекта, возвращаемого значением функцией. Но теперь я спросил себя: куда поместить этот объект, чтобы он был безопасным и не перезаписывался стеками будущих вызовов функций? Рассмотрим э…