Вопросы по теме 'rvalue-reference'

минимальная и идеальная переадресация
Алгоритм min обычно выражается следующим образом: template <typename T> const T& min(const T& x, const T& y) { return y < x ? y : x; } Однако это не позволяет использовать конструкции вида min(a, b) = 0 . Вы можете...
774 просмотров

Проблема со ссылочной переменной параметра шаблона
Следующий небольшой пример показывает мою проблему: template<class T> struct X { static void xxx(T& x) { } static void xxx(T&& x) { } }; int main(int argc, char** argv) { int x = 9; X<int>::xxx(x); // OK....
1317 просмотров
schedule 04.05.2022

Есть ли в D что-то похожее на семантику перемещения C++0x?
Проблема «типов значений» с внешними ресурсами (такими как std::vector<T> или std::string ) заключается в том, что их копирование, как правило, довольно дорого, а копии создаются неявно в различных контекстах, поэтому это, как правило, влияет...
3234 просмотров
schedule 13.11.2022

Правило трех становится правилом пяти с C ++ 11?
Итак, после просмотра в этой замечательной лекции о ссылках на rvalue, я подумал, что каждый класс выиграет от такого «конструктора перемещения», template<class T> MyClass(T&& other) edit и, конечно же, оператора присваивания...
72822 просмотров

Параметры значения неявно перемещаются при возврате по значению?
Рассмотрим следующую функцию: Foo foo(Foo x) { return x; } Будет ли return x вызывать конструктор копирования или конструктор перемещения? (Давайте оставим здесь NRVO в стороне.) Для исследования я написал простой класс Foo ,...
575 просмотров

Перегрузка ссылками rvalue
Идеальная переадресация — это здорово и все такое. Но что мне делать, если я хочу не идеально пересылать, а просто перегружать что-то, что оказывается шаблонным типом? template<typename T> void foo(T&& ref); template<typename...
184 просмотров
schedule 18.12.2022

С++ 0x T оператор + (const T&, T&&) шаблон, все еще нужно переместить?
Некоторое время назад мне сказали, что обычный шаблон для реализации двумерных операторов требует конечного move в возврате. Matrix operator+(const Matrix &a, Matrix &&b) { b += a; return std::move(b); } Но теперь есть...
274 просмотров

Использование ссылки Rvalue в списках инициализации
В последнее время я играл со ссылками Rvalue и столкнулся со странной проблемой. Давайте определим некоторый простой класс с именем Foo, который содержит vector< int > : class Foo { public: Foo(std::vector< int >&& v)...
1713 просмотров
schedule 25.07.2023

О хороших практиках перехвата исключений
Я пишу небольшую программу на С++ 11 и впервые использую исключения. У меня есть вопрос о том, как эффективно перехватывать исключения, и после некоторого поиска в Google у меня все еще нет ответа. Вот вопрос: что более эффективно (или...
3014 просмотров

Как сделать так, чтобы параметр ссылки rvalue в шаблоне был привязан ТОЛЬКО к ссылке rvalue?
Я пишу сетевую библиотеку и интенсивно использую семантику перемещения для обработки прав собственности на файловые дескрипторы. Один из моих учеников желает получить обертки файловых дескрипторов других типов и стать владельцем, так что это что-то...
7893 просмотров
schedule 07.07.2022

Путаница с привязкой rvalue в C ++
У меня есть три вызова функций, которые, как мне кажется, следует рассматривать (примерно) одинаково, но, очевидно, это не так. Я пытаюсь понять, почему один из трех не компилируется (g ++ -std = c ++ 0x). // Minimal example to reproduce a...
9161 просмотров

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

Вариативная версия FastDelegate и копия с дополнительным значением
Я портирую FastDelegate на C ++ 0x с использованием вариативных шаблонов. #include "FastDelegate.h" template<class R=fastdelegate::detail::DefaultVoid, class ...P> class fast_delegate_base { private: typedef...
710 просмотров

Увеличивается ли время жизни xvalue, когда оно привязано к ссылке const lvalue?
Если я напишу следующий код: #include <iostream> using namespace std; int main() { cout << &(int &&)123 << endl; return 0; } Затем g++ жалуется: foo.cc: In function ‘int main()’: foo.cc:7:20: error:...
1261 просмотров
schedule 08.12.2022

Какие библиотеки Boost используют преимущества Move Semantics
Ссылки Rvalue и семантика Move — это основная функция C++11, которая может значительно ускорить код за счет уменьшения количества ненужных копий. STL был обновлен, чтобы использовать эту новую функцию, когда используется компилятор c++ 11/0x...
1507 просмотров

Семантика возвращаемого типа ссылки на r-значение?
Представляет ли подобный возвращаемый тип что-то значимое в С++ 11? template <typename R> R&& grabStuff(); T instance = grabStuff<T>(); Я надеюсь, что grabStuff должен вызвать ошибку времени компиляции, если R не...
2604 просмотров
schedule 14.12.2022

Должен ли я возвращать ссылку rvalue (путем std::move'ing)?
Следующая запись в блоге C++ говорит, что A compute(…) { A v; … return v; } Если у A есть доступный конструктор копии или перемещения, компилятор может отказаться от копии. В противном случае, если A имеет конструктор...
9399 просмотров
schedule 10.07.2022

Продление срока службы временного объекта с помощью ссылки rvalue
Согласно другому ответу , ссылка rvalue не будет продлевать время жизни временного объекта, если выражение, ссылающееся на него, является выражением xvalue . Так как std::move возвращает ссылку rvalue, выражение ее вызова является значением x,...
2221 просмотров

Перегрузка оператора C++ для указателей
Интересно (просто из любопытства), почему перегрузка операторов не разрешена в C++ для указателей. Я имею в виду что-то вроде этого: Vector2d* operator+(Vector2d* a, Vector2d* b) { return new Vector2d(a.x + b.x, a.y + b.y); } Vector2d* a = new...
6390 просмотров

привязка выражения lvalue типа T&&
В последние несколько дней я пытался понять, казалось бы, тривиальный принцип, лежащий в основе ссылок lvalue/rvalue. Давайте определим новую ссылку rvalue: int&& x = 12; Таким образом, x является выражением lvalue типа...
156 просмотров
schedule 21.01.2023