std::ref, std::cref
Материал из cppreference.com
< cpp | utility | functional
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
| Заголовочный файл <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, используя вычет аргумент шаблона для определения аргумента шаблона результата.Original:
Function templates
ref and cref are helper functions that generate an object of type std::reference_wrapper, using template argument deduction to determine the template argument of the result.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Содержание |
[править] Параметры
| t | - | именующее ссылку на объект, которая должна быть обернута или экземпляр std::reference_wrapper
Original: lvalue reference to object that needs to be wrapped or an instance of std::reference_wrapper The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
[править] Возвращаемое значение
1) std::reference_wrapper<T>(t)
2) ref(t.get())
3) std::reference_wrapper<const T>(t)
4) cref(t.get())
[править] Исключений
[править] Пример
#include <functional> #include <iostream> void f(int& n1, int& n2, const int& n3) { std::cout << "In function: " << n1 << ' ' << n2 << ' ' << n3 << '\n'; ++n1; // increments the copy of n1 stored in the function object ++n2; // increments the main()'s n2 // ++n3; // compile error } 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 << "Before function: " << n1 << ' ' << n2 << ' ' << n3 << '\n'; bound_f(); std::cout << "After function: " << n1 << ' ' << n2 << ' ' << n3 << '\n'; }
Вывод:
Before function: 10 11 12 In function: 1 11 12 After function: 10 12 12
[править] См. также
| (C++11) |
CopyConstructible и CopyAssignable ссылкой обертку Original: CopyConstructible and CopyAssignable reference wrapper The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (шаблон класса) |