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

Аргумент lvalue предпочитает ссылочный параметр lvalue универсальной ссылке?
Играя с универсальными ссылками, я наткнулся на случай, когда clang и gcc расходятся во мнениях относительно разрешения перегрузки. #include <iostream> struct foo {}; template<typename T> void bar(T&) { std::cout << "void...
364 просмотров

Какое правильное ограничение enable_if для идеального установщика переадресации?
Назад к основам! Презентация Essentials of Modern C++ на CppCon обсудила различные варианты передачи параметров и сравнила их производительность с простотой написания/обучения. «Расширенный» вариант (обеспечивающий наилучшую производительность во...
1544 просмотров

Проблемы с универсальной ссылкой условного типа
Итак, у меня есть функция, которую я использую для проверки значений и создания исключения, если значение недопустимо, в противном случае возвращаю значение обратно в том виде, в котором оно было получено. Я пытаюсь обобщить эту рутину с помощью...
260 просмотров

Когда я должен std::forward вызывать функцию?
Фрагмент кода, который я видел в Effective Modern C++ , имеет умную реализацию инструментального обоснования для создания функция таймера : auto timeFuncInvocation = [](auto&& func, auto&&... params) { start...
3030 просмотров

auto&& переменная не является ссылкой на rvalue
Почему auto&& не является ссылкой на rvalue? Widget&& var1 = Widget(); // rvalue reference auto&& var2 = var1; //var2 not rvalue reference ниже приведен справочный пример rvalue void f(Widget&& param); // rvalue...
790 просмотров
schedule 11.12.2022

Почему std::forward возвращает static_cast‹T&&›, а не static_cast‹T›?
Пусть функция с именем Y перегружается: void Y(int& lvalue) { cout << "lvalue!" << endl; } void Y(int&& rvalue) { cout << "rvalue!" << endl; } Теперь давайте определим функцию шаблона, которая действует...
1109 просмотров

Какая польза от пересылки rvalue?
Я читаю запись std::forward в cppreference . Для второй перегрузки std::forward есть пример: template<class T> void wrapper(T&& arg) {...
100 просмотров
schedule 03.06.2023

Почему для пересылки ссылок необходим std :: forward
В таком шаблоне функции template <typename T> void foo(T&& x) { bar(std::forward<T>(x)); } Разве x не является ссылкой на rvalue внутри foo , если foo вызывается со ссылкой на rvalue? Если foo вызывается со ссылкой...
1282 просмотров

Иметь ссылку на rvalue вместо ссылки на пересылку с вариативным шаблоном
У меня есть структура X и функция foo , которая должна получать ссылки rvalue на X . Сначала я начал с одного аргумента, и он был прост (ох... времена попроще): auto foo(X&& arg) -> void {...}; X x; foo(x); // compile...
859 просмотров

Ссылка на пересылку C++ и ссылка на r-значение
Я понимаю, что ссылка на переадресацию — это «ссылка rvalue на параметр шаблона без квалификации cv», например, в template <class T> void foo(T&& ); что означает, что приведенная выше функция может принимать ссылку как на...
3908 просмотров

Явное создание экземпляра шаблона и ссылки на пересылку
Недавно я обсуждал со студентами возможности ограничения типов для шаблонов , использующих ссылки для переадресации . Я знал о сравнении типов по is_same вместе с static_assert или enable_if , но мы также говорили о явном создании экземпляров...
317 просмотров

Выведены конфликтующие типы для универсальной ссылки и указателя на элемент
Я хочу такую ​​функцию: template<typename C, typename T> void foo(C &&aclass, T (C::*const memberFunc)(unsigned)) { } Параметры (словами, потому что синтаксис типа C/C++ является ментальным): Универсальная ссылка на класс,...
261 просмотров
schedule 20.04.2023

Идеальная функция пересылки вывела конфликтующую ошибку
Я тестирую идеальную пересылку, и я не понимаю, почему TEST_EQ(string("olleH"), s) компиляция не удалась, а string("olleH") == s компиляция прошла. Как мне исправить мою функцию TEST_EQ здесь? template<typename S> static bool...
58 просмотров

Пересылка отдельных членов ссылки Forward
У меня есть функция, которая потенциально перемещает общий аргумент, но через его членов. Какой из этих вариантов более правильный: Это кажется более естественным, но странным, потому что аргумент потенциально перемещается дважды [a], что...
32 просмотров

Понимание реализации std::forward начиная с C++11
( constexpr и noexcept опущены, так как они кажутся неуместными для понимания поведения std::forward .) Основываясь на моем понимании «Эффективного современного C++» Скотта Мейерса, пример реализации std::move в C++14 выглядит следующим...
183 просмотров

Идеальный конструктор пересылки и удаленные конструкторы
Как указал Майкл Парк добавление идеальных конструкторов переадресации может быть сложным, если мы не хотим оказаться в неправильном конструкторе. В настоящее время у меня есть класс A , который использует идеальный конструктор пересылки, и...
136 просмотров

Как пересылать упакованные вариативные аргументы
У меня есть функция, которая принимает переменные аргументы, упакованные в кортеж. template <class... Args> void Bottom(tuple<Args&&...> t) { } Является ли Args&& ссылкой для пересылки? т.е. будут ли применяться...
89 просмотров

Передать строковый литерал в функцию шаблона
Я пытаюсь специализировать функцию шаблона для нескольких типов, один из них — const char*. template<typename T = const char*> void f(T&&); template<> void f<int>(int&& k) { std::cout << "Now in int fcn...
75 просмотров

Использование универсальных ссылок с нешаблонными типами?
Я создаю простой оператор конвейера для векторов, который пользователь будет использовать следующим образом (псевдокод): auto x = std::vector{1,2,3} | push_back(10) | push_back(100) ;...
69 просмотров