我有两个功能:
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为这些函数调用函数时有什么区别?
答案 0 :(得分:10)
std::ref
会返回std::reference_wrapper
,其implicitly convertible为其包装类型。
在致电fun(std::ref(p))
时,您隐式将新装箱的std::reference_wrapper
转换为int
,并制作副本。
调用inc(std::ref(p))
时,您正在复制std::reference_wrapper
本身,保留引用语义。