std::forward. Две перегрузки приемника - для lvalue и rvalue - показывают.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpPkFw 442 of 696 menu
◀ ▶

Пересылка аргумента в C++

Исходную категорию значения внутри шаблона со ссылкой пересылки восстанавливает std::forward.

Две перегрузки приемника - для lvalue и rvalue - показывают, какая ветка сработала. Запишем цепочку шаблона и приемника:

#include <iostream> #include <utility> void sink(int& x) { std::cout << "lvalue\n"; } void sink(int&& x) { std::cout << "rvalue\n"; } template<typename T> void pass(T&& x) { sink(std::forward<T>(x)); } int main() { int n = 1; pass(n); pass(2); return 0; }

Добавьте перегрузку sink(const int&), печатающую "const lvalue\n". Передайте константную переменную через pass и выведите метку ветки.

Оберните вызов sink в шаблон template<typename T> void relay(T&& x) с std::forward. Передайте временное целое и выведите метку rvalue-ветки.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить