Вопросы по теме '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 просмотров
schedule
16.06.2022
Проблема со ссылочной переменной параметра шаблона
Следующий небольшой пример показывает мою проблему:
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 просмотров
schedule
27.06.2022
Параметры значения неявно перемещаются при возврате по значению?
Рассмотрим следующую функцию:
Foo foo(Foo x)
{
return x;
}
Будет ли return x вызывать конструктор копирования или конструктор перемещения? (Давайте оставим здесь NRVO в стороне.)
Для исследования я написал простой класс Foo ,...
575 просмотров
schedule
05.07.2022
Перегрузка ссылками 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 просмотров
schedule
05.03.2023
Использование ссылки Rvalue в списках инициализации
В последнее время я играл со ссылками Rvalue и столкнулся со странной проблемой. Давайте определим некоторый простой класс с именем Foo, который содержит vector< int > :
class Foo
{
public:
Foo(std::vector< int >&& v)...
1713 просмотров
schedule
25.07.2023
О хороших практиках перехвата исключений
Я пишу небольшую программу на С++ 11 и впервые использую исключения.
У меня есть вопрос о том, как эффективно перехватывать исключения, и после некоторого поиска в Google у меня все еще нет ответа.
Вот вопрос: что более эффективно (или...
3014 просмотров
schedule
10.01.2023
Как сделать так, чтобы параметр ссылки rvalue в шаблоне был привязан ТОЛЬКО к ссылке rvalue?
Я пишу сетевую библиотеку и интенсивно использую семантику перемещения для обработки прав собственности на файловые дескрипторы. Один из моих учеников желает получить обертки файловых дескрипторов других типов и стать владельцем, так что это что-то...
7893 просмотров
schedule
07.07.2022
Путаница с привязкой rvalue в C ++
У меня есть три вызова функций, которые, как мне кажется, следует рассматривать (примерно) одинаково, но, очевидно, это не так. Я пытаюсь понять, почему один из трех не компилируется (g ++ -std = c ++ 0x).
// Minimal example to reproduce a...
9161 просмотров
schedule
28.10.2022
Предоставление правильной семантики движений
В настоящее время я пытаюсь понять, как правильно выполнять семантику перемещения с объектом, который содержит указатель на выделенную память. У меня есть большая структура данных, которая содержит внутренний необработанный указатель на фактическое...
6551 просмотров
schedule
30.04.2023
Вариативная версия FastDelegate и копия с дополнительным значением
Я портирую FastDelegate на C ++ 0x с использованием вариативных шаблонов.
#include "FastDelegate.h"
template<class R=fastdelegate::detail::DefaultVoid, class ...P>
class fast_delegate_base {
private:
typedef...
710 просмотров
schedule
10.10.2022
Увеличивается ли время жизни 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 просмотров
schedule
12.06.2022
Семантика возвращаемого типа ссылки на 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 просмотров
schedule
30.01.2023
Перегрузка оператора C++ для указателей
Интересно (просто из любопытства), почему перегрузка операторов не разрешена в C++ для указателей. Я имею в виду что-то вроде этого:
Vector2d* operator+(Vector2d* a, Vector2d* b) { return new Vector2d(a.x + b.x, a.y + b.y); }
Vector2d* a = new...
6390 просмотров
schedule
16.02.2023
привязка выражения lvalue типа T&&
В последние несколько дней я пытался понять, казалось бы, тривиальный принцип, лежащий в основе ссылок lvalue/rvalue. Давайте определим новую ссылку rvalue:
int&& x = 12;
Таким образом, x является выражением lvalue типа...
156 просмотров
schedule
21.01.2023