我想了解std :: ref是如何工作的。
#include <functional>
#include <iostream>
template <class C>
void func(C c){
c += 1;
}
int main(){
int x{3};
std::cout << x << std::endl;
func(x);
std::cout << x << std::endl;
func(std::ref(x));
std::cout << x << std::endl;
}
Output : 3 3 4
在上面的代码中,我认为第三个函数调用的模板参数C
被实例化为std::reference_wrapper<int>
。
在阅读the reference时,
我注意到+=
中没有std::reference_wrapper<int>
运算符。
那么,c += 1;
如何有效?
答案 0 :(得分:18)
c += 1;
如何有效?
因为reference_wrapper<int>
可通过其转换运算符隐式转换为int&
;如果操作数类型本身没有合适的重载,则考虑对操作数进行隐式转换。
答案 1 :(得分:12)
std::reference_wrapper<T>
有一个conversion operator到T&
。这意味着在您的示例中,std :: reference_wrapper可以隐式转换为int&
。