std :: ref使用模板函数和函数传递值

时间:2016-12-13 21:42:34

标签: c++ c++11

我有两个功能:

void fun(int k) {
    ++k;
}

template<class T> 
void inc(T t) {
    ++t;
}

我用std :: ref:

调用这些函数
int p = 5;
int o = 5;
fun(std::ref(p));
inc(std::ref(o));

在p的值为5之后,o的值为6.当我用std :: ref为这些函数调用函数时有什么区别?

1 个答案:

答案 0 :(得分:10)

std::ref会返回std::reference_wrapper,其implicitly convertible为其包装类型。

在致电fun(std::ref(p))时,您隐式将新装箱的std::reference_wrapper转换为int,并制作副本。

调用inc(std::ref(p))时,您正在复制std::reference_wrapper本身,保留引用语义