首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::ref

Defined in header <functional>

template< class T > std::reference_wrapper<T> ref(T& t);

(1)

(since C++11)

template< class T > std::reference_wrapper<T> ref( std::reference_wrapper<T> t );

(2)

(since C++11)

template <class T> void ref(const T&&) = delete;

(3)

(since C++11)

template< class T > std::reference_wrapper<const T> cref( const T& t );

(4)

(since C++11)

template< class T > std::reference_wrapper<const T> cref( std::reference_wrapper<T> t );

(5)

(since C++11)

template <class T> void cref(const T&&) = delete;

(6)

(since C++11)

函数模板refcref是生成类型对象的助手函数。std::reference_wrapper,使用模板参数推导若要确定结果的模板参数,请执行以下操作。

参数

t

-

lvalue reference to object that needs to be wrapped or an instance of std::reference_wrapper

返回值

1%29std::reference_wrapper<T>(t)

2%29ref(t.get())

4%29std::reference_wrapper<const T>(t)

5%29cref(t.get())

3,6%29 rvalue参考包装被删除。

例外

noexcept规格:

noexcept

二次

代码语言:javascript
复制
#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';
}

二次

产出:

二次

代码语言:javascript
复制
Before function: 10 11 12
In function: 1 11 12
After function: 10 12 12

二次

另见

reference_wrapper (C++11)

CopyConstructible and CopyAssignable reference wrapper (class template)

代码语言:txt
复制
 © cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

扫码关注腾讯云开发者

领取腾讯云代金券