std::ref, std::cref
Материал из cppreference.com
< cpp | utility | functional
| Определено в заголовочном файле <functional>
|
||
| template< class T > std::reference_wrapper<T> ref(T& t); |
(1) | (начиная с C++11) |
| template< class T > std::reference_wrapper<T> ref( std::reference_wrapper<T> t ); |
(2) | (начиная с C++11) |
| template< class T > std::reference_wrapper<const T> cref( const T& t ); |
(3) | (начиная с C++11) |
| template< class T > std::reference_wrapper<const T> cref( std::reference_wrapper<T> t ) |
(4) | (начиная с C++11) |
Шаблоны функций ref и cref являются вспомогательными функциями, которые генерируют объект типа std::reference_wrapper, используя вывод типа аргумента шаблона для определения аргумента шаблона результата.
Содержание |
[править] Параметры
| t | - | lvalue-ссылка на объект, который должен быть обернут, или экземпляр std::reference_wrapper |
[править] Возвращаемое значение
1) std::reference_wrapper<T>(t)
2) ref(t.get())
3) std::reference_wrapper<const T>(t)
4) cref(t.get())
[править] Исключений
спецификация noexcept:
noexcept
[править] Пример
Запустить этот код
#include <functional> #include <iostream> void f(int& n1, int& n2, const int& n3) { std::cout << "Внутри функции: " << n1 << ' ' << n2 << ' ' << n3 << '\n'; ++n1; // инкрементирует копию n1, расположенную в функторе ++n2; // инкрементирует n2, расположенный в main() // ++n3; // ошибка компилятора } int main() { int n1 = 1, n2 = 2, n3 = 3; std::function<void()> bound_f = std::bind(f, n1, std::ref(n2), std::cref(n3)); n1 = 10; n2 = 11; n3 = 12; std::cout << "Перед функцией: " << n1 << ' ' << n2 << ' ' << n3 << '\n'; bound_f(); std::cout << "После функции: " << n1 << ' ' << n2 << ' ' << n3 << '\n'; }
Вывод:
Перед функцией: 10 11 12 Внутри функции: 1 11 12 После функции: 10 12 12
[править] См. также
| (C++11) |
CopyConstructible и CopyAssignable обёртка над ссылкой (шаблон класса) |

