Результаты поиска по запросу "rvalue-reference"
C ++ 11: Почему разрешено присваивать значения?
Из того, что я понимаю, причина, по которой опасно возвращать ссылки на rvalues из функций, обусловлена следующим кодом: T&& f(T&& x) { do_something_to_T(x); return static_cast<T&&>(x); } T f(const T& x) { T x2 = x; do_something_to_T(x2); return ...
память или ограниченный ресурс, такой как дескриптор файла. Но необходимость передать их обратно пахнет скорее «плохим дизайном», чем «полезным ограничением».
рограммировании на C ++ 03 мы не можем передать безымянный временныйT() к функцииvoid foo(T&);, Обычное решение - дать временному имя, а затем передать его следующим образом: T v; foo(v);Теперь идет C ++ 0x - и теперь со ссылками на rvalue ...
Все 3 варианта удовлетворяют 1, поскольку default + copy, default + move эквивалентны значению по умолчанию. Все 3 варианта удовлетворяют 3. Все 3 варианта удовлетворяют 2: они работают для типов DefaultConstructible. Определенный алгоритм может использоваться для Подвижных типов. В STL принято использовать разные версии алгоритмов для типов с разными возможностями.
у приложение для Linux и Windows, и заметил, что сборка GCC производит много бесполезных вызовов конструктора копирования. Вот пример кода, чтобы произвести это поведение: struct A { A() { std::cout << "default" << std::endl; } A(A&& rvalue) ...
Является ли конструкция «передача по значению и перемещению» плохой идиомой?
Так как у нас есть семантика перемещения в C ++, в настоящее время это обычно делается void set_a(A a) { _a = std::move(a); }Причина в том, что еслиa является значением, копия будет удалена, и будет только один ход. Но что произойдет, еслиa ...
Какой вариант использования для перегрузки функций-членов в ссылочных квалификаторах?
C ++ 11 позволяет перегружать функции-члены на основе ссылочных квалификаторов: class Foo { public: void f() &; // for when *this is an lvalue void f() &&; // for when *this is an rvalue }; Foo obj; obj.f(); // calls lvalue ...
Синтаксис для универсальных ссылок
Это ссылка на значение: void foo(int&& a);Это не связывает с lvalues: int i = 42; foo(i); // errorЭто универсальная ссылка: template<typename T> void bar(T&& b);Он связывается с rvalues, а также с lvalues: bar(i); // okayЭто ссылка на ...
Передача по ссылке, константной ссылке, rvalue-ссылке или постоянной rvalue-ссылке?
Я учился прохождению по ссылке, и вот тест, который я сделал: #include <iostream> using namespace std; int i = 0; //If this is uncommented, compiler gives ambiguous definition error. //void paramCheck (string s) { // cout << ++i << ". Param is ...