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

2 ответа

Передать по ссылке как значение

Когда я пытаюсь вызвать элемент перемещения как передачу по ссылке, компилятор выдает ошибку, но когда я переопределяю функцию-член для передачи по значению, это работает. Могу ли я не использовать передачу по ссылке в качестве значения в моей функц…
05 авг '15 в 01:35
2 ответа

Имеют ли ссылки на rvalue те же издержки, что и ссылки на lvalue?

Рассмотрим этот пример: #include <utility> // runtime dominated by argument passing template <class T> void foo(T t) {} int main() { int i(0); foo<int>(i); // fast -- int is scalar type foo<int&>(i); // slow -- lvalue ref…
14 авг '18 в 03:00
1 ответ

Запутанные сообщения об ошибках с именованными ссылками rvalue

Учтите следующее: struct my_type {}; my_type make_my_type() { return my_type{}; } void func(my_type&& arg) {} int main() { my_type&& ref = make_my_type(); func(ref); } Излишне говорить, что этот код не компилируется. Я понимаю, что м…
2 ответа

Шаблоны и использование ссылок на значения в качестве параметра

Итак, у меня есть std::map< std::string, boost::any > называется OptionsMap и я хочу создать функцию, которая принимает любой тип (следовательно, шаблон) и сохраняет его на карте. Будет ли следующий код работать? template <typename T> vo…
3 ответа

Возврат аргумента, переданного по ссылке rvalue

Если у меня есть класс A и функции A f(A &&a) { doSomething(a); return a; } A g(A a) { doSomething(a); return a; } конструктор копирования вызывается при возврате a от f, но конструктор перемещения используется при возврате из g, Однако из т…
2 ответа

Передать по значению и справке

У меня есть практический вопрос, который поставил меня в тупик для предстоящего сертификационного теста. Пожалуйста, помогите в любом случае, что вы можете! Я думаю, что понимаю, как получить ответную часть ответа по значению, но НЕТ ИДЕИ в ответной…
4 ответа

Предотвратить передачу временного объекта

У меня есть класс, который "запоминает" ссылку на некоторый объект (например, целочисленная переменная). Я не могу заставить его ссылаться на значение, которое немедленно уничтожается, и я ищу способ защитить пользователей моего класса от случайных …
4 ответа

Каков наиболее эффективный способ установить переменную класса, используя rvalue в C++?

Я только начал работать с C++11 r-значениями. Я прочитал несколько уроков, но я не нашел ответа. Каков наилучший (самый эффективный) способ установить переменную класса? Код ниже верен или нет? (предположим, что std::string имеет определенный констр…
1 ответ

Повторно использовать конструктор. Передайте rvalue в const lvalue и не повторяйте реализацию

У меня есть идея, как упростить удаление повторений кода. Пожалуйста, помогите мне понять, можно ли это использовать, хорошо, и, возможно, давайте обновимся. struct NetAdres { /*#1*/NetAdres(const std::string &str, uint16_t port); //#1 /*#2*/Net…
1 ответ

Совместное использование реализаций для перегрузок const lvalue (const T&) и rvalue (T&&): точно так же, как это делается для константных и неконстантных перегрузок

Фон Следующий блок кода появляется в известной книге Скотта Мейерса "Эффективный C++", пункт 3: class TextBlock { public: ... const char& operator[](std::size_t position) const { ... // do bounds checking ... // log access data ... // verify da…
1 ответ

Передача по значению или универсальная ссылка

Я хочу разработать небольшой полиморфный класс со стиранием типов, и мне интересно, какая версия шаблонного конструктора лучше и должна использоваться. Мы можем передать по значению: class A { ... template< typename T > A( T t ) { /* create th…
1 ответ

Возвращаемое значение rvalue против возврата по значению в типе возврата функции

В моем коде у меня есть функция, которая создает строку из части данных, а затем возвращает ее. Эта строка больше нигде не используется, поэтому принимающая сторона может использовать для нее перемещение-назначение или перемещение-инициализацию. std…
3 ответа

В чем разница между этими двумя определениями шаблонов функций?

template <typename Func, typename... Args> static void WraperFunc(Func func, Args &&... args) { SomeFunc(func, args...); } против template <typename Func, typename... Args> static void WraperFunc(Func func, Args ... args) { SomeF…
1 ответ

Как правильно переопределить "отсутствие неконстантной ссылки на временный объект"

У меня есть класс Foo, Foo имеет несколько неконстантных методов. Я в порядке с вызовом неконстантных методов на временной Foo объект; Меня интересует только то, что методы на самом деле возвращают, чем то, что они делают с Foo сам объект Первый воп…
19 июн '13 в 19:28
2 ответа

T&& в шаблонной функции и классе

Я только что наткнулся на это T&& в классе и функции означает разные вещи.В функции: template<class T> void f(T&& t){}; // t is R or L-value ... int i=0; f(i); // t in f is lvalue f(42); // t in f is rvalue В классе: template&l…
0 ответов

Ссылка на rvalue может связываться только с неконстантными значениями?

В предыдущем сообщении указывалось, что ссылка на rvalue может связываться только с неконстантными значениями: Разница между возвратом константной ссылки и ссылки на rvalue Однако, если это правда, как работает идеальная пересылка? Для этого определ…
3 ответа

Почему я не могу передать rvalue-ссылку, как это делается для другой функции в C++11?

У меня есть код: void f(int&& i) { auto lambda = [](int&& j) { (void)j; } lambda(i); } int main() { f(5); } Clang ++ выдает ошибку: no known conversion from 'int' to 'int &&' for 1st argument Почему i меняет свой тип на int к…
8 ответов

Является ли возврат по значению всегда постоянным?

Этот код не компилируется: class C {}; void foo (C& c) {} C bar() { return C(); } int main() { foo(bar()); } Ошибка компиляции (GCC 4.1.2) в строке foo(bar()): неверная инициализация неконстантной ссылки типа "C&" из временного типа "C" Как bar(…
1 ответ

Как принять неконстантный тип параметра rvalue и lvalue

Я неоднократно сталкиваюсь с проблемой принятия неконстантного ссылочного параметра, так как кажется, что принятие параметра rvalue предотвращает принятие lvalues ​​и наоборот. Вот пример void read(File &file)// I want to modify file { SomeClass…
1 ответ

Привязка const rvalue к ссылке rvalue

При реализации BS Tree я заметил некоторые вещи, в которых я не был так уверен, так как начал использовать умные указатели C++11, и это заставляет меня задуматься, почему это так. Код ниже работает нормально, если я использую пары init-brace {} вмес…